ビューのコンテキストフィルターはどのように機能しますか?


9

私は再びコンテキストフィルターに頭を回そうとしています!しばらく使っていましたが、またまた困惑しました。これが私がやろうとしていることです:

  1. このクローンページに挿入された分類用語を使用して、クローンコンテンツノードページを生成します。

例:EXAMPLE.com/white-shoes/blue

ユーザーが/ white-shoesページに到達すると、白色に向けられた元のノードページが表示されます。ここで、ユーザーが/ white-shoes / blueに到達すると、同じノードページが表示されますが、今回はすべてのボディコンテンツが書き直され、白色が青色に置き換えられます。

ビュー私はのパスでページ表示を作成する必要があります:%/%

次に、nidを取得するためのコンテキストフィルターを作成します。Content:nidをコンテキストフィルターとして追加します。PROVIDE A DEFAULT VALUEを選択し、次のPHPコードを入力します。

$ x = drupal_lookup_path( 'source'、arg(0));

$ y = explode( '/'、$ x);

$ y 1を返します。

このPHPコードは基本的に、URLの/ white-shoes部分をNIDに変換します。しかし、それは機能しません。端末を介してdrush evでコードをテストし、実際に結果が返されたので、動作することを確認しました。

分類用語の名前についても同じことを行い、そのためのコンテキストフィルターも追加します。私が選ぶこの時間は、DEFAULT値を指定すると、選択されたURLからRAW VALUEをし、第二引数を選択します。

ここに画像の説明を入力してください

ご覧のとおり、コンテキストフィルターのプレビュー値を入力すると、AAA / BBB / CCCになります。デフォルト値は無視されます。2番目の引数を取得することになっていますが、1番目のみを取得しています。SQLステートメントのWHEREを見ると、BBBであるはずのときにAAAを取得していることがわかります。

ここに画像の説明を入力してください

だから問題は何が間違っているのですか、または私が達成したいことにもっと良い解決策がありますか?


これは愚かに聞こえますが、もう少し詳しく説明してもらえますか?私はあなたが何をしようとしているのか、もっとそれをどのようにしようとしているのかについて少し理解しています。Raw値またはProvide defaultを使用する代わりに、URLのコンテンツIDを使用します。これでNIDが提供されます。
kyletaylored 2013

こんにちは、URLに着陸したため、コンテンツIDはありません。したがって、取得するコンテンツIDはありません... URLの最初の引数を解析してから、そのURLをNIDパスに変換する必要があります。
Patoshiパトシ

回答:


2

以下は、ビデオとその使用方法を説明する関連記事です。この例では、ペット(犬、猫)を使用しています。これは、ビューコンテキストフィルターの使用方法を理解するのに役立つ単純な例です。

ビデオ: https : //www.youtube.com/watch?v =lJFMTDuaxy8(YouTubeビデオの短いURL:lJFMTDuaxy8)

記事: http : //www.metaltoad.com/blog/using-drupal-contextual-filters-views


5

Contextual Filterを使用して、URL引数でビューの出力をフィルタリングします。また、uは次の形式で引数を手動で渡すことができます。

<?php print views_embed_view($name,$display_id,$arg1,$arg2,$arg3); ?>

ここで、 "$ name"はビューの名前(例: 'example_view')で、 '$ display_id'はビューの表示タイプ(例: 'default')であり、 "$ arg1、$ arg2、$ arg3"は引数ですURLと同じように。

URL引数の構造は次のとおりです。

http://example.com/arg_1/arg_2/arg_3(arg_2にはパスコンポーネント2(ビュー設定ページ内)があります)。

フィルター値が使用できない場合:

それはdrupalがフィルターを見つけられないことを意味します。

デフォルト値を提供します。

フィルター値が使用できない場合、このオプションを使用してビュー出力用のフィルターを作成できます。このフィルターはPHPコード(PHPフィルターモジュールが有効な場合)、またはURL引数から値を取得できます->(生の値URLから)。例外テキストボックスでは、値をだましてすべての結果を表示できます。

フィルター値が利用可能な場合

この場合、drupalがフィルター値を見つけることができるときに、必要に応じて検証を行い、他のいくつかのオプションを実行します。


与えられたviews_embed_view()関数。それを/ white-shoes / blueのサブパスにどのようにロードしますか?/ blueはビューによって生成されたものとして存在しないことに注意してください。ユーザーが/ blueパスに到達すると、最初の引数を解析し、そのエイリアスのNIDをフェッチしてから、そのコンテンツをロードします。コンテキストフィルターの問題は、フィルター値が使用可能な場合にPHP値を提供する方法がないことです。
Patoshiパトシ

@duckx、フィルターが利用可能な場合にPHP値を提供するための優れたオプションがあります- VALIDATION (type: PHP Code)。このオプションを使用すると、ビューオブジェクトを使用して、必要なすべてを実行できます。あなたの場合/blue、ビューによって生成されたパスは、そのエイリアスのノードIDを取得するためにも使用されます。
Jack-PL
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.