Возникла необходимость выводить ноды несколькими видами (четырьмя) (двух видов: page и teaser не хватило).
Решение:
Можно передать в шаблон node.tpl.php переменную $page с нужным параметром отображения и в зависимости от значения $page выводить различный вид ноды.
Код:
<?php
//$page = false;
$page = 'my_node_view_1';
$teaser = false;
$links = true;
node_view($node, $teaser , $page , $links);
?>
В шаблоне: node.tpl.php
<?php if($page==0){
?>...........................
<?php
}
elseif($page!=1 && $page=='my_node_view_1'){
?>...........................
<?php
}
else{
?>...........................
<?php
}
?>
Потом я дописал модуль который добавляет 10 своих видов во views http://www.drupal.ru/node/9636 .
Эти виды Вы можете определить описанным здесь способом.
Комментарии
Кстати в page.tpl.php есть не два а три способа показа ноды
<?php
1. $page==1 $teaser==0 // это страница (нода целиком)
2. $page==0 $teaser==1 // это список нод
3. $page==0 $teaser==0 // это не страница и не список, а например вид или стр. "добавить комментарий"
?>
А если через $page передавать переменную - то хоть 100
Ну, я Вас просто поправил, что не два способа, а три.
А вот Вы свою мысль выразили не совсем четко.
Вы пишете:
<?php
//$page = false;
$page = 'my_node_view_1';
$teaser = false;
$links = true;
node_view($node, $teaser , $page , $links);
?>
А куда вставлять этот код не пишете.
Ну откуда простой смертный знает, что в файле template.php можно использовать функцию:
<?php
function _phptemplate_variables($hook, $vars = array()) {
switch ($hook) {
case 'page': // определяем переменные для page.tpl.php
$vars['is_front'] // например
break;
case 'node': // определяем переменные для node.tpl.php
$vars['submitted'] // например
break;
case 'comment': // определяем переменные для comment.tpl.php
$vars['author_comment'] // например
break;
}
return $vars;
}
?>
Подсмотреть можно в теме Zen.
Век живи - век учись. Я и сам этого не знал.
Мне надо было с помощью views вывести вывести 3 списка нод одного типа с разным оформлением.
Сделал к этому случаю модуль в котором использовал приведенную выше идею.
извиняюсь, но куда же все-таки вписывать
<?php
//$page = false;
$page = 'my_node_view_1';
$teaser = false;
$links = true;
node_view($node, $teaser , $page , $links);
?>
Это если нода выводится програмно.
Например из модуля views или из цикла.
Или <?php
$node=node_load(123);
$page = 'my_node_view_1';
$teaser = false;
$links = true;
node_view($node, $teaser , $page , $links);
?>
Не могли бы Вы еще раз написать поподробнее что куда вписать, а то пробую- ничего не получается.
Присоединяюсь к просьбе - тема оч. нужная. Опишите плиз (!) максимально подробно, как например создать второй вид тизера и как им управлять.
Данный код отображает ноду $node. Код вы может вставить куда хотите.
$teaser = false;
$links = true;
node_view($node, $teaser , $page , $links);
Предварительно в шаблоне: node.tpl.php надо прописать как будет отображаться ваша нода при $page = 'my_node_view_1'
...........................
}
elseif($page!=1 && $page=='my_node_view_1'){
//здесь надо прописать как будет отображаться ваша нода при $page = 'my_node_view_1'
...........................
}
else{
...........................
}
<code>
Если Вы хотите использовать views то Вам сюда: http://drupal.ru/node/9636
Привет.
Скажите, пожалуйста, не могли бы вы расписать по-подробнее куда конкретно вставлять эти коды и какие необходимо поставить модули что все это работало. Заранее спасибо.
Надо поставить views + этот модуль:
http://www.drupal.ru/node/9636
Если у Вас Drupal6 - то ничего кроме views2 не нужно.