【问题标题】:Setting a drupal view to a random page number将drupal视图设置为随机页码
【发布时间】:2010-09-20 13:59:54
【问题描述】:

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

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

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

谢谢

可能的解决方案:

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

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

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

【问题讨论】:

    标签: drupal drupal-views


    【解决方案1】:

    我不知道如何从视图 UI 中执行此操作,但您应该能够使用 the views module hooks 之一来实现此目的,在这种情况下可能是 hook_views_pre_execute。不幸的是,这些文档实际上并不存在,因此您需要在自定义模块中实现挂钩并通过调试器(或 print、var_dump 等语句)检查传入的视图对象。

    您应该寻找$view->pager['current_page'],您可以将其设置为随机页面。不幸的是,如果我正确阅读了代码,此时尚未运行确定可能页数的计数查询,因此您要么必须使用“最佳猜测”,要么想出不同的方法来确定选择合适的范围...

    注意:这绝不是一个“权威”的答案——只是我开始寻找的一个指针,因为到目前为止没有其他人回答过这个问题。我很可能会错过一个更明显/更简单的解决方案:/

    【讨论】:

    • 嘿!我使用了 view_pre_execute 钩子并使用了这个: $view->query->pager->set_current_page();我使用我知道视图将具有的范围将其设置为随机。我不确定我能否获得视图中的确切页数。感谢您的帮助:)
    【解决方案2】:

    另一种选择是随机化视图中的条目。因此,您的页面将始终是第 1 页,但它实现了您的目标,即每次在您的网站上看到不同的东西。

    在您的排序标准中(在全局组中)添加 全局:随机 -- 随机化显示顺序。

    (灵感来自http://mydrupal.com/random_node_or_front_page_in_drupal_like_stumbleupon 的建议)

    【讨论】:

    • 我确实知道这个,但我真的只想随机化选定的页面视图而不是视图本身
    • +1 是一个不错的选择(即使它不符合 OP 的确切要求 - 也可以;)
    【解决方案3】:

    我刚刚创建了一个自定义寻呼机,它会自动转到最后一页,我认为这与您正在尝试做的事情有关:

    在 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
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多