ВопросСсылки "Предыдущая / Следующая запись"

Подскажите как организовать ссылки для товаров. При просмотре товара хочу не перемещаясь в каталог листать
пробывал так:
в node-product.tpl.php

<?php
if($page!=0)    {
    $previous_node_link = previous_node($node, NULL, NULL);
    $next_node_link = next_node($node, NULL, NULL);  
    print '<div class="book-navigation"><div class="page-links clear-block">';
    if($previous_node_link && $next_node_link)
        {print $previous_node_link.'<span class="page-up">&harr;</span>'.$next_node_link;}
    else if($previous_node_link)
        {print $previous_node_link;}
    else if($next_node_link)
        {print $next_node_link;}
    print '</div></div>';
}
?>

в template.php

function previous_node($node, $previous_node_text=NULL, $prepend_text=NULL, $append_text=NULL)
{ 
    $query = db_rewrite_sql("SELECT nid, title FROM {node} WHERE created < '%s' AND status=1 and promote=1 AND type='%s' ORDER BY created DESC LIMIT 1", "node", "nid");
    $result = db_query($query, $node->created, $node->type);
    $previous_node = db_fetch_object($result);
    if(!$previous_node_text) // If previous_node_text is not specified then use the previous node's title as the text for the link.
        {$previous_node_text = $previous_node->title;}
        if($previous_node->nid!=NULL)
            {return l('<< '.$previous_node_text, 'node/'.$previous_node->nid, array('title'=>$previous_node_text, 'class'=>'page-previous'));}
        else // This node does not have a previous node...
            {return NULL;}
}
 
function next_node($node, $next_node_text=NULL, $prepend_text=NULL, $append_text=NULL)
{ 
    $query = db_rewrite_sql("SELECT nid, title FROM {node} WHERE created > '%s' AND status=1 and promote=1 AND type='%s' ORDER BY created ASC LIMIT 1", "node", "nid");
    $result = db_query($query, $node->created, $node->type);
    $next_node = db_fetch_object($result);
    if(!$next_node_text) // If next_node_text is not specified then use the next node's title as the text for the link.
        {$next_node_text = $next_node->title;}
        if($next_node->nid!=NULL)
            {return l($next_node_text.' >>', 'node/'.$next_node->nid, array('title'=>$next_node_text, 'class'=>'page-next'));}
        else // There is no next node for this node...
            {return NULL;}
}

Почему-то пусто.

Комментарии

Аватар пользователя Spleshka
Spleshka написал:

template.php:

function previous_node($node) { 
  $previous_node = db_fetch_object(db_query_range(
    "SELECT nid, title FROM {node} WHERE created < %d AND status = 1 AND type = '%s' ORDER BY DESC", 
    $node->created, $node->type, 0, 1
  ));
  if ($previous_node) {
    return l(
      '<< ' . $previous_node->title, 'node/' .  $previous_node->nid, 
      array('attributes' => array('title' => $previous_node->title, 'class' => 'page-next'))
    );
  }
  return '';
}
 
function next_node($node) { 
  $next_node = db_fetch_object(db_query_range(
    "SELECT nid, title FROM {node} WHERE created > %d AND status = 1 AND type = '%s' ORDER BY created ASC",
    $node->created, $node->type, 0, 1
  ));
  if ($next_node) {
    return l(
      $next_node->title . ' >>', 'node/' .  $next_node->nid, 
      array('attributes' => array('title' => $next_node->title, 'class' => 'page-next'))
    );
  }
  return '';
}

node-product.tpl.php:

if ($page) {
  $previous_node_link = previous_node($node);
  $next_node_link = next_node($node);  
  print '<div class="book-navigation"><div class="page-links clear-block">';
  if ($previous_node_link && $next_node_link) {
    print $previous_node_link . '<span class="page-up">&harr;</span>' . $next_node_link;
  }
  else if ($previous_node_link) {
    print $previous_node_link;
  }
  else if ($next_node_link) {
    print $next_node_link;
  }
  print '</div></div>';
}
28.10.2011 13:40
Аватар пользователя prost
prost написал:

