コンテキストフィルターでGlobal:Nullを使用して404を返すようにビューを設定するにはどうすればよいですか?


14

標準のDrupalの動作は、要求されたかどうかにかかわらず、すべての引数を通過させることです。この動作が望ましい場合があります。ただし、クエリ文字列以外の場合は404を返す必要があります。

問題の例 http://drupal.org/project/modules http://drupal.org/project/modules/google.com <-これは404を返すはずです。与えられた200。重複コンテンツのペナルティ!

ビュー404モジュールは、デフォルトでは、あなたが通過した引数を望んでいないことを前提としています。ただし、モジュールのD7バージョンはありません。

しかし、プロジェクトページには、ビューの404も、[引数]の下に[グローバル:ヌル]を設定することで実現できると書かれています。

D7では明らかに「引数」が「コンテキストフィルター」になりましたが、希望する結果を得るためにGlobal:nullコンテキストフィルターに追加する設定は不明です。

任意の助けをいただければ幸いです。

回答:


22

コンテキストフィルタを選択し[追加]を。表示されるダイアログボックスで、[ Global:Null ]を選択します。

スクリーンショット

[ 追加]をクリックして、コンテキストフィルターを構成します

フィールドセットで、横に表示されるダイアログボックスで、フィルタ値が入手可能であるか、またはデフォルトが提供されている場合、チェック検証基準を指定し、選択-基本的な検証を-のためのバリデータ、および選択し、「ページが見つかりません」の表示をするためにアクションがあれば取りますフィルター値は検証されません。フィールドセットMoreで引数が指定されている場合は[基本的な検証に失敗する]をオンにします。

スクリーンショット

私が作成した「記事」ビューでテストしましたが、動作します。

スクリーンショット

スクリーンショット

「Global:Null」引数は最後のものでなければなりません。たとえば、ユーザーIDが必要な場合は、最初にそれを引数として追加し、次に「Global:Null」引数を追加します。

アーティクルノードのリストをフィルター処理するために使用される引数としてユーザーIDを受け入れるように、「アーティクル」ビューを変更しました。追加の引数を受け入れないため、ビューは引き続き機能します。

スクリーンショット

スクリーンショット


1
これは、404コードエラーではなく403を返します。代わりに「ページが見つかりません」オプションを表示するを選択してください
Eugene Fidelin

DOのスレッドで、誰かがarg(1)== NULLの使用を提案しています。PHPの検証コード。これは良いですか、ほとんど同じですか?
ナイジェルウォーターズ

1
@EugeneFidelin「マスター」ディスプレイを編集していましたが「ページが見つかりません」というオプションが表示されませんでした。答えを修正しました。
kiamlaluno

@NigelWaters以前の答えを忘れてください。:)間違った表示を編集していましたが、ビューが正常に機能していませんでした。引数を検証するためにPHPコードを使用する必要はありません。更新された回答を参照してください。
キアムルノ

私はまだコメントするのに十分なポイントがありません-@kiamlalunoに感謝するためにここに投稿してください。うまく機能し、しばらく頭を痛めていました。
ブルーウォーターズ

1

すぐに使用できる機能を使用して、これを行うことができます。すべてのコンテキストフィルター設定で、[検証条件を指定]チェックボックスを表示して、さらに設定を確認できます。

次に、表示条件に基づいて「バリデータ」を選択できます。カスタム検証を行う場合は、PHPコードを選択します。検証条件に基づいて、PHPコードでTrueまたはFalseを返します。

最後に、表示アクセス拒否として[実行するアクション]を選択します。nidコンテキストフィルターのスクリーンショットを参照してください。

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


追加するphpコードは何ですか?
ナイジェルウォーターズ

私は唯一のグローバルを使用しています:ヌルコンテキストフィルタ
ナイジェル・ウォーターズ

3
ビューや他のUIツールでPHPコードを使用しないでください!!!
hugronaphor
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.