บล็อก opigno_documents_last_group_block อยู่ใน opigno_learning_path/src/Plugin/Block/DocumentsLastGroupBlock.php ซึ่งมีลักษณะดังนี้:
<?php
เนมสเปซ Drupal\opigno_learning_path\Plugin\Block;
ใช้ Drupal\Core\Block\BlockBase;
ใช้ Drupal\Core\Url;
/**
* ให้บล็อก documentlastgroupblock
*
* @ปิดกั้น(
* id = "opigno_documents_last_group_block",
* admin_label = @การแปล("DocumentsLastGroupBlock"),
* หมวดหมู่ = @Translation("กำหนดเอง")
* )
*/
คลาส DocumentsLastGroupBlock ขยาย BlockBase {
/**
* @var \Drupal\Component\Plugin\Context\ContextInterface[]|ผสม
*/
ป้องกัน $groupId;
/**
* {@inheritdoc}
*/
สร้างฟังก์ชั่นสาธารณะ () {
$this->groupId = $gid = $this->configuration["กลุ่ม"];
$tid = _tft_get_group_tid($gid);
$content = _tft_folder_content($tid, FALSE, $gid);
$content = array_slice($content ?: [], 0, 4);
foreach (เนื้อหา $ เป็น $ ดัชนี => $ รายการ) {
$เนื้อหา[$ดัชนี] = [
'#theme' => 'opigno_documents_last_group_item',
'#type' => $item["type"] == 'file' ? 'ไฟล์' : 'โฟลเดอร์',
'#item' => $item,
'#label' => $item["ชื่อ"],
'#link' => $this->itemLink($item),
];
}
$สร้าง['เนื้อหา'] = [
'#theme' => 'opigno_documents_last_group_block',
'เนื้อหา' => $เนื้อหา,
];
ส่งคืน $build;
}
(...)
และแนบมากับ LearningPathController ในโมดูลนี้:
/**
* บล็อกเอกสารการฝึกอบรม
*/
การฝึกอบรมฟังก์ชั่นสาธารณะContentDocuments (&$content, $group) {
// $TFTController = ใหม่ TFTController();
// $listGroup = $TFCTontroller->listGroup($group->id());
$tft_url = Url::fromRoute('tft.group', ['group' => $group->id()])->toString();
$เนื้อหา['แท็บ'][] = $tft_url = [
'#markup' => '<div class="see-all see-all-files"><a href="' . $tft_url . '">' $this->t('ดูทั้งหมด') . '</a></div>',
];
$block_render = $this->attachBlock('opigno_documents_last_group_block', ['group' => $group->id()]);
$block_render["เนื้อหา"]['ลิงค์'] = $tft_url;
$content['tab_content']['documents'] = (isset($block_render["content"]["content"]) && !empty($block_render["content"]["content"])) ? [
'#type' => 'คอนเทนเนอร์',
'#attributes' => [
'id' => 'เอกสาร',
]
'บล็อก' => [
'เนื้อหา' => $block_render["เนื้อหา"],
]
] : [ ];
}
ฉันพยายามขยายในโมดูลที่กำหนดเอง: web/modules/custom/npx_files/src/Plugin/Block/NpxFilesDocumentsLastGroupBlock.php:
<?php
เนมสเปซ Drupal\npx_files\Plugin\Block;
ใช้ Drupal\opigno_learning_path\Plugin\Block;
บล็อก opigno_documents_last_group_block อยู่ใน opigno_learning_path/src/Plugin/Block/DocumentsLastGroupBlock.php ซึ่งมีลักษณะดังนี้:
<?php
เนมสเปซ Drupal\opigno_learning_path\Plugin\Block;
ใช้ Drupal\Core\Block\BlockBase;
ใช้ Drupal\Core\Url;
/**
* ให้บล็อก documentlastgroupblock
*
* @ปิดกั้น(
* id = "opigno_documents_last_group_block",
* admin_label = @การแปล("DocumentsLastGroupBlock"),
* หมวดหมู่ = @Translation("กำหนดเอง")
* )
*/
คลาส DocumentsLastGroupBlock ขยาย BlockBase {
/**
* @var \Drupal\Component\Plugin\Context\ContextInterface[]|ผสม
*/
ป้องกัน $groupId;
/**
* {@inheritdoc}
*/
สร้างฟังก์ชั่นสาธารณะ () {
$this->groupId = $gid = $this->configuration["กลุ่ม"];
$tid = _tft_get_group_tid($gid);
$content = _tft_folder_content($tid, FALSE, $gid);
$content = array_slice($content ?: [], 0, 4);
foreach (เนื้อหา $ เป็น $ ดัชนี => $ รายการ) {
$เนื้อหา[$ดัชนี] = [
'#theme' => 'opigno_documents_last_group_item',
'#type' => $item["type"] == 'file' ? 'ไฟล์' : 'โฟลเดอร์',
'#item' => $item,
'#label' => $item["ชื่อ"],
'#link' => $this->itemLink($item),
];
}
$สร้าง['เนื้อหา'] = [
'#theme' => 'opigno_documents_last_group_block',
'เนื้อหา' => $เนื้อหา,
];
ส่งคืน $build;
}
(...)
และแนบมากับ LearningPathController ในโมดูลนี้:
/**
* บล็อกเอกสารการฝึกอบรม
*/
การฝึกอบรมฟังก์ชั่นสาธารณะContentDocuments (&$content, $group) {
// $TFTController = ใหม่ TFTController();
// $listGroup = $TFCTontroller->listGroup($group->id());
$tft_url = Url::fromRoute('tft.group', ['group' => $group->id()])->toString();
$เนื้อหา['แท็บ'][] = $tft_url = [
'#markup' => '<div class="see-all see-all-files"><a href="' . $tft_url . '">' $this->t('ดูทั้งหมด') . '</a></div>',
];
$block_render = $this->attachBlock('opigno_documents_last_group_block', ['group' => $group->id()]);
$block_render["เนื้อหา"]['ลิงค์'] = $tft_url;
$content['tab_content']['documents'] = (isset($block_render["content"]["content"]) && !empty($block_render["content"]["content"])) ? [
'#type' => 'คอนเทนเนอร์',
'#attributes' => [
'id' => 'เอกสาร',
]
'บล็อก' => [
'เนื้อหา' => $block_render["เนื้อหา"],
]
] : [ ];
}
ฉันพยายามขยายในโมดูลที่กำหนดเอง: web/modules/custom/npx_files/src/Plugin/Block/NpxFilesDocumentsLastGroupBlock.php แต่มันไม่ได้ถูกเรียกใช้งานจริง ๆ (ฉันไม่แน่ใจว่าฉันสามารถขยายด้วยวิธีนี้ได้หรือไม่):
<?php
เนมสเปซ Drupal\npx_files\Plugin\Block;
ใช้ Drupal\opigno_learning_path\Plugin\Block;
/**
* ให้บล็อก documentlastgroupblock
*
* @ปิดกั้น(
* id = "opigno_documents_last_group_block",
* admin_label = @การแปล("DocumentsLastGroupBlock"),
* หมวดหมู่ = @Translation("กำหนดเอง")
* )
*/
คลาส NpxFilesDocumentsLastGroupBlock ขยาย DocumentsLastGroupBlock {
สร้างฟังก์ชั่นสาธารณะ () {
กลับ [
'#markup' => $this->t('สวัสดีชาวโลก!'),
];
}
}
อย่างไรก็ตาม มันไม่ได้ทริกเกอร์การบล็อก วิธีที่ดีในการขยายสิ่งนี้คืออะไร
แน่นอนว่าล้างแคชแล้วและเปิดโมดูลแล้ว
คลาส NpxFilesDocumentsLastGroupBlock ขยาย DocumentsLastGroupBlock {
สร้างฟังก์ชั่นสาธารณะ () {
กลับ [
'#markup' => $this->t('สวัสดีชาวโลก!'),
];
}
}
ล้างแคชแล้วและเปิดโมดูลแล้ว'
ฉันพยายามประมวลผลบล็อกปลั๊กอินนี้ล่วงหน้าโดย hook_preprocess_block แต่มันไม่ได้ถูกเรียกโดย hook นี้ มีเพียงบล็อก 'พาเรนต์' เท่านั้นที่ทำได้ hook_block_build_alter จะไม่ถูกทริกเกอร์โดยบล็อกนี้ (เฉพาะพาเรนต์เท่านั้น) ฉันสามารถไปที่บล็อกนี้ได้โดย hook_block_alter แต่ก็ไม่ได้ช่วยอะไรมาก เพราะฉันไม่สามารถใส่ตัวแปรพิเศษลงไปได้ ฉันคิดว่า
ใครช่วยชี้ฉันไปในทิศทางที่ถูกต้องได้ไหม ฉันต้องการเพิ่มตัวแปรพิเศษให้กับบล็อกนี้หรือชี้ให้แสดงบล็อกอื่นหรือยกเลิกการตั้งค่า/ปิดใช้งานโดยทางโปรแกรมก่อนแสดงผลฉันใช้เวลามากมายในการพยายามเรียนรู้เกี่ยวกับมันและลองใช้ตะขอแบบต่างๆ แต่จนถึงตอนนี้ก็ยังโชคไม่ดี