Câu trả lời:
Bạn có thể in các vùng bên trong bất kỳ mẫu nào, nhưng chúng không có sẵn trong hộp trong node.tpl.php
mẫu. Để cung cấp chúng, bạn sẽ tạo một biến mới để sử dụng trong node.tpl.php
mẫu của bạn sẽ chứa tất cả nội dung khu vực.
Tạo các biến mẫu mới được thực hiện bằng cách sử dụng hàm tiền xử lý. Trong template.php
tệp chủ đề của bạn , hãy tạo một chức năng trông như thế này:
function mytheme_preprocess_node(&$variables) {
}
Thay thế mytheme
bằng tên ngắn của chủ đề của bạn. Bây giờ, để Drupal nhận ra chức năng tiền xử lý mới này, bạn cần xây dựng lại sổ đăng ký chủ đề trang web của mình. Điều này cũng đơn giản như đi đến Cấu hình → Phát triển → Hiệu suất và nhấn nút "Xóa tất cả bộ nhớ cache" ở trên cùng.
Bây giờ, cách các chức năng tiền xử lý hoạt động là $variables
chứa một mảng tương ứng với các biến có sẵn của mẫu của bạn. Ví dụ, trong node.tpl.php
, $submitted
có chứa các dòng tác giả. Trong chức năng tiền xử lý ở trên, nó được tìm thấy trong $variables['submitted']
.
Để bắt chước những gì bạn có page.tpl.php
, nơi bạn có một mảng được gọi là $page
chứa tất cả các vùng, bạn muốn cư trú $variables['page']
.
Vấn đề là $page
trong đó node.tpl.php
đã được điền với một giá trị đúng / sai cho phép bạn biết liệu bạn đang xem nút đó hay trong một danh sách.
Vì vậy, để tránh xung đột tên đó, $region
thay vào đó , hãy điền vào:
function mytheme_preprocess_node(&$variables) {
// Get a list of all the regions for this theme
foreach (system_region_list($GLOBALS['theme']) as $region_key => $region_name) {
// Get the content for each region and add it to the $region variable
if ($blocks = block_get_blocks_by_region($region_key)) {
$variables['region'][$region_key] = $blocks;
}
else {
$variables['region'][$region_key] = array();
}
}
}
Sau đó, trong node.tpl.php
mẫu của chủ đề , bạn có thể kết xuất bất kỳ vùng nào bằng cách thực hiện như sau:
<?php print render($region['sidebar_first']); ?>
Trong trường hợp sidebar_first
là tên của khu vực bạn muốn render.
<?php print render(block_get_blocks_by_region('machine_name_of_your_region'));?>
. Từ đây: webomelette.com/add-region-node-template
block_get_blocks_by_region()
chỉ trả về mảng các khối và nếu bạn muốn hiển thị nó dưới dạng một vùng, bạn cần thêm trình bao bọc vùng.