我安装了视图2,并且我创建了一个显示在首页的视图。
视图显示一些页面链接(1 | 2 | 3 | 4 | ...等)。我想知道是否可以让视图从随机页面开始,而不是始终从第1页开始。
注意:我不想随机化显示我真的只想随机化它加载的页面。
由于
可能的解决方案:
在views_pre_execute钩子中我使用了这个:
$view->query->pager->set_current_page([random value]);
我不确定此时我是否可以确定寻呼机中的总页数但是我将继续调查(钩子中给出的$ view对象有大量属性与数组和其他对象,这使得复杂)
答案 0 :(得分:2)
我不知道如何从Views UI中执行此操作,但您应该能够使用the views module hooks之一来实现此目的,在这种情况下可能是hook_views_pre_execute
。遗憾的是,这些文档几乎不存在,因此您需要在自定义模块中实现钩子并通过调试器(或print,var_dump等语句)检查传入的视图对象。
您应该查找$view->pager['current_page']
,您可以将其设置为随机页面。不幸的是,如果我正确读取代码,那么确定可能的页数的计数查询此时尚未运行,因此您要么必须使用“最佳猜测”,要么采用不同的方法来确定适当的范围可供选择...
注意:这绝不是一个'权威'的答案 - 只是一个我开始寻找的指针,因为到目前为止还没有其他人回答这个问题。我可能会错过一个更明显/更简单的解决方案:/
答案 1 :(得分:2)
另一种选择是随机化视图中的条目。因此,您的页面将永远是第1页,但它实现了您的目标,即每次在您的网站上看到不同的内容。
在您的排序条件中(在全局组中)添加 全局:随机 - 随机显示显示顺序。
(灵感来自http://mydrupal.com/random_node_or_front_page_in_drupal_like_stumbleupon的建议)
答案 2 :(得分:1)
我刚刚创建了一个自动转到最后一页的自定义寻呼机,我认为它与您尝试做的事情有关:
在project.info中:
files[] = plugins/views_plugin_pager_last.inc
在project.module中:
function cvoxm_views_plugins(){
return array(
'pager' => array(
'last' => array(
'title' => t('Paged output, full pager and last by default'),
'short title' => t('Full & Last'),
'help' => t('Paged output, full Drupal style and last by default'),
'handler' => 'views_plugin_pager_last',
'help topic' => 'pager-last',
'uses options' => TRUE,
),
)
);
}
plugins / views_plugin_pager_last.inc的内容是:
class views_plugin_pager_last extends views_plugin_pager_full {
function pre_execute(&$query) {
if(!isset($_GET['page'])){ // TODO: Should use pager_id
// Go to last page
$this->set_current_page($this->get_total_items() / $this->get_items_per_page() - 1 );
$this->query(); // Rebuild query
$this->update_page_info(); // Update info
}
}
}