1

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));
  }
}
4

2 に答える 2

1

データ範囲を渡すことに関しては、投稿された関数定義が与えられた場合、ビューがそれらを引数として受け入れる場合にのみ、日付範囲をそれに渡すことができます。100%確信はありませんが、日付範囲は引数としてではなくフィルターとしてのみ定義できるため、2番目の質問につながります。

ビュー フィルタの設定をプログラムで変更することは可能ですが、ビュー オブジェクトと配列のマッシュアップ構造がかなり複雑であるため、少し面倒です。上記の投稿された関数では、最初の行は

$view = views_get_view($viewname);

その後、$view にはビュー オブジェクト全体が含まれます。フィルタ設定はディスプレイごとに定義されるため、デフォルト ディスプレイのみのビューがあると仮定すると、フィルタ設定は次の場所にあります。

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

(オブジェクト/配列表記が混在していることに注意してください - 表示は、views_display 型の含まれるオブジェクトです)

'filters' 配列には、フィルターごとに 1 つのエントリが含まれ、フィルターの種類によって要素が異なります。あなたの目的のために、事前に構成された/ハードコードされた値で、興味のあるフィルターだけでダミービューを作成することをお勧めします。デバッガー (またはvar_dump/ print_r) を使用すると、ビューの作成後にフィルター配列を確認できます。そこにあるものから、カスタムの日付範囲を挿入する方法を推測できるはずです。


免責事項:このようにビューをいじるのは少し面倒で効果的ではありませんが、うまくいきます. コードからの使用法に関して公式の API ドキュメントが少し不足しているため、内部を簡単に説明する Views2 の簡潔なドキュメントをまだ見つけていません。(もちろん、これは私が愚かであるだけかもしれません;)

于 2009-08-23T18:17:49.260 に答える
0

ビュー 2 を使用している場合は、GUI を使用して日付引数を追加できます。次に、URL に次のように記述できます。

www.yousite.com/yourview/startDate--finishDate

startDate/finishDate の形式は YYYY-MM-DD-HH です。

GL!

于 2011-01-27T19:20:18.763 に答える