Вывод ноды несколькими видами (кроме page и teaser)

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

Аватар пользователя Dimm Dimm 21 ноября 2007 в 17:20

Возникла необходимость выводить ноды несколькими видами (четырьмя) (двух видов: 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 .
Эти виды Вы можете определить описанным здесь способом.

Комментарии

Аватар пользователя seaji seaji 25 ноября 2007 в 16:33

Кстати в page.tpl.php есть не два а три способа показа ноды

<?php
1. $page==1 $teaser==0 // это страница (нода целиком)

2. $page==0 $teaser==1 // это список нод

3. $page==0 $teaser==0 // это не страница и не список, а например вид или стр. "добавить комментарий"
?>

Аватар пользователя seaji seaji 26 ноября 2007 в 3:54

Ну, я Вас просто поправил, что не два способа, а три.
А вот Вы свою мысль выразили не совсем четко.
Вы пишете:
<?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.

Аватар пользователя Dimm Dimm 26 ноября 2007 в 11:26

Век живи - век учись. Я и сам этого не знал.
Мне надо было с помощью views вывести вывести 3 списка нод одного типа с разным оформлением.
Сделал к этому случаю модуль в котором использовал приведенную выше идею.

Аватар пользователя avpx avpx (не проверено) 24 декабря 2007 в 19:23

извиняюсь, но куда же все-таки вписывать

<?php
//$page = false;
$page = 'my_node_view_1';
$teaser = false;
$links = true;
node_view($node, $teaser , $page , $links);
?>

Аватар пользователя Dimm Dimm 24 декабря 2007 в 23:28

Это если нода выводится програмно.
Например из модуля views или из цикла.
Или <?php
$node=node_load(123);
$page = 'my_node_view_1';
$teaser = false;
$links = true;
node_view($node, $teaser , $page , $links);
?>

Аватар пользователя argon argon 1 июля 2008 в 16:18

Присоединяюсь к просьбе - тема оч. нужная. Опишите плиз (!) максимально подробно, как например создать второй вид тизера и как им управлять.

Аватар пользователя Dimm Dimm 1 июля 2008 в 21:12

Данный код отображает ноду $node. Код вы может вставить куда хотите.

$page = 'my_node_view_1';
$teaser = false;
$links = true;
node_view($node, $teaser , $page , $links);

Предварительно в шаблоне: node.tpl.php надо прописать как будет отображаться ваша нода при $page = 'my_node_view_1'

 if($page==0){
...........................
}
elseif($page!=1 && $page=='my_node_view_1'){
//здесь надо прописать как будет отображаться ваша нода при $page = 'my_node_view_1'
...........................
}
else{
...........................
}
<code>

Если Вы хотите использовать views то Вам сюда: http://drupal.ru/node/9636

Аватар пользователя vanchelo vanchelo 19 апреля 2009 в 11:10

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