Ссылка на несколько нодов сразу

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

Аватар пользователя Aist Aist 15 сентября 2006 в 12:58

Привет.

Подскажите, пожалуйста, а есть ли модуль, позволяющий выводить на одной странице сразу несколько нодов (заголовок+анонс+ссылку)? Т.е., что бы было примерно как в таксономии по ссылке /taxonomy/term/102,130 выводится 2 нода.
Хочется иметь ссылку вида http://site/nodes/123,456,789 и что бы эта страница показывала несколько нодов сразу.
Спасибо заранее!

Комментарии

Аватар пользователя B.X B.X 18 сентября 2006 в 16:50

если не трудно, не могли бы вы код модуля привести здесь? очень интересная задумка, мне бы пригодилась...

Аватар пользователя Aist Aist 19 сентября 2006 в 10:19

Не знаю, насколько "красиво" и правильно решил эту задачу, но то что рабочий вариант - это точно Smile Если кто-нибудь сделает замечания по модулю, буду признателен.

<?php

function fewnodes_help($section) {
  switch ($section) {
    case 'admin/modules#description':
      return t('Link to a few nodes at once');
  }
}

function fewnodes_menu($may_cache) {
  $items = array();

  $items[] = array(
      'path' => 'fewnodes',
      'access' => true,
      'callback' => 'fewnodes_page',
      'type' => MENU_CALLBACK,
      'callback arguments' => array(arg(1)),
      );         

  return $items;
}

function fewnodes_perm() {
        return array('access content');
}

function fewnodes_page($nids) {
        $nid_array = array();
        if (ereg(",", $nids)) {
          $nid_array = _fewnodes_check_node_array(explode(",", $nids));
        }
        if ($nid_array) {                                      
                $nodes = array();
                $output = "";
                $result = db_query_range(db_rewrite_sql("SELECT n.nid, n.title, n.uid, u.name FROM {node} n INNER JOIN {users} u ON n.uid = u.uid WHERE n.nid IN (".implode(",", $nid_array).")"), 0, 10);     
            while ($node = db_fetch_object($result)) {
                $output .= node_view(node_load($node->nid), 1);
        }
        $output .= theme('pager', NULL, variable_get('default_nodes_main', 10));                       
                return $output;
               
        } else {
                return t('Empty node list');
        }
}

function _fewnodes_check_node_array($array) {
        for ($i=0; $i<count($array); $i++) {                           
                if (empty($array[$i]) || intval($array[$i])==$array[$i]) {                     
                        return false;
                }
        }
        return $array;
}

?>

Аватар пользователя Aist Aist 19 сентября 2006 в 13:21

сохранить этот код в отдельный файл, назвать его fewnodes.module, скопировать его в папку modules вашего Друпала. А дальше как обычно, зайти в админку и включить данный модуль.
После этого у вас будут "работать" ссылки вида http://site.ru/fewnodes/111,222,333

Аватар пользователя Aist Aist 20 сентября 2006 в 13:58

а точно все верно указываете? Ноды существуют? ID нодов указываются через запятую и без пробелов?

Аватар пользователя B.X B.X 20 сентября 2006 в 14:00

а кстати, куда эта ссылка перенаправляет? как выглядит "несколько документов" по ссылке? в каком виде?

Аватар пользователя Aist Aist 21 сентября 2006 в 14:58

Она никуда не перенаправляется, модуль формирует страницу, на которой выводятся анонсы перечисленных в ссылке (URL) нодов. Вот как тут: http://www.drupal.ru/taxonomy/term/14 На этой странице выводится 4 нода. Мой модуль позволяет получить примерно такую же страничку (естественно, без заголовка терма "Программирование и дизайн для web").
Зачем это нужно? А вот у меня, например, есть сторонний проект, на котором нужно размещать ссылку на множество моих нодов. Т.е. эти ноды в друпале никак не связаны, но пользователь стороннего проекта хочет сослаться сразу на несколько нодов и что бы не перечислять N ссылок можно просто сослаться на N нодов в одной ссылке. Надеюсь, понятно изложил Smile

Аватар пользователя B.X B.X 21 сентября 2006 в 16:31

да, спасибо, понятно как это работает... очень нужный модуль...
вы не пробовали его как проект на drupal.org открыть? я думаю, всем бы пригодилось...