написал снипет для вывода целиком последней новости и ниже списка из 3-х последних.
но есть проблема: если у новости есть несколько версий, то почемуто выводится не текущая а другая.
Помогите! Собственно проблема в первом SQL запросе:
<?php
global $locale;
unset ($output);
$node_type = "news"; // тип документа
$sql = "SELECT node.title, node.type, node.nid, node_revisions.body, localizernode.locale, node.created FROM {node},{node_revisions},{localizernode} WHERE node.type = '$node_type' AND node.status='1' AND node.nid=localizernode.nid AND localizernode.locale='$locale' AND node_revisions.nid=node.nid ORDER BY node.created DESC LIMIT 1";
$result = db_query($sql);
$anode = db_fetch_object($result);
echo "".date('Y-m-d',$anode->created)."
";
echo "".$anode->title."
";
echo $anode->body;
echo "
";
unset ($output);
$node_type = "news"; // тип документа
$sql = "SELECT node.title, node.type, node.nid, node.created, localizernode.nid, localizernode.locale FROM {node},{localizernode} WHERE node.type = '$node_type' AND node.status =1 AND localizernode.locale='$locale' AND node.nid=localizernode.nid ORDER BY node.created DESC LIMIT 3";
$output .= "
- ";
- ".date('Y-m-d',$anode->created)." ".l($anode->title, "node/$anode->nid")."
$result = db_query($sql);
while ($anode = db_fetch_object($result)) {
if (date('Y',$anode->created)==2008)
{
$output .= "
";
}
}
$output .= "
";
print $output;
?>
Комментарии
вы вбейте свой запрос в phpmyadmin, и подумайте, что с vid делать
А вообще что такое vid?
version id
Вобщето не version а reVision ID
в таблице node поле vid хранит текущую ревизию тельца из node_revisions
Хм.....
Я думаю лучше сделать вот как:
1)Если всёже хочется хардкора - то по крайней мере сипользуй node_load с параметарми
2)ИМХО идеологически правильней взять View и кастомизировать его вывод так чтобы первая новость отображалась целиком, а остальные - списком заголовков. И всё это загнать в блок.
В конце концов View как и CCK в 8 версии войдут в ядро.
вот как изменил теперь все ок.
<?php
SELECT node.title, node.type, node.nid, node_revisions.body, localizernode.locale, node.created FROM {node},{node_revisions},{localizernode} WHERE node.type = '$node_type' AND node.status='1' AND node.nid=localizernode.nid AND localizernode.locale='$locale' AND node_revisions.nid=node.nid AND node_revisions.vid=node.vid ORDER BY node.created DESC LIMIT 1
?>
Добавил "AND node_revisions.vid=node.vid".
View как и CCK вроде к 7ой версии обещали....
Да - раЗАГНАЛСЯ я что-то)
да - в 7
в 7-м? о! тогда точно как я говорил - 6-й можно пропустить )))
наконец то они догадались что самое важное должно быть в ядре - удалить всегда можно, как неудачный модуль book например
вообще-то неправильно поменяли
ошибка вашего запроса сейчас в том, что если версий несколько,то он берёт не последнюю,как правильно,а первую
кроме того, не факт, что nid=vid, если версий хотя бы у одной ноды было две
изначальная ошибка запроса в том, что если ревизий несколько-он вернёт не один результат,а несколько,и нужно не fetch_object, а fetch_array.
node_revisions.nid=node.nid AND node_revisions.vid=node.vid достаточно только второго предиката, тогда будет выбираться текущая версия (ревизия) ноды
Еще очень хорошо использовать альясы типа {node} n чтобы через db_rewrite_sql можно было прикручивать права доступа к материалам, а не в последствии переписывать все запросы.
Ну и LIMIT вносить в запрос не этично - если понадобится переносить на другйо тип базы данных опять переписывать, для этого db_query_range