it-swarm.asia

مناطق الطباعة في html.tpl.php

أحتاج إلى إخراج بعض المناطق في قالب html.tpl.php نظرًا لأن هذه لا تتغير بين page.tpl.php و page-front.tpl.php (فقط للاسم الثاني). في الأساس أريد تجنب تكرار التعليمات البرمجية.

ومع ذلك ، يبدو أنه لا يوجد أي شيء مرتبط بالمناطق في html.tpl.php ، ولا يمكنني استرداد أي شيء باستخدام drupal_get_region_content (سواء مع أو بدون معلمات ، فإنها تُرجع فقط مصفوفة فارغة).

أفكار؟

10
Morpheu5

لقد حللت مثل هذا:

function mytheme_preprocess_html(&$variables) {
    $variables['region_name'] = block_get_blocks_by_region('region_name');
}

ثم يمكنني القيام به

<?php print render($region_name) ?>
18
Morpheu5

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 () ).

2
kiamlaluno