将drupal视图设置为随机页码

时间:2010-09-20 13:59:55

标签: drupal drupal-views

我安装了视图2,并且我创建了一个显示在首页的视图。

视图显示一些页面链接(1 | 2 | 3 | 4 | ...等)。我想知道是否可以让视图从随机页面开始,而不是始终从第1页开始。

注意:我不想随机化显示我真的只想随机化它加载的页面。

由于

可能的解决方案:

在views_pre_execute钩子中我使用了这个:

$view->query->pager->set_current_page([random value]);

我不确定此时我是否可以确定寻呼机中的总页数但是我将继续调查(钩子中给出的$ view对象有大量属性与数组和其他对象,这使得复杂)

3 个答案:

答案 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
    }
  }
}