[РЕШЕНО] Если в поле Image много картинок, а вывести все невозможно

Главные вкладки

Аватар пользователя Snitch Snitch 22 декабря 2012 в 19:52

Пример
Есть поле Image (Drupal 7), в котором около 9 картинок. В дизайн страницы влезает только 5 (1 полоса). Хочется сделать так, чтобы они не занимали больше 1 полосы, а картинки, которые не влезли в эту полосу, смотреть по навигации через стрелочки. А по клику показывались в лайтбоксе. Уже все облазил по ключевым словам "карусель, слайдшоу, поле image, и т.д.". Везде только показано как сделать слайдшоу. Мне оно не нужно, нужна только "колбаса" из картинок с возможностью прокрутки. И такая "колбаса" в каждой ноде своя. Подскажите пожалуйста, кто знает. А то уже руки опускаются что-то делать.

РЕШЕНИЕ:

Пилю гайд о том как пользоваться jCarousel в связке с Views, чтобы получить карусель из контента полей ноды. (Как сделать красивую галерею)

1. Качаем и ставим jCarousel и Views.
2. Переходим в настройки модуля Views и жмем добавить новую вьюху.
3. Создаем вьюху как обычно, Display format выбираем "jCarousel" of "fields".
4. Сразу убираем pager, иначе ничего не будет выводится и в целом настраиваем вьюху так, как вам надо.
5. В Advanced -> Contextual filters добавляем "Содержимое: Nid" (номер ноды) и сохраняем.
6. Теперь в node.tpl.php или node-СИСТЕМНОЕимяТИПАвашегоСОДЕРЖИМОГО.tpl.php в вашей теме (как создавать или править темы - это уже другая история) с помощью функции views_embed_view() вы можете вывести вашу вьюху:

<?php print views_embed_view('СИСТЕМНОЕ ИМЯ ВАШЕЙ ВЬЮХИ''СИСТЕМНОЕ ИМЯ ДИСПЛЕЯ ВАШЕЙ ВЬЮХИ',
'АРГУМЕНТ(Ы) ДЛЯ КОНТЕКСТНОГО ФИЛЬТРА (если аргументов больше 1, то пишем их через запятую)'); ?>

<?php print views_embed_view('photo_gallery''photocarousel'$node->nid); ?>

или как подметил voviko и как я его понял

<?php print views_embed_view('photo_gallery'$display_id 'photocarousel'$node->nid); ?>

7. Сами поля, если они выводятся вместе с вьюшкой, чтобы не дублировали контент на странице, скрываем. Например через CSS или просто добавив поля в скрытые в настройках отображения контента (содержимого).

8. Еще неплохо бы добавить фильтр по "ВАШ_ТИП_КОНТЕНТА: ИМЯ ПОЛЯ:delta (>= 0)". Чтобы вьюха не выводилась совсем, сли поле пустое.

p.s. Поправте меня пожалуйста, если я где-то неправ.

ВложениеРазмер
Иконка изображения howto.jpg251.38 КБ

Комментарии

Аватар пользователя voviko voviko 23 декабря 2012 в 13:35

вставить в ноду вывод views jcarousel, аргумент номер ноды.
в node--type.tpl.php
<?php print views_embed_view('VIEW_NAME', 'block_ID', 'arg(1)');?>

Аватар пользователя voviko voviko 23 декабря 2012 в 16:14

"ХулиGUN" wrote:
А не проще в тему добавит плагин карусели и обернуть в нужные дивы поле с картинками?
Мой вариант проще, и особых знаний не требует. Конфликтов js поменьше будет, а то уже намучался.

Аватар пользователя Snitch Snitch 23 декабря 2012 в 21:31

Спасибо всем ответившим. Действительно сообщество ДРУпал ДРУжелюбное Smile
На днях попробую, если получится, то выложу скриншоты - как делать.

Аватар пользователя Snitch Snitch 10 ноября 2015 в 11:48

Пишу в node.tpl.php:
<?php print views_embed_view('photo_gallery''page'); ?>
Выводится.

