2014-02-14 5 views
0

Я использую Drupal 7 с модулем Commerce и создавая более подробную информацию о продуктах со ссылками на предыдущие/следующие продукты и другие страницы в категории продуктов.Как сделать страничную навигацию в продуктах подробнее info

http://postimg.org/image/8rbcsyye3/

продукты Просмотр/анонсировать находится на странице категории.

Это легко сделать как просмотр страницы с пейджером и номером на странице равным 1. Но как я могу перейти с страницы предварительного просмотра продукта на продукт более точно? В этом случае необходимо перейти к определенному номеру страницы в пейджере. Как это возможно? или может быть более подходящим способом решения его задачи.

В Pager API я нашел единственную функцию pager_find_page, это даже не ключ к pager_set_page. Может быть, потому, что это где-то описано где-то, но я никак не могу найти его.

ответ

0

Ответить на свой вопрос. Solution for Drupal 5/6 (не уверен, что версия)

Некоторые другие полезны информация https://drupal.stackexchange.com/questions/1561/is-it-possible-to-dynamically-set-views-pager-settings

https://drupal.stackexchange.com/questions/16046/alter-pagination-start-index

После смешивания этой информации я написал простое решение для Drupal 7.

Когда пользователь собирается узел продукта он может перейти к любому другому продукту в текущей категории. Вот почему я создаю представление с включенным ajax и контекстным фильтром, который возвращает идентификаторы всех узлов из одной и той же категории продуктов, передавая текущий идентификатор узла страницы.

$n_id = intval(arg(1)); 
$nnm = db_query("select t.nid from {taxonomy_index} t left join {node} n on n.nid = t.nid where t.tid = (select t2.tid from {taxonomy_index} t2 where t2.nid = :vid) order by n.title", array(':vid' => $n_id)); 
$res= array(); 
if ($nnm->rowCount()) { 
foreach ($nnm as $row) $res[]= $row->nid; 
$handler->argument= implode('+', $res); 
return true; 
} else { 
return false; 
} 

В пользовательском модуле для моих продуктов полного просмотр информации я добавил hook_views_query_alter. Только в hook_alter hook $ view-> query-> где доступны параметры и $ view-> query-pager еще не определен. Это означает, что нет необходимости переписывать значение по умолчанию для пейджера-> current_page и номера продуктов категории являются доступными.

function [modulename]_views_query_alter(&$view) { 
//$_GET['wtf'] -- variable to check first view load 
    if ($view->name == "view_name" && $view->current_display == 'view_display' && !isset($_GET['wtf'])) { 
     //Search current node id ($view->args[0]) in all category's nodes 
     $res= array_search($view->args[0], $view->query->where[0]['conditions'][0]['value'][':node_nid']); 
     if ($res) { 
      //$view->set_current_page($res); 
      //Set page id for pager 
      $_GET['page']= $res; 
     } 
     $_GET['wtf']= 2; 
    } 
} 

Странно, что нет никакого упоминания о таком способе обеспечить pager-> current_page значения. В отличие от пейджер-> set_current_page метод может устанавливать значение страницы при любых просмотрах, даже если $ view-> pager не был инициализирован. Для меня это звучит довольно оригинально.

И спасибо за исправление моих ошибок, извините за мой плохой английский.