it-swarm.asia

هل يمكن طباعة المناطق داخل قالب العقدة؟

هل يمكن طباعة المناطق داخل قالب العقدة ، أم أن المناطق تقتصر على قوالب الصفحة؟

25
tim76

يمكنك طباعة مناطق داخل أي قالب ، لكنها غير متاحة خارج الصندوق في قالب node.tpl.php. لإتاحتها ، ستنشئ متغيرًا جديدًا للاستخدام في قالب node.tpl.php الذي سيحتوي على كل محتوى المنطقة.

يتم إنشاء متغيرات قالب جديدة باستخدام وظيفة ما قبل المعالجة. في ملف السمة template.php ، أنشئ وظيفة تبدو كما يلي:

function mytheme_preprocess_node(&$variables) {
}

استبدال mytheme بالاسم المختصر للموضوع. الآن ، من أجل Drupal للتعرف على وظيفة المعالجة المسبقة الجديدة ، تحتاج إلى إعادة بناء سجل سمة الموقع الخاص بك. هذا أمر مباشر مثل الذهاب إلى التكوينتطويرالأداء والضغط على الزر "Clear all caches" في الأعلى.

الآن ، طريقة عمل وظائف ما قبل المعالجة هي أن $variables يحتوي على صفيف يتوافق مع المتغيرات المتاحة للنموذج الخاص بك. على سبيل المثال ، في node.tpl.php ، يحتوي $submitted على المؤلف حسب السطر. في وظيفة ما قبل المعالجة أعلاه ، تم العثور عليها في $variables['submitted'].

لمحاكاة ما لديك في page.tpl.php ، حيث لديك مصفوفة تسمى $page تحتوي على جميع المناطق ، ستحتاج إلى تعبئة $variables['page'].

تكمن المشكلة في أن $page في node.tpl.php قد تم ملؤها بالفعل بقيمة صواب/خطأ تتيح لك معرفة ما إذا كنت تنظر إلى العقدة بمفردها أو في قائمة.

ولتجنب تضارب الاسم ، املأ $region بدلاً من ذلك:

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();
    }
  }
}

بعد ذلك ، في قالب node.tpl.php الخاص بموضوعك ، يمكنك عرض أي منطقة من خلال القيام بما يلي:

<?php print render($region['sidebar_first']); ?>

حيث sidebar_first هو اسم المنطقة التي تريد تقديمها.

48
user7