Як встановити свої уявлення для повернення 404 за допомогою Global: Null під контекстними фільтрами?


14

Стандартна поведінка Drupal полягає у передачі всіх аргументів, незалежно від того, запитували вони їх чи ні. Іноді така поведінка бажана. Однак мені потрібно повернути 404 за будь-що, крім рядка запиту.

Приклад проблеми http://drupal.org/project/modules http://drupal.org/project/modules/google.com <- Це має повернути 404; 200 дано. Дублювання змістового штрафу!

Модуль перегляду 404 передбачає, що за замовчуванням ви не хочете, щоб аргументи були передані. Однак не існує версії модуля D7.

Але на сторінці проекту написано, що 404 для перегляду також можна досягти, встановивши "Глобальне: нулеве" під "Аргументи".

Очевидно, що в D7 "аргументи" тепер є "контекстуальними фільтрами", але я не впевнений, які параметри додати до контекстного фільтра Global: null, щоб отримати бажаний результат.

Будь-яка допомога буде вдячна.

Відповіді:


22

У контекстних фільтрах виберіть Додати ; у діалоговому вікні, що з’явиться, виберіть Глобальний: Недоступний .

скріншот

Клацніть на Додати та налаштуйте контекстні фільтри .

У діалоговому вікні, що з’явиться далі, у наборі полі Коли доступне значення фільтра або встановлено за замовчуванням , встановіть прапорець Укажіть критерії перевірки , виберіть - Основна перевірка - для валідатора та виберіть Показувати "Сторінку не знайдено" для дії, яку потрібно здійснити, якщо значення фільтра не підтверджується . У наборі полі Додатково встановіть прапорець Fail basic validation, якщо вказано який-небудь аргумент .

скріншот

Я перевірив це на створеному мною "Статті", і він працює.

скріншот

скріншот

Аргумент "Global: Null" повинен бути останнім. Якщо вам потрібен ідентифікатор користувача, наприклад, спочатку ви додаєте його як аргумент, а потім додаєте аргумент "Global: Null".

Я змінив подання "Стаття", щоб прийняти ідентифікатор користувача як аргумент, який використовується для фільтрації списку вузлів статті. Перегляд все ще працює, оскільки він не приймає зайвих аргументів.

скріншот

скріншот


1
Це поверне помилку коду 403, а не 404. Виберіть варіант "Показати" Сторінку не знайдено "
Євген Фіделін

У темі DO я бачу, що хтось пропонує використовувати arg (1) == NULL; у валідаційному коді php. Це краще чи майже те саме?
Найджел Уотерс

1
@EugeneFidelin Я редагував "головний" дисплей, і не бачив опцію Показати "Сторінку не знайдено" . Я виправив свою відповідь.
kiamlaluno

@NigelWaters Забудьте попередню відповідь. :)Я редагував неправильний дисплей, і подання не працювало як слід. Немає необхідності використовувати код PHP для перевірки аргументу; див. оновлену відповідь.
kiamlaluno

У мене ще недостатньо балів для коментарів - тому розміщую тут, щоб сказати спасибі @kiamlaluno. Чудово працює, і щось я на якийсь час бив головою.
Блакитні води

1

Це можна зробити, використовуючи представлення поза функцією вікна. У кожному налаштуванні контекстного фільтра ви можете побачити прапорець "Вказати критерії перевірки", щоб побачити більше налаштувань.

Потім ви можете вибрати "валідатор" на основі ваших умов перегляду. Якщо ви хочете виконати спеціальну перевірку, виберіть php-код. Поверніть у PHP код True або False на основі ваших умов перевірки.

Нарешті виберіть "Дія, яку потрібно здійснити", оскільки доступ до Медійної мережі відхилений! Дивіться нижче скріншот контекстуального фільтра NID.

введіть тут опис зображення


Що таке PHP-код, який я додаю?
Найджел Уотерс

Я використовую лише контекстний фільтр Global: null
Найджел Вотерс

3
НІКОЛИ НЕ ВИКОРИСТОВУЙТЕ PHP-КОДУ В ОГЛЯДАХ АБО ЯКІ-небудь ІНШИМ ІНСТРУМЕНТІ UI !!!
хугронафор
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.