Как вывести тизеры, пренадлежащие нодам определенного термина таксономии.
Поиск помог найти сниппеты как вывести список.
А мне нужно как-то вывести тизеры.
Устанавливать только ради одного этого views не хочется.
$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() очень ресурсоемкая, т.к. подгружает всю ноду.
$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);
Сделал с помощью 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'им таблицу с картинками и выводим
Комментарии
while($data = db_fetch_object($result)) {
$node = node_load($data->nid);
print $node->teaser;
}
вот примерно так. Только учтите, что функция node_load() очень ресурсоемкая, т.к. подгружает всю ноду.
sidor, ну и где тут термин таксономии?
Забыл про него
while($data = db_fetch_object($result)) {
$node = node_load($data->nid);
if($node->taxonomy[10]) {// 10 - id термина
print $node->teaser;
}
}
Сам долго мучился потом все таки поставил views.
Писец, вы все сниппеты так бахаете? Сейчас до дома доеду нормальный запрос напишу
сирота, до сих пор домой не вернулся : )
Сорри, сирота стольким помогает, что забывает нафиг. Сейчас сделает
<?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 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 например)