पृष्ठ टेम्पलेट सुझाव काम नहीं कर रहे हैं


12

मैंने एक थीम बनाई है और इस संरचना में मेरी टेम्पलेट फाइलें हैं

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

मैंने एक कस्टम पेज टेम्प्लेट बनाया है, लेकिन किसी कारण से इसे Drupal द्वारा नहीं उठाया जा रहा है। मैंने अपना कैश साफ़ कर दिया है और इस टेम्पलेट में इस प्रीप्रोसेसर फ़ंक्शन को जोड़ने का भी प्रयास किया है। फ़ाइल में अभी भी काम नहीं कर रहा है।

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

किसी भी सहायता की सराहना की जाएगी।


/templates/page/page--node-type.tpl.php क्या वह पृष्ठ नहीं होना चाहिए - blog.tpl.php?
जेरेमी फ्रेंच

जवाबों:


14

जैसा कि 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 .php। आप अपनी थीम के लिए कोड बदल सकते हैं, और यदि यह पेज - book.tpl.php जैसे टेम्पलेट को नहीं ढूँढता है, तो इसे पृष्ठ - नोड-टाइप.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);

5

मैं Drupal 7.4 का उपयोग कर रहा हूं, और मेरे पास एक ही समस्या थी और केवल एक चीज जो इस पोस्ट में मदद करती थी: सामग्री प्रकारों के आधार पर एक कस्टम पेज जोड़ने के लिए।

पोस्ट से:

<?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.
  }
}
?>

बहुत बहुत धन्यवाद ... सुझाव और टेम्पलेट नाम के बीच के संबंध को दिखाने से वास्तव में वास्तव में मदद मिली। धन्यवाद फिर से :)
SGhosh

2

मैंने ड्रुपल 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 सामग्री प्रकार के लिए टेम्पलेट सुझाव यह होगा:

पेज - front_cover.tpl.php

दिलचस्प बात यह है कि 'मुद्दे' की सामग्री प्रकार के लिए कोड टेम्प्लेट का सुझाव पृष्ठ के लिए आता है - समस्या के लिए preprocessor स्क्रिप्ट के बिना किसी भी आवश्यकता के बिना जारी करना !? यह मेरे उद्देश्यों के लिए एक समान पथ का उपयोग करने वाले दृश्य टेम्पलेट को ओवरराइड करने के लिए लगता है।

अर्थात

पथ प्रकार / / मुद्दा / # टेम्पलेट का सुझाव सामग्री के प्रकार पर आधारित है / मुद्दा / # / front_cover


फ्रंट_पेज कंटेंट टाइप के लिए टेम्प्लेट सुझाव यह बिना किसी प्रीप्रोसेसर स्क्रिप्ट के होगा: पेज - फ्रंट- cover.tpl.php
sneha.kamble
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.