Создание multipe page.tpl для разных групп страниц в Drupal 7

сайт, который я сейчас создаю на Drupal, разделен на две совершенно разные области, каждая из которых структурирована совершенно по-разному. Мое решение состоит в том, чтобы создать две разные страницы page.tpl. Кто-нибудь знает, какой самый простой способ реализовать это в Drupal 7. Это процесс соглашения об именах, такой как страница node.tpl, или мне нужно будет вставить функцию предварительной обработки на страницу template.php.

Спасибо за любую помощь!


person HomeBrew    schedule 15.11.2011    source источник
comment
Не совсем уверен, почему вы дали этому вопросу отрицательный балл - если у вас есть ответ, поделитесь им.   -  person HomeBrew    schedule 15.11.2011


Ответы (5)


Вы также можете добавить функцию предварительной обработки в свой файл template.php. Что-то вроде следующего:

function yourthemename_preprocess_page(&$vars, $hook) {  
    if (isset($vars['node'])) {  
        // If the node type is "blog_madness" the template suggestion will be "page--blog-madness.tpl.php".  
        $vars['theme_hook_suggestions'][] = 'page__'. $vars['node']->type;  
    }  
}
person James Billings    schedule 15.11.2011
comment
судя по комментарию в вашем коде, кажется, что page__foo.php волшебным образом преобразуется в page--foo.php (подчеркивание до дефиса). Всегда ли так в Drupal7? - person Paul; 30.10.2012

Взгляните на эту страницу: http://drupal.org/node/1089656

В нем объясняется схема именования файлов шаблонов и способы расширения предложений шаблонов.

В вашем случае вам придется реализовать функцию theme_get_suggestions(). В этой функции вы можете проверить аргументы пути, чтобы определить, какую страницу вам нужно отображать, и добавить соответствующие предложения.

person chiborg    schedule 15.11.2011
comment
Привет, спасибо за это, я посмотрел и могу получить новый page.tpl только для отдельной страницы, а не для группы страниц. - person HomeBrew; 15.11.2011
comment
Я немного расширил свой ответ. Пожалуйста, поэкспериментируйте с theme_get_suggestions(). Модуль devel может помочь вам увидеть, какие предложения генерируются. - person chiborg; 15.11.2011

Я не понимаю. Если вы хотите использовать два разных файла шаблона, просто создайте два разных типа контента, и вы можете обойти весь этот код.

дайте мне знать, если вам нужна дополнительная помощь. вышал

person Vishal Khialani    schedule 16.11.2011

Вы можете использовать модуль Context.

В заданном контексте вы можете добавить реакцию «Предложения по шаблону». Это позволит вам указать дополнительные файлы шаблонов, которые переопределяют значения по умолчанию. Подробнее см. проблему в очереди контекста, Добавить реакцию "Предложения по шаблону".

При таком подходе нет необходимости писать код модуля.

person colan    schedule 30.01.2014

function your_theme_preprocess_node(&$variables) {
  // Add specific templates.
  foreach ($variables['theme_hook_suggestions'] as $theme_suggestion) {
    $variables['theme_hook_suggestions'][] = $theme_suggestion . '__' . $node->view_mode;
  }
}

также вы можете вызвать функцию предварительной обработки здесь, если добавляете этот код

  // Run specific preprocess function.
  $preprocess = 'your_theme_preprocess_node_' . $node->type . '__' . $node->view_mode;
  if (function_exists($preprocess)) {
    $preprocess($variables);
  }

в этом случае вы можете использовать разные шаблоны не только для типов узлов, но и для разных режимов просмотра

person shumer    schedule 31.01.2014