Home → Drupal →

При сохранении ноды выбирать вид выводимого содержимого

Опубликовано в пт, 02/05/2016 - 16:03

Задача: Сделать в ноде переключатель, который бы отвечал за смену отображения контента, индивидуально в каждой ноде.

Теория

Поискал похожие модули и ничего путнего не нашел, поэтому решил изобрести велик используя views.

План действий таков: Скрываем вывод поля с изображением, добавляем радио переключатель, он будет далее отвечать за переключения вида вывода содержимого, добавляем вьюху, которая в блоке будет выводить изображения разных форматов, в шаблоне вьюхи делаем проверку какой вывод отображать в данный момент.

От слов к делу

шаг 1

Для демонстрации метода, я создал тип материала "Переключатель контента", машинное имя - "switch", у вас же это может быть любой ранее созданный тип, который нуждается в вариациях вывода контента:
sozdaem_material.jpg

шаг 2

Добавляем поле "Изображение" (field_img), все настройки оставляем как есть, кроме "количество значений", его ставим на не ограничено, это позволит нам в это поле добавлять более одной картинки.

Добавляем наш будущий переключатель, тип: "логическое", виджет: "одиночный флаг", то есть по дефолту у нас один вывод, при активации чекбокса активируется другой вид. Если выводов должно быть более двух, то мутите списки, а не одиночный флаг.
dobavlyaem_polya.jpg

настройки чекбокса, тут указываем лейбл переключателя, у меня это "Активировать альтернативный вывод", или можно тут просто написать название вывода, например "плиткой":
nastroyki_polya_chekboksa_0.jpg

Так же я удалил поле body, чтобы оно мне не мешало, так как демонстрация моего метода не предполагает текста.

Поле изображения и чекбокс готовы, создадим материал с которым будем работать:

Добавим пару тестовых изображений, у меня это современное "искусство", так же видим наш переключатель, он пока не работоспособен, позже мы вдохнем в него жизнь:
dobavlyaem_material.jpg

шаг 3

Идем в настройку отображения материала (admin/structure/types/manage/switch/display где switch - это машинное имя вашего типа материала), скрываем отображение изображения, позже его заменит блок с вьюхой и скрываем переключатель, нам его показывать незачем:
skryvaem_pole.jpg

шаг 4

Настраиваем вьюху, структура - представление - новое представление (admin/structure/views/add):
nastroyka_vyuhi.jpg
Далее продолжаем редактирование, вот тут начинается вся магия, добавляем наше поле с изображением, со следующими настройками, то есть просто выводим в виде списка, тут включается ваша фантазия, какой вывод вам нужен - такой и крутите:
pervoe_otobrazhenie.jpg

Добавляем еще одно поле с изображением, но с другими настройками отображения, у меня это вывод в виде плитки, который предоставлен модулем - Collage Formatter, настраиваем по вкусу, у меня такие настройки:
vtoroe_otobrazhenie.jpg

Добавляем поле с нашем переключателем, форматирование ставим на ключ:
nastroyki_pereklyuchatelya.jpg

Добавляем контекстный фильтр "Содержимое: Nid", он нам нужен для того, чтобы блок с изображениями содержал только те изображения, которые есть в текущей ноде, а не все которые добавлены на сайт:
nastroyka_kontekstnogo_filtra.jpg

шаг 5

Сохраняем, чуть позже мы сюда вернемся, идем в настройку блоков (admin/structure/block), только что созданный блок перетаскиваем в контент, сохраняем, в настройках по вкусу можно указать видимость по url, чтобы блок, даже пустой, не добавлялся по всему сайту:
peretaskivaem_blok.jpg

шаг 6

На данном этапе у нас выводятся два вывода одновременно, сейчас мы это исправим, возвращаемся в настройку представления, и переопределяем шаблон, то есть копируем выделенное имя, и создаем в папке с вашей темой файл с названием, которое вы только что скопировали, далее кликаете "пересканировать файлы шаблона":
nastroyka_shablona.jpg

в файле делаем проверку, в моем случае файл называется 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!

Итог

чекбокс не активирован:
vyvod-1.jpg

чекбокс активирован:
vyvod-2.jpg

Ну а дальше все причесать по вкусу в css. Таким способом можно сделать кучу разных выводов, и выбирать их прямо в ноде при сохранении или создании материала.

Если понравилась статья - кликайте по рекламе на сайте, от этого я стану чуточку богаче.

Drupal 7
views
шаблон
чекбокс
переключатель
отображение
блоки

Menu

  • Главная
  • О блоге

Category

Drupal
(15)
Php
(4)
Верстка
(2)
Разное
(2)
lakshtori.ru (Лакштори,luckshtory) - бренд мошенников
© by Conocube / Блогу - 3970 дней