Views? А зачем?

Главные вкладки

Аватар пользователя fasdalf@fasdalf.ru fasdalf@fasdalf.ru 17 января 2008 в 17:39

Я хотел малого. Ссылки на ноды, к которым приаттачено просматриваемое изображение. Я пользую Views и привык к тому, как это удобно. Views_Multiblock тоже порадовал. Но почему-то views упорно показывал мне либо empty_page либо все ноды с картинками. Я попробовал приписать argument handling code к этому виду, но создать фильтр у меня не вышло. Запрос постоянно рассыпался. Тогда я взял этот запрос и обернул его вот в такой вот блок.

<?php
  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 - удобнее. Кроме того мой блок явно меньше утомляет базу.

Комментарии

Аватар пользователя Dan Dan 17 января 2008 в 20:30

if ((integer)(arg(1))>0 and arg(0)=='node' and !arg(2))

Корректнее так:
<?php if (arg(0)=='node' && is_numeric(arg(1)) and !isset(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 FROM dru4aq_node node ";

Надо:
<?php $query = "SELECT nid, sticky ..... FROM {node}"; ?>

Причем с views я парился несколько часов, а на это ушло 20 минут.

Views для тех, кто плохо или совсем не знает PHP. К тому же views составляет корректные запросы к базе, на что, если делать тоже вручную, уёдёт времени поболе, чем 20 мин.

Кроме того мой блок явно меньше утомляет базу.

Конечно. Однако и views не пионерами написан - все запросы кэшируются.

Аватар пользователя fasdalf@fasdalf.ru fasdalf@fasdalf.ru 18 января 2008 в 12:52

Ну и как с вами всеми спорить, если вы все правы?

>> . К тому же views составляет корректные запросы к базе,
обычно - да. Но не с Image_attach. C ним мы не сохлись характерами.

Интересно, а как все-таки сделать то же из views, вдруг правда pager понадобится?

Аватар пользователя fasdalf@fasdalf.ru fasdalf@fasdalf.ru 18 января 2008 в 13:27

не поленился и вписал в блок приведенный 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))