Khối opigno_documents_last_group_block nằm trong opigno_learning_path/src/Plugin/Block/DocumentsLastGroupBlock.php, có dạng như sau:
<?php
không gian tên Drupal\opigno_learning_path\Plugin\Block;
sử dụng Drupal\Core\Block\BlockBase;
sử dụng Drupal\Core\Url;
/**
* Cung cấp một khối documentslastgroupblock.
*
* @Chặn(
* id = "opigno_documents_last_group_block",
* admin_label = @Translation("DocumentsLastGroupBlock"),
* danh mục = @Translation("Tùy chỉnh")
* )
*/
lớp DocumentsLastGroupBlock mở rộng BlockBase {
/**
* @var \Drupal\Component\Plugin\Context\ContextInterface[]|hỗn hợp
*/
$groupId được bảo vệ;
/**
* {@inheritdoc}
*/
xây dựng chức năng công cộng () {
$this->groupId = $gid = $this->configuration["group"];
$tid = _tft_get_group_tid($gid);
$content = _tft_folder_content($tid, FALSE, $gid);
$content = array_slice($content ?: [], 0, 4);
foreach ($content as $index => $item) {
$content[$index] = [
'#theme' => 'opigno_documents_last_group_item',
'#type' => $item["type"] == 'file' ? 'thư mục tập tin',
'#item' => $item,
'#label' => $item["name"],
'#link' => $this->itemLink($item),
];
}
$build['nội dung'] = [
'#theme' => 'opigno_documents_last_group_block',
'nội dung' => $nội dung,
];
trả lại bản dựng $;
}
(...)
và được đính kèm trong LearningPathController trong mô-đun này:
/**
* Khối tài liệu đào tạo.
*/
đào tạo hàm công khaiContentDocuments(&$content, $group) {
// $TFTController = new TFTController();
// $listGroup = $TFTController->listGroup($group->id());
$tft_url = Url::fromRoute('tft.group', ['group' => $group->id()])->toString();
$content['tabs'][] = $tft_url = [
'#markup' => '<div class="see-all see-all-files"><a href="' . $tft_url . '">' . $this->t('Xem tất cả') . '</a></div>',
];
$block_render = $this->attachBlock('opigno_documents_last_group_block', ['group' => $group->id()]);
$block_render["content"]['link'] = $tft_url;
$content['tab_content']['documents'] = (isset($block_render["content"]["content"]) && !empty($block_render["content"]["content"])) ? [
'#type' => 'thùng chứa',
'#thuộc tính' => [
'id' => 'tài liệu',
],
'chặn' => [
'nội dung' => $block_render["nội dung"],
],
] : [];
}
Tôi đã cố gắng mở rộng nó trong mô-đun tùy chỉnh: web/modules/custom/npx_files/src/Plugin/Block/NpxFilesDocumentsLastGroupBlock.php:
<?php
không gian tên Drupal\npx_files\Plugin\Block;
sử dụng Drupal\opigno_learning_path\Plugin\Block;
Khối opigno_documents_last_group_block nằm trong opigno_learning_path/src/Plugin/Block/DocumentsLastGroupBlock.php, có dạng như sau:
<?php
không gian tên Drupal\opigno_learning_path\Plugin\Block;
sử dụng Drupal\Core\Block\BlockBase;
sử dụng Drupal\Core\Url;
/**
* Cung cấp một khối documentslastgroupblock.
*
* @Chặn(
* id = "opigno_documents_last_group_block",
* admin_label = @Translation("DocumentsLastGroupBlock"),
* danh mục = @Translation("Tùy chỉnh")
* )
*/
lớp DocumentsLastGroupBlock mở rộng BlockBase {
/**
* @var \Drupal\Component\Plugin\Context\ContextInterface[]|hỗn hợp
*/
$groupId được bảo vệ;
/**
* {@inheritdoc}
*/
xây dựng chức năng công cộng () {
$this->groupId = $gid = $this->configuration["group"];
$tid = _tft_get_group_tid($gid);
$content = _tft_folder_content($tid, FALSE, $gid);
$content = array_slice($content ?: [], 0, 4);
foreach ($content as $index => $item) {
$content[$index] = [
'#theme' => 'opigno_documents_last_group_item',
'#type' => $item["type"] == 'file' ? 'thư mục tập tin',
'#item' => $item,
'#label' => $item["name"],
'#link' => $this->itemLink($item),
];
}
$build['nội dung'] = [
'#theme' => 'opigno_documents_last_group_block',
'nội dung' => $nội dung,
];
trả lại bản dựng $;
}
(...)
và được đính kèm trong LearningPathController trong mô-đun này:
/**
* Khối tài liệu đào tạo.
*/
đào tạo hàm công khaiContentDocuments(&$content, $group) {
// $TFTController = new TFTController();
// $listGroup = $TFTController->listGroup($group->id());
$tft_url = Url::fromRoute('tft.group', ['group' => $group->id()])->toString();
$content['tabs'][] = $tft_url = [
'#markup' => '<div class="see-all see-all-files"><a href="' . $tft_url . '">' . $this->t('Xem tất cả') . '</a></div>',
];
$block_render = $this->attachBlock('opigno_documents_last_group_block', ['group' => $group->id()]);
$block_render["content"]['link'] = $tft_url;
$content['tab_content']['documents'] = (isset($block_render["content"]["content"]) && !empty($block_render["content"]["content"])) ? [
'#type' => 'thùng chứa',
'#thuộc tính' => [
'id' => 'tài liệu',
],
'chặn' => [
'nội dung' => $block_render["nội dung"],
],
] : [];
}
Tôi đã cố gắng mở rộng nó trong mô-đun tùy chỉnh: web/modules/custom/npx_files/src/Plugin/Block/NpxFilesDocumentsLastGroupBlock.php, nhưng nó không thực sự được kích hoạt (tôi không chắc liệu mình có thể mở rộng theo cách này không):
<?php
không gian tên Drupal\npx_files\Plugin\Block;
sử dụng Drupal\opigno_learning_path\Plugin\Block;
/**
* Cung cấp một khối documentslastgroupblock.
*
* @Chặn(
* id = "opigno_documents_last_group_block",
* admin_label = @Translation("DocumentsLastGroupBlock"),
* danh mục = @Translation("Tùy chỉnh")
* )
*/
lớp NpxFilesDocumentsLastGroupBlock mở rộng DocumentsLastGroupBlock {
xây dựng chức năng công cộng () {
trở lại [
'#markup' => $this->t('Xin chào, Thế giới!'),
];
}
}
Tuy nhiên, nó không kích hoạt khối, cách tốt để mở rộng điều này là gì?
Tất nhiên là đã xóa bộ nhớ cache & mô-đun đã bật.
lớp NpxFilesDocumentsLastGroupBlock mở rộng DocumentsLastGroupBlock {
xây dựng chức năng công cộng () {
trở lại [
'#markup' => $this->t('Xin chào, Thế giới!'),
];
}
}
Tất nhiên là đã xóa bộ nhớ cache & mô-đun đã bật.'
Tôi đã cố gắng xử lý trước khối plugin này bằng hook_pre process_block, nhưng nó không được kích hoạt bởi hook này, chỉ có khối 'cha' của nó mới làm được. Ngoài ra, hook_block_build_alter không được kích hoạt bởi khối này (chỉ khối mẹ của nó). Tôi có thể truy cập khối này bằng hook_block_alter, nhưng nó không thực sự hữu ích, vì tôi không thể đặt thêm một số biến ở đó, tôi nghĩ vậy.
Ai có thể chỉ cho tôi đi đúng hướng? Tôi muốn thêm các biến bổ sung vào khối này hoặc trỏ nó để hiển thị một số khối khác hoặc bỏ đặt/tắt nó theo chương trình trước khi kết xuất.Tôi đã dành nhiều thời gian để cố gắng tìm hiểu về nó và thử các loại móc khác nhau, nhưng cho đến nay vẫn chưa gặp may.