Wie stelle ich meine Ansichten so ein, dass sie unter Verwendung von Global: Null unter Kontextfiltern einen 404-Wert zurückgeben?

14

Das Standardverhalten von Drupal besteht darin, alle Argumente durchzuleiten, unabhängig davon, ob sie angefordert wurden oder nicht. Manchmal ist dieses Verhalten erwünscht. Ich muss jedoch eine 404 für alles andere als eine Abfragezeichenfolge zurückgeben.

Beispiel für das Problem http://drupal.org/project/modules http://drupal.org/project/modules/google.com <- Dies sollte eine 404 zurückgeben. 200 gegeben. Strafe für doppelten Inhalt!

Die Ansichten 404 Modul geht davon aus, dass Sie standardmäßig nicht wollen Argumente durchlaufen. Es gibt jedoch keine D7-Version des Moduls.

Die Projektseite besagt jedoch, dass 404-Werte für Ansichten auch erzielt werden können, indem Global: Null unter Argumente festgelegt wird.

Offensichtlich sind in D7 "Argumente" jetzt "Kontextfilter", aber ich bin nicht sicher, welche Einstellungen zum Kontextfilter "Global: null" hinzugefügt werden müssen, um das gewünschte Ergebnis zu erzielen.

Jede Hilfe wäre dankbar.

Nigel Waters
quelle

Antworten:

22

In Kontext - bezogene Filter wählen Add ; in dem Dialogfeld , das angezeigt wird , wählen Sie Global: Null .

Bildschirmfoto

Klicken Sie auf Hinzufügen und konfigurieren Sie Kontextfilter .

Im Dialogfeld , das nächste, in der Fieldset erscheinen Wenn der Filterwert zur Verfügung oder ein Standard ist vorgesehen , überprüfen Validierungskriterien angeben , wählen Sie - Grund Validierung - für Validator , und wählen Sie Show „Seite nicht gefunden“ für Aktion , wenn die zu übernehmen Filterwert wird nicht validiert . Aktivieren Sie im Feld Set More das Kontrollkästchen Fail basic validation, wenn ein Argument angegeben ist .

Bildschirmfoto

Ich habe es mit einer von mir erstellten Ansicht "Artikel" getestet, und es funktioniert.

Bildschirmfoto

Bildschirmfoto

Das Argument "Global: Null" muss das letzte sein. Wenn Sie beispielsweise eine Benutzer-ID benötigen, fügen Sie diese zuerst als Argument und dann als Argument "Global: Null" hinzu.

Ich habe die Ansicht "Artikel" geändert, um eine Benutzer-ID als Argument zu akzeptieren, mit der die Liste der Artikelknoten gefiltert wird. Die Ansicht funktioniert weiterhin, da kein zusätzliches Argument akzeptiert wird.

Bildschirmfoto

Bildschirmfoto

kiamlaluno
quelle
1
Dies wird 403 nicht 404 Codefehler zurückgeben. Wählen Sie stattdessen die Option "Seite nicht gefunden
anzeigen
In einem Thread zu DO sehe ich jemanden, der vorschlägt, arg (1) == NULL zu verwenden. im PHP-Code validieren. Ist das besser oder so ziemlich dasselbe?
Nigel Waters
1
@EugeneFidelin Ich habe die "Master" -Anzeige bearbeitet und die Option "Seite nicht gefunden" nicht angezeigt . Ich habe meine Antwort korrigiert.
kiamlaluno
@NigelWaters Vergiss meine vorherige Antwort. :)Ich habe die falsche Anzeige bearbeitet, und die Ansicht hat nicht wie gewünscht funktioniert. Es ist nicht erforderlich, PHP-Code zur Validierung des Arguments zu verwenden. Siehe die aktualisierte Antwort.
kiamlaluno
Ich habe noch nicht genug Punkte, um sie zu kommentieren - also poste hier, um mich bei @kiamlaluno zu bedanken. Funktioniert großartig und etwas, gegen das ich eine Weile meinen Kopf geschlagen habe.
Blue Waters
1

Sie können dies mithilfe der sofort einsatzbereiten Funktionen tun. In jeder kontextbezogenen Filtereinstellung wird ein Kontrollkästchen "Validierungskriterien angeben" angezeigt. Aktivieren Sie dieses Kontrollkästchen, um weitere Einstellungen anzuzeigen.

Dann können Sie "Validator" basierend auf Ihren Ansichtsbedingungen auswählen. Wenn Sie eine benutzerdefinierte Validierung durchführen möchten, wählen Sie den PHP-Code aus. Geben Sie True oder False im PHP-Code basierend auf Ihren Validierungsbedingungen zurück.

Schließlich wählen Sie "Aktion ausführen" als Zugriff verweigert! Der Screenshot unten zeigt den Kontextfilter für nid.

Bildbeschreibung hier eingeben

Anil Sagar
quelle
Was ist der PHP-Code, den ich hinzufüge?
Nigel Waters
Ich verwende nur den Kontextfilter Global: null
Nigel Waters
3
NIEMALS PHP-CODE IN ANSICHTEN ODER ANDEREN UI-TOOLS VERWENDEN !!!
Hugronaphor