Настройка шаблонов вьюс

Главные вкладки

Аватар пользователя Verkhunov Verkhunov 14 августа 2008 в 14:53

Привет,

1) Можно ли задать для вывода вьюсы определенный шаблон страницы?
как например page-taxonomy-term.tpl.php

2) Можно ли задать шаблон страницы для типов материалов?
например page-story.tpl.php?

Комментарии

Аватар пользователя sadmin sadmin 14 августа 2008 в 15:41

Шаблон для конкретного типа материалов, т.е. создать файл собственного шаблона
Например для навигационной линейки breadcrumb.tpl.php
А после изменения шаблона, нужно сообщить Друпалу, чтобы он вызвал файл шаблона, когда нужно отобразить материал.
Для примера с линейкой это будет theme_breadcrumb():

function mytheme_breadcrumb($breadcrumb)
 if (!empty($breadcrumb)){
  $variables = array(
   'breadcrumb' => implode(' * ', $breadcrumb)
  );
  return _phptemplate_callback('breadcrumb',$variables);
 }
}
Аватар пользователя Verkhunov Verkhunov 14 августа 2008 в 15:50

Мне нужен именно шаблон страницы

У меня есть несколько шаблонов с разными шапками
например
Шапка1
Шапка2
Шапка3

Для всех story мне ужно использовать Шапку2

т.е. если у story nid=2
я могу сделать файл page-node-2.tpl.php, но node story может быть сотни не дело каждый раз лазить на фтп.
Поэтому мне нужен именно шаблон страницы для типа материала.

Аватар пользователя sadmin sadmin 14 августа 2008 в 16:11

Теперь понятно.
Нашел проблему, которая похожа на вашу - Can't get page-story.tpl.php to work
Конечное решение в этой статье упирается в функцию phptemplate_callback():


<span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">_phptemplate_variables</span><span style="color: #007700">(</span><span style="color: #0000BB">$hook</span><span style="color: #007700">, </span><span style="color: #0000BB">$vars</span><span style="color: #007700">) {<br />&nbsp; </span><span style="color: #FF8000">// Node is passed to the node when is rendered as a full page.<br />&nbsp; </span><span style="color: #007700">if (</span><span style="color: #0000BB">$hook </span><span style="color: #007700">== </span><span style="color: #DD0000">'page' </span><span style="color: #007700">&amp;&amp; isset(</span><span style="color: #0000BB">$vars</span><span style="color: #007700">[</span><span style="color: #DD0000">'node'</span><span style="color: #007700">])) {<br />&nbsp;&nbsp;&nbsp; </span><span style="color: #0000BB">$vars</span><span style="color: #007700">[</span><span style="color: #DD0000">'template_file'</span><span style="color: #007700">] = </span><span style="color: #DD0000">'page-'</span><span style="color: #007700">. </span><span style="color: #0000BB">$vars</span><span style="color: #007700">[</span><span style="color: #DD0000">'node'</span><span style="color: #007700">]-&gt;</span><span style="color: #0000BB">type</span><span style="color: #007700">;<br />&nbsp; }<br /> <br />&nbsp; return </span><span style="color: #0000BB">$vars</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span>
Почитайте обсуждение на английском, очень интересно! Ситуация таже самая!)

Аватар пользователя sadmin sadmin 15 августа 2008 в 9:49

По-моему логичнее создать страницу со сниппетом, выводящим то, что выводит views. Потому что последний отвечает за отображение содержимого и если что-то надо будет поменять, то придется редактировать и шаблон к вьюсу.

Аватар пользователя crazymozg crazymozg 3 ноября 2010 в 2:39

для справки нашел рабочий вариант для 6й версии:

function phptemplate_preprocess_page(&$variables) {
if ($node = menu_get_object()) {
$variables['node'] = $node;
$suggestions = array();
$template_filename = 'page';
$template_filename = $template_filename . '-' . $variables['node']->type;
$suggestions = $variables['template_files'];
$suggestions[] = $template_filename;
$variables['template_files'] = $suggestions;
}
}