أحتاج إلى إخراج بعض المناطق في قالب html.tpl.php نظرًا لأن هذه لا تتغير بين page.tpl.php و page-front.tpl.php (فقط للاسم الثاني). في الأساس أريد تجنب تكرار التعليمات البرمجية.
ومع ذلك ، يبدو أنه لا يوجد أي شيء مرتبط بالمناطق في html.tpl.php ، ولا يمكنني استرداد أي شيء باستخدام drupal_get_region_content (سواء مع أو بدون معلمات ، فإنها تُرجع فقط مصفوفة فارغة).
أفكار؟
لقد حللت مثل هذا:
function mytheme_preprocess_html(&$variables) {
$variables['region_name'] = block_get_blocks_by_region('region_name');
}
ثم يمكنني القيام به
<?php print render($region_name) ?>
drupal_get_region_content()
يُرجع المحتوى الذي تم تعيينه بمكالمات سابقة إلى drupal_add_region_content()
، ولكنه لا يتضمن محتوى الكتل التي يتم عرضها في الصفحة من خلال block_page_build () .
إذا كنت تبحث عن "drupal_add_region_content" في Drupal ، ستلاحظ أن الوظيفة يتم استدعاؤها من خلال:
drupal_get_region_content()
install_display_output()
template_preprocess_maintenance_page()
update_task_list()
ما قمت بتعيينه للكتل في الصفحة الإدارية هو المناطق التي سيتم فيها عرض الكتل ، ولكن لم تتم إضافة محتواها مع drupal_add_region_content()
؛ في الواقع ، لا توجد أي من الوظائف المذكورة أعلاه (وهي الوظائف الوحيدة التي تستدعي drupal_add_region_content()
، باستثناء رمز اختبار a Drupal) لعرض/إضافة محتوى الحظر.
إذا كنت بحاجة إلى عرض الكتل في الكود الخاص بك ، فيجب عليك التحقق من الكود المستخدم في block_page_build()
. على وجه الخصوص ، هذا هو الرمز الذي ربما يكون أكثر فائدة لك:
// Fetch a list of regions for the current theme.
$all_regions = system_region_list($theme);
$item = menu_get_item();
if ($item['path'] != 'admin/structure/block/demo/' . $theme) {
// Load all region content assigned via blocks.
foreach (array_keys($all_regions) as $region) {
// Assign blocks to region.
if ($blocks = block_get_blocks_by_region($region)) {
$page[$region] = $blocks;
}
}
// …
}
يتحقق أول سطرين من أن الصفحة المعروضة ليست الصفحة التجريبية المستخدمة لإظهار مكان مناطق السمة.
إذا كنت بحاجة إلى عرض الكتل بطريقة مختلفة ، فمن المحتمل أنك مهتم بتجاوز theme_block () في السمة الخاصة بك ، أو (على الأرجح) إنشاء قالب block.tpl.php مخصص. ملف. هناك طريقة أخرى لتغيير طريقة عرض الكتل وهي استخدام وظيفة ما قبل المعالجة للكتل ( hook_preprocess_block () ).