编程语言
首页 > 编程语言> > php – Drupal 6次浏览2:设置日期参数

php – Drupal 6次浏览2:设置日期参数

作者:互联网

传递uid作为参数可以正常使用此代码:

$bouts = views_get_view_result('Results', 'page_1', array($user->uid));

设置参数的views_get_view_result中的关键行是:

$view->set_arguments($args);

但是通过日期范围怎么样?

此外,如果某个内容被指定为视图上的过滤器,是否有一种方法可以按顺序改变它?

views_get_view_result:

/**
* Investigate the result of a view.
* from Drupal.org. 
*
* @param string $viewname
*      The name of the view to retrieve the data from.
* @param string $display_id
*      The display id. On the edit page for the view in question, you'll find
*      a list of displays at the left side of the control area. "Defaults"
*      will be at the top of that list. Hover your cursor over the name of the
*      display you want to use. A URL will appear in the status bar of your
*      browser. This is usually at the bottom of the window, in the chrome.
*      Everything after #views-tab- is the display ID, e.g. page_1.
* @param array $args
*      Array of arguments. (no keys, just args)
* @return
*      array
*          An array containing an object for each view item.
*      string
*          If the view is not found a message is returned.
*/
function views_get_view_result($viewname, $display_id = NULL, $args = NULL) {
  $view = views_get_view($viewname);
  if (is_object($view)) {
    if (is_array($args)) {
      $view->set_arguments($args);
    }
    if (is_string($display_id)) {
      $view->set_display($display_id);
    }
    else {
      $view->init_display();
    }
    $view->pre_execute();
    $view->execute();
/*  print "<pre> $viewname: $display_id";
    print_r(get_class_methods($view));  */
    return $view->result;
  }
  else {
    return t('View %viewname not found.', array('%viewname' => $viewname));
  }
}

解决方法:

至于传递数据范围和给定的已发布函数定义,只有在视图将它们作为参数接受时,才能将日期范围传递给它.我不是100%肯定,但afaik日期范围只能定义为过滤器,而不是参数,这导致您的第二个问题:

考虑到相当复杂的视图对象/数组mashup结构,以编程方式更改视图过滤器设置是可能的,但有点混乱.在上面的发布函数中,第一行是

$view = views_get_view($viewname);

之后,$view包含整个视图对象.过滤器设置是按显示器定义的,因此假设您的视图只有默认显示,您将在下面找到过滤器设置

$view->display['default']->display_options['filters']

(注意对象/数组表示法混合 – 显示是一个类型为views_display的包含对象)

‘filters’数组每个过滤器包含一个条目,具有不同的元素,具体取决于过滤器类型.为了您的目的,我建议使用预先配置/硬编码的值创建一个只有您感兴趣的过滤器的虚拟视图.使用调试器(或var_dump / print_r),您可以在创建视图后查看过滤器数组.根据您的发现,您应该能够推断出如何注入自定义日期范围.

免责声明:在这个视图中探讨这有点烦人而且没有效果,但它确实有效.到目前为止,我还没有找到一个简明的Views2文档,可以直接解释内部问题,因为我发现official API documentation在代码中的使用方面有点缺乏. (当然这可能只是我变得愚蠢;)

标签:php,arguments,views,drupal-6
来源: https://codeday.me/bug/20191007/1864601.html