Как в Drupal вывести ссылки на следующую-предыдущую ноду

Если вы хоть когда-нибудь использовали CMS WordPress, то вам должны быть знакомы штатные функции API, которые позволяли выводить ссылки на следующий и предыдущий записи в блоге. У Drupal такой возможности, насколько мне известно, к сожалению не предусмотрено. Однако решить описанное недоразумение вполне можно собственными силами. Например вот так вот:

<?php
/**
 * Выводит ссылки на следующую / предыдущую статью типа $node_type
 * с идентификатором ноды равным $current_nid,
 * обернутые псевдоэлементами с классами $prev_class и $next_class.
 * 
 * @param string $node_type
 * @param int $current_nid
 * @param string $prev_class
 * @param string $next_class
 */
function druwebru_prev_next_article($node_type, $current_nid, $prev_class = 'previous-article', $next_class = 'next-article') {
    $nodes = db_select('node', 'n')
            ->fields('n')
            ->condition('n.type', $node_type)
            ->execute();
    $qnid = array();
    $qtitle = array();

    foreach ($nodes as $n) :
        $qnid[] = $n->nid;
        $qtitle[] = $n->title;
    endforeach;

    $idx = -1;
    for ($i = 0, $count = count($qnid); $i < $count; $i++) :
        if ($qnid[$i] == $current_nid) :
            $idx = $i;
        endif;
    endfor;
    if ($idx > 0) :
        print '<span class="' . $prev_class . '"><a href="'
                . url('node/' . $qnid[$idx - 1], array('absolute' => TRUE))
                . '">' . $qtitle[$idx - 1] . '</a></span>';
    endif;
    if ($idx < count($qnid) - 1) :
        print '<span class="' . $next_class . '"><a href="'
                . url('node/' . $qnid[$idx + 1], array('absolute' => TRUE))
                . '">' . $qtitle[$idx + 1] . '</a></span>';
    endif;
}
?>

Мою функцию нужно поместить в файл темы template.php. После чего в шаблон ноды (node.tpl.php) придется добавить её вызов, смотрим примеры:

<?php 
// С указанием только обязательных параметров (тип ноды + её идентификатор):
druwebru_prev_next_article($node->type, $node->nid);
// С указанием всех входных параметров, т.е. это
// тип ноды + её идентификатор + классы спанов:
druwebru_prev_next_article($node->type, $node->nid, 'next-link', 'prev-link');
?>

Вот и все.





© 2012-2014 Druweb.ru. Вы можете спокойно копировать любые материалы сайта только при наличии обратной ссылки.