2017-09-28 1 views
0

現在ログインしているユーザーのIDをコンテキストフィルタとして使用するビューがあります。これはDrupal UIを使用して設定され、うまく機能します。次に、自分のサイトのすべてのビューに別のパラメータ(特定のノードID)を追加するカスタムモジュールを作成しました。すべてのビューにはこの2番目のパラメータが必要です(プログラムで追加する必要があります)。この方法は、プログラムで追加されたパラメータのみをコンテキストフィルタとして使用するすべてのビューで有効です。しかし、2つのフィルタ値を必要とするビューは動作しません。なぜなら、私はargs配列内のパラメータの順序を正しく処理しないと思うからです。すでにフィルタ値を使用しているビューを設定するにはどうすればよいですか?もっとプログラムを追加する必要があります($ args [0]を設定しますが、これは問題だと思います)。既にコンテキストフィルタを使用しているビューに引数をプログラムで追加する

URLにこれらのフィルタが表示されないようにする必要があります。

testmod.module:

function testmod_views_pre_view($view, $display_id, array &$args) { 
    ... 
    $args[0] = $value; 
} 

私はちょうどビューの$ argの配列を読んで、プログラム的に私の特別な引数を追加することができると思ったが、コンテキストフィルタとしてログインしたユーザーを使用してビューのための私がprint_r($args)を印刷すると、ビューは正しく動作していますが(現在のユーザーの結果のみを表示します)、空の配列になります。 UI経由で設定したコンテキストフィルタは、$ args以外の場所に格納されていますか?

1.と2.のフィルター値を正しく使用する方法をビューに伝えるには、何が必要ですか?私はここで少し失われています。

編集:私はhook_views_pre_view()が(その時点であなただけのURLを経由して渡され、その配列で引数を参照します)引数配列の文脈フィルタを見つけることは時期尚早であることを読みました。私は何をしたいのですか?

答えて

0

私は今、より良い理解と解決策を見つけました。 hook_views_pre_view()は実際にはURLを介してビューに渡されない引数を見るには時期尚早です。なぜ私の場合、$ view-> argsが空であったのかが分かります。 hook_views_post_build()には、すべての引数(URL + nonURL)がビューに渡されています。しかし、私の問題を解決する方法は、hook_views_pre_viewにまだ$args[0] = $value;を使用しています。つまり、すべてのビューに渡される最初の引数は常に$valueになります。追加の引数を使用しているビューの場合、Drupalはそれらを後で$argsに追加します。私の特殊なケースでは、必ずしも最初の引数が必要ではないかもしれないビューがあるので、コンテキストフィルタの値を無視できるようにするコンテキストフィルタGlobal: Null(最初の位置に)を追加する必要がありました(デフォルトでは0)。このようにして、ビューに最初の引数を使用する必要があるかどうかにかかわらず、各ビューに正しい数のコンテキストフィルタがあり、順序は正しいです。 if()ステートメントのビューを除外し、新しいビューがあるときに常にモジュールコードを変更する必要がない場合は、Global: Nullダミーフィルタを追加するほうが簡単です後で追加されます。

関連する問題