(phptemplate) Использование разных шаблонов в зависимости от текущего пути

Прислано: marazmus

сб, 20/01/2007 - 07:52

Другие статьи по теме:

Начиная с 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 ноды).

Комментарии


Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Применить"
Опубликовано dyp@drupal.org в вс, 21/01/2007 - 23:23.

а для морды есть отдельный шаблон?


Опубликовано Flinblo в пн, 22/01/2007 - 09:46.

http://drupal.org/node/23348
http://drupal.org/project/front
_________________
memyself's


Опубликовано dyp@drupal.org в пн, 22/01/2007 - 13:37.

это я знаю, мне интересно нет ли ф пятерке встроенной возможности. пока пользуюсь по старинке, через инклюды в page.tpl.php но иногда в админке подглючивает и тема перескакивает.


Опубликовано jason32 в пн, 26/02/2007 - 10:32.

а что значит - только с оригинальными путями? Путь главной если менять, то будет работать или нет? Это же вроде не Path и не Pathauto?


Опубликовано marazmus в сб, 10/03/2007 - 06:58.

Имеется в виду пути типа node/1

Если у тебя node/1 отзывается через path или pathauto на /statya-nomer-tri, то создание файла statya-nomer-tri.tpl.php не прокатит - phptemplate будет искать файл page-node-1.tpl.php.


Опубликовано cwer в сб, 10/03/2007 - 11:53.

Найдено на друпал.орг
Можно записать в template.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</p>
<p>      // proceed only if the path module is enabled
      if (!module_exists('path')) {
        break;
      }</p>
<p>      $url_alias = drupal_get_path_alias('node/' . $vars['node']-&gt;nid);</p>
<p>      // if there is no URL alias defined, stop processing
      if ($url_alias == ('node/' . $vars['node']-&gt;nid)) {
        break;
      }</p>
<p>      // Finally, build suggestions array. More generic paths should go first,
      // more specific last.
      // The templates filenames pattern is node__
      $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;
      }</p>
<p>      $vars['template_files'] = $suggestions;
      break;
  }</p>
<p>  return $vars;
}

После этого для неоригинальных путей можно создавать
node_video_list.tpl.php (для http://site.ru/video/list )
Насчет page - не знаю будет ли обрабатываться :)


Опубликовано marazmus в сб, 10/03/2007 - 12:50.

Спасибо, очень ценная инфа.

Где же, где же человек с подписью про wiki? :)


Опубликовано kiev1 в сб, 28/04/2007 - 03:24.

а вот как назвать файл шаблона

для такой странички http://сайт/user/1/subscriptions/taxa ,

и для такой http://сайт/user/любой_юзер/subscriptions/taxa

это уж точно сейчас неизвестно


Опубликовано VictorL в чт, 28/06/2007 - 12:04.

Заменил функцию _phptemplate_variables в файле template.php и все заработало для page :)

function _phptemplate_variables($hook, $vars = array()) {
  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;
}


Опубликовано Gedler в ср, 12/09/2007 - 09:23.

я правильно понимаю, можно сделать page-forum.tpl.php и причесать форум?
пошел пробовать...


Опубликовано dyp@drupal.org в чт, 24/01/2008 - 17:22.

кстати морда это page-front.tpl.php


Опубликовано Nerian в пн, 17/03/2008 - 08:55.

В Drupal6 изменения в API, поэтому теперь делать можно так:

[u93585@be89 ~/lockdot.ru/www/site/themes/bluemarine-test]$ cat template.php
<?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


Опубликовано kiev1 в вс, 01/06/2008 - 13:57.

я правильно понимаю, можно сделать page-forum.tpl.php и причесать форум?
нет не правильно - форум это по сути просто статья с коментариями - его причесывать очень сложно


Опубликовано Kremenetskiy в пт, 24/10/2008 - 17:56.

Спасибо!


Опубликовано war_hol в чт, 12/03/2009 - 07:43.

Nerian написал(а):

В Drupal6 изменения в API, поэтому теперь делать можно так:

[u93585@be89 ~/lockdot.ru/www/site/themes/bluemarine-test]$ cat template.php
<?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" }", не подскажете в чем проблема?


Опубликовано jason32 в вс, 15/03/2009 - 10:46.

war_hol
отладка осталась <?php var_dump($suggestions);?>, убрать надо эту строчку.


Опубликовано stakh в вт, 06/10/2009 - 07:42.

А не могли бы Вы, как пример, показать для меня, как нужно оформить все, если путь начинается с "rezults", а тема называется "tema-shab". Поясните что и куда добавить.

Пробовал все, что сдесь описано настроить под себя, но никак не получается.
Помогите, пожалуйста.
Заранее благодарен.


Опубликовано jason32 в ср, 07/10/2009 - 08:32.

"stakh" написал(а):

А не могли бы Вы, как пример, показать для меня, как нужно оформить все, если путь начинается с "rezults", а тема называется "tema-shab".

Не важно, как называется тема. Создаешь в ней файл page-rezults.tpl.php - в нём и будет вывод. Только надо понимать,что никакие алиасы тут не подходят, адрес реально должен быть "rezults", а не синонимом "node/[id]"


Опубликовано kissfm в сб, 17/10/2009 - 18:31.

Пригодится


Ссылки партнёров