Пишу в node.tpl.php:
<?php print views_embed_view('photo_gallery''page'$node->nid); ?>
Не выводится.

Что делать? Как правильно пользоваться views_embed_view()? Нужно, чтобы в каждой ноде views принимал номер ноды в свой фильтр.

Аватар пользователя Snitch Snitch 25 декабря 2012 в 18:35

Тысяча чертей! Я был так близок! Просто думал, что при вводе функции аргумент будет подменяться. Ща буду пробовать.

Аватар пользователя Snitch Snitch 27 декабря 2012 в 9:59

voviko wrote:
block_ID - обратите внимание, не page а блок! иначе будет плохо с seo

Вынужден несогласится. jCarousel имеет дисплей не блок, а свой собственный, поэтому меняем машинное имя дисплея на отличное от "page" и пишем в функцию его. Как получилось у меня:
<?php print views_embed_view('photo_gallery''photocarousel'$node->nid); ?>

Хотя я и не исключаю своей крабовитости по причине отсутствия опыта и вы меня переубедите. Но тогда я вынужден просить развернутого ответа.

Аватар пользователя Snitch Snitch 28 декабря 2012 в 12:30

Пилю гайд о том как пользоваться jCarousel в связке с Views, чтобы получить карусель из контента полей ноды. (Как сделать красивую галерею)

1. Качаем и ставим jCarousel и Views.
2. Переходим в настройки модуля Views и жмем добавить новую вьюху.
3. Создаем вьюху как обычно, Display format выбираем "jCarousel" of "fields".
4. Сразу убираем pager, иначе ничего не будет выводится и в целом настраиваем вьюху так, как вам надо.
5. В Advanced -> Contextual filters добавляем "Содержимое: Nid" (номер ноды) и сохраняем.
6. Теперь в node.tpl.php или node-СИСТЕМНОЕимяТИПАвашегоСОДЕРЖИМОГО.tpl.php в вашей теме (как создавать или править темы - это уже другая история) с помощью функции views_embed_view() вы можете вывести вашу вьюху:

<?php print views_embed_view('СИСТЕМНОЕ ИМЯ ВАШЕЙ ВЬЮХИ''СИСТЕМНОЕ ИМЯ ДИСПЛЕЯ ВАШЕЙ ВЬЮХИ',
'АРГУМЕНТ(Ы) ДЛЯ КОНТЕКСТНОГО ФИЛЬТРА (если аргументов больше 1, то пишем их через запятую)'); ?>

<?php print views_embed_view('photo_gallery''photocarousel'$node->nid); ?>

или как подметил voviko и как я его понял

<?php print views_embed_view('photo_gallery'$display_id 'photocarousel'$node->nid); ?>

7. Сами поля, если они выводятся вместе с вьюшкой, чтобы не дублировали контент на странице, скрываем. Например через CSS или просто добавив поля в скрытые в настройках отображения контента (содержимого).

8. Еще неплохо бы добавить фильтр по "ВАШ_ТИП_КОНТЕНТА: ИМЯ ПОЛЯ:delta (>= 0)". Чтобы вьюха не выводилась совсем, сли поле пустое.

p.s. Поправте меня пожалуйста, если я где-то неправ.

Аватар пользователя Snitch Snitch 28 декабря 2012 в 12:25

Как бы еще сделать, чтобы вьюха не выводилась совсем, если в поле нет определенного количества значений?

UPD. Сам же и решил. Фильтр по "ВАШ_ТИП_КОНТЕНТА: ИМЯ ПОЛЯ:delta (>= 0)". Что значит - у поля есть хотя бы 1 значение.

В принципе главный вопрос темы решен. Остались только маленькие вопросы и стайлинг.

Аватар пользователя voviko voviko 29 декабря 2012 в 1:33

"Snitch" wrote:

Как бы еще сделать, чтобы вьюха не выводилась совсем, если в поле нет определенного количества значений?


<? if(isset(field_IMAGA[und][0][ла ла])) print VIEWS;?> примерно так.