it-swarm.asia

اقتراحات قالب الصفحة لا تعمل

لقد قمت بإنشاء سمة ولدي ملفات القالب الخاصة بي في هذا الهيكل

  • /templates/page/page.tpl.php
  • /templates/page/page--node-type.tpl.php

لقد قمت بإنشاء قالب صفحة مخصص ولكن لسبب ما لم يتم التقاطه بواسطة Drupal. لقد قمت بمسح ذاكرة التخزين المؤقت الخاصة بي وحاولت أيضًا إضافة وظيفة المعالج المسبق هذه في ملف theme.php الخاص بالسمة ولكنها لا تزال لا تعمل.

if (isset($vars['node'])) 
  {
    // If the node type is "blog" the template suggestion will be "page--blog.tpl.php".
    $vars['theme_hook_suggestions'][] = 'page__'. str_replace('_', '--', $vars['node']->type);
  }

سيكون موضع تقدير أي مساعدة.

12
Paul Sheldrake

كما هو مذكور في اقتراحات قالب Drupal 7 ، اقتراح القالب المستخدم افتراضيًا من Drupal 7 للصفحات هو صفحة - [أمامي | داخلي/مسار] .tpl.php .

لصفحة مرئية على http://www.example.com/node/1/edit ، Drupal عن ملفات القالب التالية:

  • الصفحة - العقدة - edit.tpl.php
  • الصفحة - العقدة - 1.tpl.php
  • الصفحة - node.tpl.php
  • page.tpl.php

لإضافة اقتراحات إضافية ، يجب أن يتم تطبيق السمة template_preprocess_page () وإضافة اقتراحات جديدة في $variables['theme_hook_suggestions'] ($variables هو المتغير الذي يتم تمريره بالرجوع إلى الدالة).

إذا فعلت ذلك ، فإن السبب الوحيد لعدم استخدام ملف القالب المقترح هو عدم تسمية الملف بشكل صحيح: في حالة عرض الصفحة لصفحة كتاب ، على سبيل المثال ، يجب أن يكون ملف القالب صفحة - book.tpl .بي أتش بي. يمكنك تغيير رمز السمة الخاصة بك ، والسماح لها باستخدام الصفحة - node-type.tpl.php template ، إذا لم تجد قالبًا مثل page - book.tpl.php.

لاحظ أيضًا أنه في theme_get_suggestions () (وهي الوظيفة التي تسمى template_preprocess_page () ) يتم استبدال الواصلات بـ _ وليس العكس. يتم شرح سبب القيام بذلك في تعليق تم الإبلاغ عنه في رمز الوظيفة.

// When we discover templates in drupal_find_theme_templates(),
// hyphens (-) are converted to underscores (_) before the theme hook
// is registered. We do this because the hyphens used for delimiters
// in hook suggestions cannot be used in the function names of the
// associated preprocess functions. Any page templates designed to be used
// on paths that contain a hyphen are also registered with these hyphens
// converted to underscores so here we must convert any hyphens in path
// arguments to underscores here before fetching theme hook suggestions
// to ensure the templates are appropriately recognized.
$arg = str_replace(array("/", "\\", "\0", '-'), array('', '', '', '_'), $arg);
14
kiamlaluno

أنا أستخدم Drupal 7.4 ، وكان لدي نفس المشكلة والشيء الوحيد الذي ساعد هو هذا المنشور: كيفية إضافة صفحة مخصصة. tpl بناءً على أنواع المحتوى =

من البريد:

<?php
/**
* Variables preprocess function for the "page" theming hook.
*/
function THEME_NAME_preprocess_page(&$vars) {

  // Do we have a node?
  if (isset($vars['node'])) {

    // Ref suggestions cuz it's stupid long.
    $suggests = &$vars['theme_hook_suggestions'];

    // Get path arguments.
    $args = arg();
    // Remove first argument of "node".
    unset($args[0]);

    // Set type.
    $type = "page__type_{$vars['node']->type}";

    // Bring it all together.
    $suggests = array_merge(
      $suggests,
      array($type),
      theme_get_suggestions($args, $type)
    );

    // if the url is: 'http://domain.com/node/123/edit'
    // and node type is 'blog'..
    //
    // This will be the suggestions:
    //
    // - page__node
    // - page__node__%
    // - page__node__123
    // - page__node__edit
    // - page__type_blog
    // - page__type_blog__%
    // - page__type_blog__123
    // - page__type_blog__edit
    //
    // Which connects to these templates:
    //
    // - page--node.tpl.php
    // - page--node--%.tpl.php
    // - page--node--123.tpl.php
    // - page--node--edit.tpl.php
    // - page--type-blog.tpl.php          << this is what you want.
    // - page--type-blog--%.tpl.php
    // - page--type-blog--123.tpl.php
    // - page--type-blog--edit.tpl.php
    //
    // Latter items take precedence.
  }
}
?>
5
Bob Rivers

لقد قضيت وقتًا طويلاً في محاولة اتباع المثال أعلاه باستخدام سلسلة الاستبدال في Drupal 7.22. هذا لا يبدو مناسبًا لي. ومن المثير للاهتمام أن بعض أنواع المحتوى يتم اقتراحها تلقائيًا ، بينما البعض الآخر لا هذا هو الكود الذي عمل معي في النهاية.

if (isset($variables['node'])) {
   // $variables['theme_hook_suggestions'][] = 'page__'. str_replace('_', '--', $variables['node']->type);
   //cannot get above working for some reason?
     $variables['theme_hook_suggestions'][] = 'page__' . $variables['node']->type;
  }

لذا فإن اقتراح القالب لنوع محتوى Front_page سيكون بعد ذلك:

page - front_cover.tpl.php

من المثير للاهتمام أن اقتراح قالب الشفرة لنوع المحتوى "إصدار" يأتي كصفحة - iss.tpl.php دون الحاجة إلى نص برمجي للمعالج !؟ يبدو أن هذا لأغراضي تجاوز تجاوز قالب العرض الذي يستخدم مسارًا مشابهًا.

بمعنى آخر.

عرض المسار =/إصدار/# اقتراح نموذج بناءً على نوع المحتوى ، مثل/المسألة/#/الغلاف الأمامي

2
Daniel