如何在产品更多信息页面中进行页面导航

时间:2014-02-14 09:51:13

标签: drupal e-commerce pager

我将Drupal 7与Commerce模块一起使用,并使产品更多信息页面链接到上一个/下一个产品和产品类别中的其他页面。

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

产品预览/宣布位于类别页面。

使用寻呼机和每页数字项目等于1的视图页面很容易。但是如何从产品预览页面跳转到正确的产品更多信息?在这种情况下,需要导航到寻呼机中的特定页码。怎么可能?或者可能存在更合适的方式来解决它的任务。

在Pager API中,我找到了唯一的函数pager_find_page,它甚至不是pager_set_page的线索。也许是因为它以某种方式在某处被描述,但我找不到任何方式。

1 个答案:

答案 0 :(得分: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启用视图和上下文过滤器创建视图的原因,它通过传递当前页面节点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 尚未初始化。这对我来说听起来很原生。

谢谢你纠正我的错误,我很抱歉我的英语不好。