Начиная с 5 версии Друпала, движок PHPTemplate поддерживает возможность использования различных шаблонов страницы - в пределах одной темы. Этот механизм использует текущий путь страницы для определения того, какой именно шаблон следует загружать.
Механизм работает следующим образом:
К примеру, мы открываем ссылку http://www.example.com/node/1/edit . PHPTemplate будет просматривать наличие следующих шаблонов страницы (в нисходящем порядке) и загружать первый подходящий шаблон. В нашем случае движок шаблонов будет искать следующие файлы:
* page-node-edit.tpl.php
* page-node-1.tpl.php
* page-node.tpl.php
* page.tpl.php
Файл, существующий и найденный первым, и будет использован для отображения страницы http://www.example.com/node/1/edit.
Другой пример: ссылка http://www.example.com/tracker . Здесь движок шаблонов будет искать файлы
* page-tracker.tpl.php
* page.tpl.php
Примечания:
Этот способ работает только с оригинальными путями, заданными в движке Друпала. Даже если установлены модули path и pathauto, механизм шаблонов все равно будет ориентироваться на оригинальные пути (в т.ч. id ноды).
Комментарии
а для морды есть отдельный шаблон?
http://drupal.org/node/23348
http://drupal.org/project/front
_________________
memyself's
это я знаю, мне интересно нет ли ф пятерке встроенной возможности. пока пользуюсь по старинке, через инклюды в page.tpl.php но иногда в админке подглючивает и тема перескакивает.
а что значит - только с оригинальными путями? Путь главной если менять, то будет работать или нет? Это же вроде не Path и не Pathauto?
Имеется в виду пути типа node/1
Если у тебя node/1 отзывается через path или pathauto на /statya-nomer-tri, то создание файла statya-nomer-tri.tpl.php не прокатит - phptemplate будет искать файл page-node-1.tpl.php.
Найдено на друпал.орг
Можно записать в template.php
<?php
function _phptemplate_variables($hook, $vars = array()) {
switch ($hook) {
case 'node':
// this example creates custom node templates, but
// it is very similar for page templates
// proceed only if the path module is enabled
if (!module_exists('path')) {
break;
}
$url_alias = drupal_get_path_alias('node/' . $vars['node']->nid);
// if there is no URL alias defined, stop processing
if ($url_alias == ('node/' . $vars['node']->nid)) {
break;
}
// Finally, build suggestions array. More generic paths should go first,
// more specific last.
// The templates filenames pattern is node_<something>_<something>
$suggestions = array();
$path_parts = explode('/', $url_alias);
$template_filename = "node";
foreach ($path_parts as $path_part) {
$template_filename = $template_filename . '_' . $path_part;
$suggestions[] = $template_filename;
}
$vars['template_files'] = $suggestions;
break;
}
return $vars;
}
?>
После этого для неоригинальных путей можно создавать
node_video_list.tpl.php (для http://site.ru/video/list )
Насчет page - не знаю будет ли обрабатываться
Спасибо, очень ценная инфа.
Где же, где же человек с подписью про wiki?
а вот как назвать файл шаблона
для такой странички http://сайт/user/1/subscriptions/taxa ,
и для такой http://сайт/user/любой_юзер/subscriptions/taxa
это уж точно сейчас неизвестно
Заменил функцию _phptemplate_variables в файле template.php и все заработало для page
if ($hook=='node' or $hook=='page') {
if (!module_exists('path')) {
break;
}
$url_alias = drupal_get_path_alias('node/' . $vars['node']->nid);
if ($url_alias == ('node/' . $vars['node']->nid)) {
break;
}
$suggestions = array();
$path_parts = explode('/', $url_alias);
$template_filename = $hook;
foreach ($path_parts as $path_part) {
$template_filename = $template_filename . '_' . $path_part;
$suggestions[] = $template_filename;
}
$vars['template_files'] = $suggestions;
}
return $vars;
}
я правильно понимаю, можно сделать page-forum.tpl.php и причесать форум?
пошел пробовать...
кстати морда это page-front.tpl.php
Спасибо!
В Drupal6 изменения в API, поэтому теперь делать можно так:
<?php
// $Id: template.php,v 1.16 2007/10/11 09:51:29 goba Exp $
/**
* Override or insert PHPTemplate variables into the templates.
*/
function phptemplate_preprocess_page(&$vars) {
if (!module_exists('path')) {
return;
}
$url_alias = drupal_get_path_alias('node/' . $vars['node']->nid);
if ($url_alias == ('node/' . $vars['node']->nid)) {
return;
}
$suggestions = array();
$path_parts = explode('/', $url_alias);
$template_filename = 'page';
foreach ($path_parts as $path_part) {
$template_filename = $template_filename . '_' . $path_part;
$suggestions[] = $template_filename;
}
$vars['template_files'] = $suggestions;
var_dump($suggestions);
}
а так же:
http://naukastudio.com.ua/diary/14
Делаю всё как указанно у Вас, все работает только сверху каждой страницы выводится код "array(2) { [0]=> string(12) "page_catalog" [1]=> string(14) "page_catalog_1" }", не подскажете в чем проблема?
я правильно понимаю, можно сделать page-forum.tpl.php и причесать форум?
нет не правильно - форум это по сути просто статья с коментариями - его причесывать очень сложно
war_hol
отладка осталась
<?php var_dump($suggestions);?>
, убрать надо эту строчку.А не могли бы Вы, как пример, показать для меня, как нужно оформить все, если путь начинается с "rezults", а тема называется "tema-shab". Поясните что и куда добавить.
Пробовал все, что сдесь описано настроить под себя, но никак не получается.
Помогите, пожалуйста.
Заранее благодарен.
Не важно, как называется тема. Создаешь в ней файл page-rezults.tpl.php - в нём и будет вывод. Только надо понимать,что никакие алиасы тут не подходят, адрес реально должен быть "rezults", а не синонимом "node/[id]"
Пригодится