我将Drupal 7与Commerce模块一起使用,并使产品更多信息页面链接到上一个/下一个产品和产品类别中的其他页面。
http://postimg.org/image/8rbcsyye3/
产品预览/宣布位于类别页面。
使用寻呼机和每页数字项目等于1的视图页面很容易。但是如何从产品预览页面跳转到正确的产品更多信息?在这种情况下,需要导航到寻呼机中的特定页码。怎么可能?或者可能存在更合适的方式来解决它的任务。
在Pager API中,我找到了唯一的函数pager_find_page
,它甚至不是pager_set_page
的线索。也许是因为它以某种方式在某处被描述,但我找不到任何方式。
答案 0 :(得分:0)
回答自己的问题。 Solution for Drupal 5/6 (不确定版本)
https://drupal.stackexchange.com/questions/16046/alter-pagination-start-index
在混合了这些信息后,我为Drupal 7编写了简单的解决方案。
当用户访问产品节点时,他可以跳转到当前类别中的任何其他产品。 这就是我使用ajax启用视图和上下文过滤器创建视图的原因,它通过传递当前页面节点ID来从同一产品类别返回所有节点ID。
$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 。 仅在query_alter hook $ view-> query->其中参数可用且 $ view-> query-pager 尚未定义。这意味着无需重写 pager-> current_page 的默认值,并且产品类别的nids是可用的。
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 值的方法。 与 pager-> set_current_page 方法不同,它可以在任何视图挂钩处设置页面值,即使 $ view-> pager 尚未初始化。这对我来说听起来很原生。
谢谢你纠正我的错误,我很抱歉我的英语不好。