У меня схожая проблема. На форуме есть "линейка" перемещения по страницам. "Линейка" находиться после всех комментариев, а это не удобно. Что нужно поправить, и где, чтобы "линейка" отображалась еще и перед первым комментом, верху страницы. Лазил по всем .tpl.php-файлам, но кусок кода отвечающий за отображение этой "линейки" не нашел.

31.10.2011 08:46
Аватар пользователя Spleshka
Spleshka написал:

За отображение линейки отвечает forum-topic-navigation.tpl.php в модуле forum. Чтобы поднять её наверх надо добавить в свой модуль реализацию хука nodeapi, подняв отображение с линейкой повыше:

/**
 * Implementation of hook_nodeapi().
 */
function ИМЯМОДУЛЯ_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
  if ($op == 'view') {
    if (isset($node->content['forum_navigation']) {
      $node->content['forum_navigation']['#weight'] = -10;
    }
  }
}
31.10.2011 13:29
Аватар пользователя prost
prost написал:

я хорошо изучил .tpl.php-файлы и код линейки можно вставить не только в forum-topic-navigation.tpl.php. Речь веду об коде. например, в navigation.tpl вставляю html код линейки, отображается нормально, но без функции навигации. Вставляю Ваш кусок кода туда же, с заменой ИМЯМОДУЛЯ == forum, друпал просто отображает символы.
Возможно я не в тот файл вставил. или не так.
Не смогу найти кусок кода, который бы отвечал за линейку. Как он выглядит?

01.11.2011 10:14
Аватар пользователя Spleshka
Spleshka написал:

Вам этот код не в forum пихать надо, а в свой модуль. Кстати, решение под Друпал 6. Если у вас 7 версия - там явно другой будет выбор :)

01.11.2011 12:47
Аватар пользователя prost
prost написал:

y меня V.6
Если я правильно Вас понял, этот код нужно вставить в файл forum.module?

01.11.2011 18:18
Аватар пользователя Spleshka
Spleshka написал:

Нет, вам надо создать именно свой модуль, и уже туда пихать этот код.

01.11.2011 22:02
Аватар пользователя joker
joker написал:

Прошу еще одну подсказку. Хочу выводить ещё картинки. делаю так:

$result = db_query("SELECT shop_node.nid
     , shop_node.title
     , shop_files.filepath
    FROM
    shop_node
    INNER JOIN shop_content_field_image_cache
    ON shop_node.nid = shop_content_field_image_cache.nid
    INNER JOIN shop_files
    ON shop_content_field_image_cache.field_image_cache_fid = shop_files.fid
    WHERE
    shop_node.nid < %d
    AND shop_node.type = '%s'
    AND shop_node.status = 1
    ORDER BY
    shop_node.nid DESC
    LIMIT
    1",$nid,$ntype);
    while ($row = db_fetch_array($result)) {
      $outputstring .= "<div class='prevpost'>&laquo; " . l(t($row[title]),"node/".$row[nid], array(attributes => array('title'=> t($row[title])))) . "</div>" . $row[filepath];
    }

Но почему-то ни чего не выводится.

03.11.2011 08:28
Аватар пользователя Spleshka
Spleshka написал:

Надо смотреть базу данных, на вскидку не скажу почему не работает.

03.11.2011 14:07
Аватар пользователя joker
joker написал:

если руками прописать параметры в скрипт, то выдаёт.Может есть способ проще вывести превьюхи

03.11.2011 14:17
Аватар пользователя Spleshka
Spleshka написал:

Значит проверьте параметры, которые передаются в запорос.

Что именно вы выводите? Может проще настроить вьюс?

03.11.2011 14:20
Аватар пользователя joker
joker написал:

Через вьюху не получится. У меня node-product.tpl.php в который я хочу добавить пейджер (вперёд/назад), но для наглядности охота выводить превьюхи картинок товара.

03.11.2011 15:35

Комментировать