Đây là mô tả ban đầu của nhiệm vụ (hiện đã bị xóa khỏi câu hỏi):
Xây dựng như sau:
- Loại nội dung Drupal để chứa tất cả các sản phẩm của họ
- Một khối Drupal có thể được đặt trên bất kỳ trang sản phẩm nào. Khối, khi được đặt trên bất kỳ trang sản phẩm nào, sẽ tự động hiển thị hiện tại
đã hiển thị Liên kết mua ứng dụng của sản phẩm dưới dạng mã QR, rằng trang web
khách truy cập có thể quét bằng điện thoại di động của họ.
Bạn có thể sử dụng tuyến đường hiện tại để lấy nút và thêm một khối duy nhất cho mỗi nút:
/src/Plugin/Block/ExampleBlock.php:
<?php
không gian tên Drupal\mymodule\Plugin\Block;
sử dụng Drupal\Core\Block\BlockBase;
/**
* Cung cấp một khối ví dụ.
*
* @Chặn(
* id = "mymodule_example",
* admin_label = @Translation("Ví dụ"),
* danh mục = @Translation("mymodule")
* )
*/
lớp Ví dụBlock mở rộng BlockBase {
xây dựng chức năng công cộng () {
$xây dựng = [];
$node = \Drupal::routeMatch()->getParameter('node');
if ($node instanceof \Drupal\node\NodeInterface) {
// tính toán $qr_image với $node
xây dựng $ = [
'#markup' => $qr_image,
'#cache' => ['tags' => $node->getCacheTags()],
];
}
$build['#cache']['contexts'] = ['tuyến đường'];
trả lại bản dựng $;
}
}
2. Phiên bản
Triển khai cùng một khối với bối cảnh nút, như @leymann đã đề xuất:
/src/Plugin/Block/ExampleBlock.php:
<?php
không gian tên Drupal\mymodule\Plugin\Block;
sử dụng Drupal\Core\Block\BlockBase;
/**
* Cung cấp một khối ví dụ.
*
* @Chặn(
* id = "mymodule_example",
* admin_label = @Translation("Ví dụ"),
* danh mục = @Translation("mymodule"),
* context_definitions = {
* "nút" = @ContextDefinition("thực thể:nút")
* }
* )
*/
lớp Ví dụBlock mở rộng BlockBase {
xây dựng chức năng công cộng () {
$node = $this->getContextValue('node');
// tính toán $qr_image với $node
trở lại [
'#markup' => $qr_image,
];
}
}
Ưu điểm, bạn không cần quan tâm đến bộ nhớ đệm, ngữ cảnh sẽ tự động thực hiện việc này. Nhược điểm, bạn cần làm cho khối phụ thuộc vào ngữ cảnh khi đặt nó trong bố cục khối. Drupal chưa thể tự động ánh xạ bối cảnh khối. Ví dụ, bạn có thể thêm khả năng hiển thị cho loại nội dung, đây có thể là một ý tưởng hay.