Новый тип материал создал, как теперь в теле блока прописать чтобы этот материал выводился?
Уж извините за ламерский вопрос, но очень нужна помощь! Решил на сайте фразы студентов с экзаменов записывать.
модуль views, создаете вид, блочный , фильтр по типу материала. полученный блок выводите куда вам нужно.
по умолчанию в друпале такая задача не решается.
Почему это не решаются в друпале такие задачи?
Модуль views потребляет очень много ресурсов. Его мощь и преимущество в том, что он может помочь быстро сделать вывод на страницу опред. материалов (списков, таблиц, анонсов и др.). Именно быстро сделать, но это не работает быстро.
Лично я стараюсь использовать этот модуль тогда, когда на странице с материалами нужно использовать фильтры - с этим модуль справляется превосходно, а повторить своими силами это трудно.
Итак, альтернативное решение - добавить в тело блока PHP-код, который будет выводить эти самые цитаты.
Чтобы не мучиться, привожу код (недавно делал блок для вывода рекламных сообщений):
<?php unset($output); $nmbr_reklama=3;//Количество сообщений рекламы if(arg(0) == 'node'&&is_numeric(arg(1))&&!arg(2)){ $node = node_load(arg(1)); $sql="SELECT n.title, n.nid FROM {node} AS n WHERE n.status=1 AND n.type='reklama' GROUP BY n.nid LIMIT ".$nmbr_reklama; $result = db_query($sql); while($anode = db_fetch_object($result)){ $reklama= node_load($anode->nid); $output .= '
<div class="node"><h3 class="title">'.$reklama->title.'</h3>'. $reklama->body.'</div>'; } return$output; } ?>
Влад, в корне не верное утверждение! Тот код, который у вас написан - намного оптимальнее выводить с помощью views - будет всего пара запросов к базе данных, а то что написано:
1) запрос списка нод
2) цикл с node_load - это загрузка ноды, и от каждого модуля, который подключает свои поля к ноде будет как минимум по одному запросу:
- select ... from node
- select ... from files
- select ... from comentstatistics и так далее
Вывод блока из 10 нод таким образом генерирует около 70ти запросов к базе! поэтому лучше выбирать нужные поля одним запросом, как это делает views
Потом, зачем загружать ноду и не использовать её, к чему в следущем запросе группировка еще и первичному ключу?
Проще в настройках блока указать на каких страницах он выводится!
$sql="SELECT n.nid, n.title, r.teaser, r.format FROM {node} n INNER JOIN {node_revisions} r ON r.vid = n.vid WHERE n.type='%s' ORDER by n.created DESC";
$result = db_query_range($sql, $ntype, 0, $ncount);
while ($node = db_fetch_object($result)) {
$output .= '
';
$output .= '
'. check_plain($node->title) .'
'; // если есть желание сделать ссылко на ноду, то раскоментровать следущую строку
//$output .= '
Теперь знаю оба способа вывода собственных нод. Результат - блок "Студенты говорят" То есть пока решил поэкспериментировать на приведенном коде.
Как теперь сделать чтобы пользователь сайта, мог при желании посмотреть не только
три ноды указанных в коде
$ncount = 3; //Количество сообщений nod
но и перейти к следующей тройке (четверке или пятерке) нод?
если решать в лоб, то сделал бы в конце блока ссылку на отдельную страницу, а на ней уже бы парсил поличество нод и номера страниц.
Комментарии
модуль views, создаете вид, блочный , фильтр по типу материала. полученный блок выводите куда вам нужно.
по умолчанию в друпале такая задача не решается.
ок, понял. Спасибо, очень благодарен!
Почему это не решаются в друпале такие задачи?
Модуль views потребляет очень много ресурсов. Его мощь и преимущество в том, что он может помочь быстро сделать вывод на страницу опред. материалов (списков, таблиц, анонсов и др.). Именно быстро сделать, но это не работает быстро.
Лично я стараюсь использовать этот модуль тогда, когда на странице с материалами нужно использовать фильтры - с этим модуль справляется превосходно, а повторить своими силами это трудно.
Итак, альтернативное решение - добавить в тело блока PHP-код, который будет выводить эти самые цитаты.
Чтобы не мучиться, привожу код (недавно делал блок для вывода рекламных сообщений):
unset ($output);
$nmbr_reklama=3;//Количество сообщений рекламы
if (arg(0) == 'node' && is_numeric(arg(1)) && ! arg(2) ) {
$node = node_load(arg(1));
$sql="SELECT n.title, n.nid FROM {node} AS n WHERE n.status=1 AND n.type='reklama' GROUP BY n.nid LIMIT ".$nmbr_reklama;
$result = db_query($sql);
while ($anode = db_fetch_object($result)) {
$reklama= node_load($anode->nid);
$output .= '
<div class="node"><h3 class="title">'.$reklama->title.'</h3>'. $reklama->body.'</div>';
}
return $output;
}
?>
Как-то так...
PS. Формат ввода нужно установить в PHP.
PPS. Статья сохранена: http://drupalcookbook.ru/node/25
кстати, тестировал views под 6ку - он обладает замечательным свойством - сам показывает, каким sql-запросом он будет пользоваться.
Влад, в корне не верное утверждение! Тот код, который у вас написан - намного оптимальнее выводить с помощью views - будет всего пара запросов к базе данных, а то что написано:
1) запрос списка нод
2) цикл с node_load - это загрузка ноды, и от каждого модуля, который подключает свои поля к ноде будет как минимум по одному запросу:
- select ... from node
- select ... from files
- select ... from comentstatistics и так далее
Вывод блока из 10 нод таким образом генерирует около 70ти запросов к базе! поэтому лучше выбирать нужные поля одним запросом, как это делает views
Потом, зачем загружать ноду и не использовать её, к чему в следущем запросе группировка еще и первичному ключу?
Проще в настройках блока указать на каких страницах он выводится!
<?php
$output = '';
$ncount = 3; //Количество сообщений рекламы
$ntype = 'story'; //Тип материала
$sql="SELECT n.nid, n.title, r.teaser, r.format FROM {node} n INNER JOIN {node_revisions} r ON r.vid = n.vid WHERE n.type='%s' ORDER by n.created DESC";
$result = db_query_range($sql, $ntype, 0, $ncount);
while ($node = db_fetch_object($result)) {
$output .= '
$output .= '
'. check_plain($node->title) .'
'; // если есть желание сделать ссылко на ноду, то раскоментровать следущую строку
//$output .= '
'. l($node->title, 'node/'. $node->nid) .'
';
$output .= check_markup($node->teaser, $node->format, FALSE);
$output .= l(t('Read more'), 'node/'. $node->nid); //ссылка читать далее, можно закоментировать
$output .= '
';
}
return $output;
?>
Спасибо VladSavitsky и andypost@drupal.org - вопрос принципиально решен
Теперь знаю оба способа вывода собственных нод. Результат - блок "Студенты говорят" То есть пока решил поэкспериментировать на приведенном коде.
Как теперь сделать чтобы пользователь сайта, мог при желании посмотреть не только
три ноды указанных в коде
но и перейти к следующей тройке (четверке или пятерке) нод?
если решать в лоб, то сделал бы в конце блока ссылку на отдельную страницу, а на ней уже бы парсил поличество нод и номера страниц.