Пропозиції шаблонів сторінок не працюють


12

Я створив тему і в цій структурі є свої файли шаблонів

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

Я створив нестандартний шаблон сторінки, але він чомусь не підбирає Drupal. Я очистив кеш і також спробував додати цю функцію препроцесора у файл теми template.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);
  }

Будь-яка допомога буде вдячна.


/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. Ви можете змінити код для своєї теми і дозволити їй використовувати сторінку - шаблон node-type.tpl.php, якщо в ній не знайдеться такий шаблон, як сторінка - book.tpl.php.

Зауважимо також, що в topic_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, і у мене була така ж проблема, і єдине, що допомогло, це ця публікація: Як додати користувацьку сторінку.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.
  }
}
?>

Велике спасибі ... показавши співвідношення між пропозицією та назвою шаблону дійсно допомогло. Ще раз дякую :)
SGhosh

2

Я занадто довго намагався наслідувати приклад вище, використовуючи заміну рядків у 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_cover.tpl.php

Цікаво, що пропозиція щодо кодового шаблону для типу вмісту "видавати" надходить як сторінка - issue.tpl.php без необхідності в скрипті попереднього процесу !? Це для моїх цілей, здається, перекриває шаблон подання, який використовує аналогічний шлях.

тобто

view path = / issue / # пропозиція шаблону на основі типу вмісту, тобто / issue / # / front_cover


пропозиція шаблону для типу вмісту передньої сторінки це буде без будь-якого сценарію препроцесора: сторінка - front-cover.tpl.php
sneha.kamble
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.