Я хотел малого. Ссылки на ноды, к которым приаттачено просматриваемое изображение. Я пользую Views и привык к тому, как это удобно. Views_Multiblock тоже порадовал. Но почему-то views упорно показывал мне либо empty_page либо все ноды с картинками. Я попробовал приписать argument handling code к этому виду, но создать фильтр у меня не вышло. Запрос постоянно рассыпался. Тогда я взял этот запрос и обернул его вот в такой вот блок.
if ((integer)(arg(1))>0 and arg(0)=='node' and !arg(2))
{
$query = "SELECT node.nid, node.sticky AS node_sticky, node.changed AS node_changed, node.title AS node_title, node.changed AS node_changed ";
$query .= "FROM dru4aq_node node ";
$query .= "LEFT JOIN dru4aq_image_attach image_attach ON node.nid = image_attach.nid ";
$query .= "WHERE (node.status = '1') AND (image_attach.iid) AND (image_attach.iid = %s) ";
$query .= "ORDER BY node_sticky ASC, node_changed ASC LIMIT 0, 5";
$q_res = db_query($query,(integer)(arg(1)));
while ($q_str = db_fetch_array($q_res))
{
echo l($q_str['node_title'],'node/'.$q_str['nid'])."<br />";
}
}
?>
Теперь у меня есть вожделенные ссылки. Причем с views я парился несколько часов, а на это ушло 20 минут. Теперь я сомневаюсь, что views - удобнее. Кроме того мой блок явно меньше утомляет базу.
Комментарии
Молодца, мелкие радости рулят
$query можно и в одну строчку писать длинно, так понятнее.
Корректнее так:
<?php if (arg(0)=='node' && is_numeric(arg(1)) and !isset(arg(2)))?>
Надо:
<?php $query = "SELECT nid, sticky ..... FROM {node}"; ?>
Views для тех, кто плохо или совсем не знает PHP. К тому же views составляет корректные запросы к базе, на что, если делать тоже вручную, уёдёт времени поболе, чем 20 мин.
Конечно. Однако и views не пионерами написан - все запросы кэшируются.
Ну и как с вами всеми спорить, если вы все правы?
>> . К тому же views составляет корректные запросы к базе,
обычно - да. Но не с Image_attach. C ним мы не сохлись характерами.
Интересно, а как все-таки сделать то же из views, вдруг правда pager понадобится?
сниппет пойдёт для блока
а вот для многостраничности вьювс проще будет
не поленился и вписал в блок приведенный IF
И получил Fatal error: Can't use function return value in write context in /home/afasdalf/public_html/includes/common.inc(1352) : eval()'d code on line 3
Обидно.
Вот так работает, но такая проверка - не совсем то, что надо.
if ( is_numeric(arg(1))>0 and arg(0)=='node' and !arg(2))
Ну да, isset никчему...
if (arg(0)=='node' && is_numeric(arg(1)) && !arg(2))