Вывод тизеров
Прислано: masterkust
вс, 20/12/2009 - 05:42
Как вывести тизеры, пренадлежащие нодам определенного термина таксономии.
Поиск помог найти сниппеты как вывести список.
А мне нужно как-то вывести тизеры.
Устанавливать только ради одного этого views не хочется.
- masterkust's blog
- Для комментирования войдите или зарегистрируйтесь
$result = db_query(db_rewrite_sql("SELECT * FROM {node} n WHERE type = '%s' AND status = 1 ORDER BY n.created ASC"), "blog"); //blog - ваш тип while($data = db_fetch_object($result)) { $node = node_load($data->nid); print $node->teaser; }
вот примерно так. Только учтите, что функция node_load() очень ресурсоемкая, т.к. подгружает всю ноду.
- Для комментирования войдите или зарегистрируйтесь
sidor, ну и где тут термин таксономии?
- Для комментирования войдите или зарегистрируйтесь
Сам долго мучился потом все таки поставил views.
- Для комментирования войдите или зарегистрируйтесь
sidor, ну и где тут термин таксономии?
Забыл про него :)
$result = db_query(db_rewrite_sql("SELECT * FROM {node} n WHERE type = '%s' AND status = 1 ORDER BY n.created ASC"), "blog"); //blog - ваш тип while($data = db_fetch_object($result)) { $node = node_load($data->nid); if($node->taxonomy[10]) {// 10 - id термина print $node->teaser; } }
- Для комментирования войдите или зарегистрируйтесь
Писец, вы все сниппеты так бахаете? Сейчас до дома доеду нормальный запрос напишу
- Для комментирования войдите или зарегистрируйтесь
сирота, до сих пор домой не вернулся : )
- Для комментирования войдите или зарегистрируйтесь
Сорри, сирота стольким помогает, что забывает нафиг. Сейчас сделает
- Для комментирования войдите или зарегистрируйтесь
<?php
$taxo_id = 2; // номер термина
$list_no =10; // количество документов в списке
$list_cu = 1; // счетчик
$sql = "SELECT node.title, node.nid FROM node INNER JOIN term_node ON node.nid = term_node.nid WHERE term_node.tid = $taxo_id ORDER BY node.created DESC LIMIT $list_no";
$result = db_query($sql);
while ($anode = db_fetch_object($result)) {
$output .= node_view(node_load(array('nid' => $anode->nid)), 1);
$output .= "<ul>";
$list_cu = 0;
}
$output .= "</ul>";
print $output;
?>Сделал с помощью node_load, но систему подгружает.
Вообще мне нужно только картинку вывести и название, и для этого подгружать всю ноду все-таки не эффективно.
Кто-нибудь знает как это сделать более правильно?
- Для комментирования войдите или зарегистрируйтесь
Написать запрос к бд и обработать его
А почему не так
node_view(node_load($anode->nid), TRUE);
Это меньше нагрузит сервер?
- Для комментирования войдите или зарегистрируйтесь
тоже интересно. А то все вьюс ругает, а чем заменить - хрен знает
запросы также грузят
- Для комментирования войдите или зарегистрируйтесь
Кстати, а вывод всьюсовский тизеров, также node load использует?
- Для комментирования войдите или зарегистрируйтесь
Как-то так:
<?php$result = db_query(db_rewrite_sql("SELECT nv.teaser FROM {node} n INNER JOIN {node_revisions} nr ON n.vid = nv.vid INNER JOIN {term_node} tn ON n.vid = tn.vid WHERE type = '%s' AND status = 1 AND tn.tid = %d ORDER BY n.created ASC"), 'blog', 777); //blog - ваш тип, 777 ваш термин
while($data = db_fetch_object($result)) {
print $data->teaser;
}
}?>Если нужно вывести картинку, то аналогичным образом JOIN'им таблицу с картинками и выводим
- Для комментирования войдите или зарегистрируйтесь
а как сделать вывод тизеров с пагинатором
а еще бы добавить условие по типу ноды (page или story например)
- Для комментирования войдите или зарегистрируйтесь




Комментарии