Исправить листалку нод влево-вправо (следующая-предыдущая статья)

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

Аватар пользователя kuhlevsky kuhlevsky 6 июня 2012 в 13:56

Буду благодарен Вашей помощи, сам не могу справиться.
Суть проблемы вот в чем. Есть листалка следующей и предыдущей статьи по термину, этот код вписан в node.tpl.php:

<?php  
    $prev_node_nid_arr 
taxonomy_select_nodes_from_nid($node->field_sub['und'][0]['tid'], $node->nid'prev');
    if(
sizeof($prev_node_nid_arr)){
        
$prev_node=node_load($prev_node_nid_arr[0]);
        print 
'<a href="/node/'$prev_node->nid.'" title="'.$prev_node->title.'">'.$prev_node->title.'</a>';    
    }
    
?></div>
    <?php  
    $next_node_nid_arr 
taxonomy_select_nodes_from_nid($node->field_sub['und'][0]['tid'], $node->nid'next');
    if(
sizeof($next_node_nid_arr)){
        
$next_node=node_load($next_node_nid_arr[0]);
        print 
'<div class="next"><a href="/node/'$next_node->nid.'" title="'.$next_node->title.'">'.$next_node->title.'</a></div>';    
    }
    
?>

А вот этот код лежит в template.php:

<?php

function taxonomy_select_nodes_from_nid($tid$nid$direction 'next'$limit 1) {
    if (!
variable_get('taxonomy_maintain_index_table'TRUE)) {
        return array();
    }
    
$query db_select('taxonomy_index''t');
    
$query->addTag('node_access');
    
$query->condition('tid'$tid);
    
$query->condition('nid'$nid$direction == 'next' '>' '<');

    if (

$limit !== FALSE) {
        
$query->range(0$limit);
    }

    

$query->addField('t''nid');
    
$query->addField('t''tid');
    
$query->orderBy('t.nid'$direction == 'next' 'ASC' 'DESC');

    return 

$query->execute()->fetchCol();
}

?>

На данный момент все работает, советую всем именно так и ставить, сильно не разбираясь в Друпале 7 Smile

Но напрягает один момент, а именно - ссылка на предыдущую и следующую статьи выглядит site.com/node/*. Это не есть хорошо. Как исправить выше представленный код, чтобы вписывался url адрес страницы, на который ведет ссылка вместо стандартного друпаловского?

Понимаю, что надо сделать что-то с этим:

<?php

print '<a href="/node/'$prev_node->nid.'"

?>

Пробовал вставить url. вместо nid., но так появляется адрес текущей страницы там. В Друпале я электрочайник )

Заранее благодарен!!!!!

Комментарии

Аватар пользователя Hek Hek 6 июня 2012 в 18:10

Попробуйте вместо
<?php print '<a href="/node/'$prev_node->nid.'" title="'.$prev_node->title.'">'.$prev_node->title.'</a>';?>
так
<?php print l($prev_node->title'node/'.$prev_node->nid$options = array($alias TRUE));?>

Аватар пользователя kuhlevsky kuhlevsky 6 июня 2012 в 18:48

Да!!! Спасибо! Работает для предыдущей! Только нету атрибута title для ссылки, а он важен Sad

И еще, как Ваш код прикрутить к next, чтобы не потерялся

для css - вот этот:
<?php
print '<div class="next"><a href="/node/'$next_node->nid.'" title="'.$next_node->title.'">'.$next_node->title.'</a></div>';

?>

м? Благодарю!

Аватар пользователя Hek Hek 6 июня 2012 в 21:11

Тогда код такой (здесь передается и alt и title ссылки)
<?php print '<div class="next"'.l($next_node->title'node/'.$next_node->nid$options = array('attributes' => array('alt' => $next_node->title'title' => $next_node->title), $alias TRUE)).'</div>';?>
Ну и для предыдущей по той-же системе, только поменять в коде next на prev

Аватар пользователя kuhlevsky kuhlevsky 7 июня 2012 в 19:46

Вставил вот так, див убрал:

<?php

print l($next_node->title'node/'.$next_node->nid$options = array('attributes' => array('title' => $next_node->title), $alias TRUE));        

?>

выводит только ссылку Sad титла нету Sad

код стал таким в node.tpl.php:

<?php

    

<div class="prev">
    <?
php  
    $prev_node_nid_arr 
taxonomy_select_nodes_from_nid($node->field_country['und'][0]['tid'], $node->nid'prev');
    if(
sizeof($prev_node_nid_arr)){
        
$prev_node=node_load($prev_node_nid_arr[0]);
        print 
l($prev_node->title'node/'.$prev_node->nid$options = array($alias TRUE));    
    }
    
?></div>
    <div class="next">
    <?php  
    $next_node_nid_arr 
taxonomy_select_nodes_from_nid($node->field_country['und'][0]['tid'], $node->nid'next');
    if(
sizeof($next_node_nid_arr)){
        
$next_node=node_load($next_node_nid_arr[0]);
        print 
l($next_node->title'node/'.$next_node->nid$options = array('attributes' => array('title' => $next_node->title), $alias TRUE));        
    }
    
?></div>
    </div>

?>

Не помогло Sad

Аватар пользователя Hek Hek 9 июня 2012 в 15:56

Почему не работает, даже и не понятно. Код рабочий - это стандартная функция l().
Еще я бы не вызывал node_load только для того, чтобы узнать title, гораздо легче (для сайта) будет так

<?php
$next_node_title 
db_result(db_query("SELECT title FROM {node} WHERE nid = '%d'"$next_node_nid_arr[0]));
?>
Аватар пользователя arroyo arroyo 8 октября 2012 в 9:10

"kuhlevsky" wrote:
На данный момент все работает, советую всем именно так и ставить, сильно не разбираясь в Друпале 7 :)

У меня ошибку выдает. Как исправить?

Notice: Undefined index: und в функции include() (строка 101 ...
Notice: Undefined index: und в функции include() (строка 108 ...