Use the ID whenever you can

Drupal: Фильтры во Views — что может быть проще?

Доктор Зло как бы намекает. Работая над последним проектом я пришёл к тому, что далеко не всем очевидно почему не стоит использовать id повсеместно. А лучше вообще нигде не использовать. Сейчас расскажу почему.

Как мы обычно используем Views? Ну к примеру клиенту нужно чтобы на главной странице были посты из категории новостей, а в сайдбаре из категории обзоров. Обычно это выглядит как-то так: добавляем таксономию

add-categories-vocabulary

дальше пару наших категорийadd-news-and-reviews

и создаем вьюху где в фильтрах указываем News views-with-news

Все легко и просто, казалось бы, что может пойти не так?

Ну начну с того, что когда добавляешь фильтр по термину, то фактически контент фильтруется по id термина, а это то же самое что использовать магические цифры в коде. На самом деле это не так страшно для обычных сайтов с коротким циклом разработки и с незначительной поддержкой, но для проектов по-больше это вызывает трудности. Даже если запретить клиенту удалять категорию с новостями, то при работе с несколькими окружениями, или используя подход где в git отдельная ветка под каждую задачу, получится так, что id в продакшине будет отличаться от id в dev, а фичи, или конфигурации, cохранят id, ну в случае с drupal 8 и конфигурациями туда попадет uuid. Конечно uuid поможет избежать кучи проблем, но для этого придется использовать всяческие обходные пути и следить за uuid в hook_update, или найти другой способ доставки нового контента…

Есть решение намного проще — не использовать выборку по id во views фильтрах!

«Мммм…? WAT!» — спросите вы? Все легко и просто, можно снова использовать теги! На самом деле не теги, а дополнительное поле, но как по мне суть остается та же — нужно категоризировать! Во-первых добавляем словарю категорий новое поле:show-on-home-field

И отмечаем нашей категории что ее нужно показывать на главной:news-edit

И во views добавляем связь с категорией через созданное поле, и в фильтрах вместо категории News, указываем поле Show on home:views-with-categories-show-on-home

Таким образом можно добавлять и удалять сколько угодно категорий и клиент сможет сам выбирать какие из них показывать на главной. В случае когда условий больше, можно вместо поля типа boolean, использовать List (text), и добавить туда много-много правил, и одну категорию можно будет выбрать для разных страниц.

Если категорий на сайте не много, меньше 10 например, лучше сразу использовать List (text), если конечно же клиенту не нужна возможность добавлять и удалять их.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *