Как получить разные шаблоны для каждой страницы - PullRequest
2 голосов
/ 20 августа 2010

Я должен создать простую CMS с использованием drupal, он имеет 4 страницы и каждая страница имеет уникальный дизайн.

Ответы [ 3 ]

1 голос
/ 23 августа 2010

Если вы хотите совершенно другой дизайн для ваших страниц (не просто другой фон, или внешний вид области содержимого или что-то вроде этого), я думаю, что лучше использовать шаблоны страниц вместо шаблонов узлов. По умолчанию вы можете использовать шаблоны 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). Поскольку использование шаблона узла позволяет изменять только вывод содержимого, а шаблон страницы позволяет писать полный шаблон с нуля, начиная с тега .

P.S. И не забывайте очищать кеш при работе с темами, на всякий случай.

1 голос
/ 20 августа 2010

Я полагаю, что четыре страницы, о которых вы говорите, являются узлами.Тема может иметь разные шаблоны для разных типов контента.
Таким же образом, что и 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.

0 голосов
/ 20 августа 2010

Модуль Sections позволяет назначать тему для узла со страницы редактирования узла.

Его главная цель - разрешить тему для «раздела», поэтому, например, admin / * может использовать Garland, mymicrosite / * может использовать customtheme1, а остальная часть сайта может использовать customtheme2, однако вы можете создать раздел per-node ', это то, что вы пытаетесь сделать в секции говорит: 0)

...