Мне нужно собрать простую CMS с помощью drupal, она имеет 4 страницы и каждая страница имеет уникальный дизайн.Как получить разные шаблоны для каждой страницы
ответ
Я понимаю, что четыре страницы, о которых вы говорите, являются узлами. Тема может иметь разные шаблоны для разных типов контента.
Точно так же, как template_preprocess_node()
, модуль может реализовать hook_preprocess_node()
и предложить использовать другой файл шаблона.
// This code is present in template_preprocess_node().
// Clean up name so there are no underscores.
$variables['template_files'][] = 'node-'. $node->type;
// This is what the module custom_module.module can write in custom_module_preprocess_node().
$variables['template_files'][] = 'node-'. $node->uid;
Если пользовательский модуль хочет быть уверен, что шаблон он указывает проверяется перед другими файлами шаблонов, то он может принять следующий код:
if (isset($variables['template_files']) && is_array($variables['template_files'])) {
$variables['template_files'] = array_unshift($variables['template_files'], 'node-'. $node->uid);
}
Тема должна иметь файл шаблона с предлагаемым именем (node-1.tpl.php
для узла с идентификатором 1, например), или файл шаблона по умолчанию node.tpl.php.
Модуль Sections позволяет назначать тему за узел с страницы редактирования узла.
Это ключевая цель - разрешить тему для раздела, так что, например, admin/* может использовать Garland, mymicrosite/* может использовать customtheme1, а остальная часть сайта может использовать customtheme2, однако вы можете создать раздел -per-node ', который вы пытаетесь сделать в разделе: 0)
Если вы хотите совершенно другой дизайн для своих страниц (а не только другой фон или внешний вид области содержимого или что-то еще как это), я думаю, что лучше использовать шаблоны страниц вместо шаблонов узлов. По умолчанию вы можете использовать шаблоны page-node-nid.tpl.php (замените nid на идентификатор вашего узла).
Если вы хотите, например, другой дизайн для конкретного типа узла - вы можете использовать theme_preprocess_page функцию в template.php:
function yourtheme_preprocess_page(&$vars, $hook){
$vars['template_files'][] = 'page-'.$vars['node']->type;
}
Ответ несколько похож на предыдущий, но ключевая точка здесь заключается в использовании шаблонов страниц вместо шаблонов узлов (и preprocess_page вместо preprocess_node). Поскольку использование шаблона узла позволяет вам изменять только вывод содержимого, в то время как шаблон страницы позволяет вам писать полный шаблон с нуля, начиная с тега <html>.
P.S. И не забудьте очистить кеш при работе с темами, на всякий случай.
Я только что перечитал это и понял, что вы попросили «шаблон», а не «тему». Однако я оставлю свой ответ, если он все же поможет. – CitrusTree