Drupal 7、ビュー3とNode参照モジュールを使用して、カスタムコンテンツタイプのノード参照フィールドにデータを入力するためにビューを使用しています。 「参照」表示タイプのビューです。)
このビューをフィルタリングして、ユーザーが選択できるようにします(ユーザーが選択できるようにします)。
フィルター1と2は常に必須です。次に、フィルター3 OR 4も必須である必要があります。フィルターをフィルターグループに再配置してこれを機能させることができます。問題は、フィルター4を構築する方法が見つからないことです。
フィルター3の場合、タイプ「コンテンツ:作成者」の関係を取り込む必要があり、フィルター3に使用した「ユーザー:現在」(ノード作成者==現在のユーザー)など、多くの新しいフィルターが表示されました。
フィルター4については、現在のser(not作成者)の役割に基づいてフィルタリングする必要があり、その方法を見つけることができません。
フィルターリストでは、新しい「ユーザー:ロール」フィルターを使用できますが、これは「コンテンツ:作成者」の関係のみを参照するため、ノード作成者のロールのみをチェックします。それは私が必要とするものではありません:current userのロールを確認する必要があります。
現在のユーザーデータ( "User:current"など)を取り込むために新しいリレーションシップを追加し、そのデータをフィルター処理する必要があると思いますが、[リレーションシップの追加]画面でそれを見つけることができません。
それを行う方法はありますか?
@ Jimajammaの提案 に続いて、これが私が使用したものです。私は彼のコードをDrupal 7に少し適合させ、管理者以外のロールが結果にフルアクセスできるようにしました。
ビューで、_Author: Uid
_にコンテキストフィルターを追加し、次の設定を使用します。
フィルター値IS使用不可の場合:
次のコードを使用します。
_global $user;
if (
in_array('administrator', $user->roles) ||
in_array('editor', $user->roles)
)
{return -1;}
else
{return $user->uid;}
_
フィルター値IS AVAILABLE OR A DEFAULT IS PROVIDED
次のコードを使用します。
_if ($argument == -1)
{return FALSE;}
else
{return TRUE;}
_
以上です!
ノート:
私の初期設定と比較して、関係(_Content: Author
_)はもう必要ありません。どちらも「著者」フィルターではありません(とにかく関係によって持ち込まれたものです)。
どうやら、Drupal 6の場合、最初のPHPスニペットの条件はif (in_array('super user', array_values($user->roles)))
である必要があります。
現在ログインしているユーザーに基づいてフィルタリングするには、Contextual Filterを追加する必要があります。
また、ページ設定:アクセス>ロールで構成された特定のロールのすべてのノードを表示するには、新しいビュー表示を複製する必要があります。次に、管理者と、すべてのノードを表示する必要があるその他の役割を選択します。
OR並べ替えのようなフィルターは使用できません。フィルター処理されたコンテンツとすべてのコンテンツで2つの異なる方法でビューを表示するため、このビューの2つの表示を作成します。