При сохранении ноды выбирать вид выводимого содержимого
Задача: Сделать в ноде переключатель, который бы отвечал за смену отображения контента, индивидуально в каждой ноде.
Теория
Поискал похожие модули и ничего путнего не нашел, поэтому решил изобрести велик используя views.
План действий таков: Скрываем вывод поля с изображением, добавляем радио переключатель, он будет далее отвечать за переключения вида вывода содержимого, добавляем вьюху, которая в блоке будет выводить изображения разных форматов, в шаблоне вьюхи делаем проверку какой вывод отображать в данный момент.
От слов к делу
шаг 1
Для демонстрации метода, я создал тип материала "Переключатель контента", машинное имя - "switch", у вас же это может быть любой ранее созданный тип, который нуждается в вариациях вывода контента:
шаг 2
Добавляем поле "Изображение" (field_img), все настройки оставляем как есть, кроме "количество значений", его ставим на не ограничено, это позволит нам в это поле добавлять более одной картинки.
Добавляем наш будущий переключатель, тип: "логическое", виджет: "одиночный флаг", то есть по дефолту у нас один вывод, при активации чекбокса активируется другой вид. Если выводов должно быть более двух, то мутите списки, а не одиночный флаг.
настройки чекбокса, тут указываем лейбл переключателя, у меня это "Активировать альтернативный вывод", или можно тут просто написать название вывода, например "плиткой":
Так же я удалил поле body, чтобы оно мне не мешало, так как демонстрация моего метода не предполагает текста.
Поле изображения и чекбокс готовы, создадим материал с которым будем работать:
Добавим пару тестовых изображений, у меня это современное "искусство", так же видим наш переключатель, он пока не работоспособен, позже мы вдохнем в него жизнь:
шаг 3
Идем в настройку отображения материала (admin/structure/types/manage/switch/display где switch - это машинное имя вашего типа материала), скрываем отображение изображения, позже его заменит блок с вьюхой и скрываем переключатель, нам его показывать незачем:
шаг 4
Настраиваем вьюху, структура - представление - новое представление (admin/structure/views/add):
Далее продолжаем редактирование, вот тут начинается вся магия, добавляем наше поле с изображением, со следующими настройками, то есть просто выводим в виде списка, тут включается ваша фантазия, какой вывод вам нужен - такой и крутите:
Добавляем еще одно поле с изображением, но с другими настройками отображения, у меня это вывод в виде плитки, который предоставлен модулем - Collage Formatter, настраиваем по вкусу, у меня такие настройки:
Добавляем поле с нашем переключателем, форматирование ставим на ключ:
Добавляем контекстный фильтр "Содержимое: Nid", он нам нужен для того, чтобы блок с изображениями содержал только те изображения, которые есть в текущей ноде, а не все которые добавлены на сайт:
шаг 5
Сохраняем, чуть позже мы сюда вернемся, идем в настройку блоков (admin/structure/block), только что созданный блок перетаскиваем в контент, сохраняем, в настройках по вкусу можно указать видимость по url, чтобы блок, даже пустой, не добавлялся по всему сайту:
шаг 6
На данном этапе у нас выводятся два вывода одновременно, сейчас мы это исправим, возвращаемся в настройку представления, и переопределяем шаблон, то есть копируем выделенное имя, и создаем в папке с вашей темой файл с названием, которое вы только что скопировали, далее кликаете "пересканировать файлы шаблона":
в файле делаем проверку, в моем случае файл называется views-view-fields--block-in-img--block.tpl.php:
<?php
if(strip_tags($fields['field_switch']->content) == "1"){
print render($fields['field_img']->content);
}else{
print render($fields['field_img_1']->content);
}?>
Тут все должно быть понятно, field_switch - переключатель, field_img - первое поле с изображениями, field_img_1 - второе поле с изображениями, если переключатель активирован, показываем первое поле, если нет, то второе.
Profit!
Итог
чекбокс не активирован:
чекбокс активирован:
Ну а дальше все причесать по вкусу в css. Таким способом можно сделать кучу разных выводов, и выбирать их прямо в ноде при сохранении или создании материала.
Если понравилась статья - кликайте по рекламе на сайте, от этого я стану чуточку богаче.