[frontTabs] Реализация вкладок на странице сайта
Здравствуйте, уважаемое сообщество. Представляю свой компонент для вывода блока с вкладками (табами) на страницах сайта, с возможностью настройки в админке MODX.
В админке, все выглядит как группа TV, которая находится в одной категории. По умолчанию это категория с именем frontTabs.
Возможности:
Вызов сниппета:
Оформление чанка ft_tab:
Оформление чанка ft_image_tab:
Оформление чанка ft_video_tab:
В админке:
Еще пример, для вывода галереи msGallery:
Код чанка ft_gallery_tab:
Использование индексов
Для определения по какой вкладке был произведен клик, а также какой блок показать, используются индексы в DOM, что не хорошо. Получается, что работа js зависит от структуры верстки.
Ссылка на компонент в modstore
В админке, все выглядит как группа TV, которая находится в одной категории. По умолчанию это категория с именем frontTabs.
Возможности:
- Запоминание активных вкладок.
- Подключение отдельных чанков для оформления отдельного дополнительного поля.
- Кастомизация js и css
Запоминание активной вкладки
Для запоминания активной вкладки используются cookie, которые пишутся для каждой страницы отдельно. Для включения этой опции, нужно указать параметр rememberTab:[[frontTabs?rememberTab=`1`]]
Чанки
Компонент поддерживает подключение чанков для оформления контента отдельных вкладок (параметр &tpl_имя_tv). Допустим на странице товара, есть TV image и youtube_video, в которых хранится ссылка на картинку и видео соответственно. Также нам нужно вывести допустим общую информацию о доставке, которая имеет значение по умолчанию, а также может меняться для конкретного товара. Тогда вызов сниппета и код чанков будут иметь такую структуру:Вызов сниппета:
[[frontTabs?
&tab=`ft_tab` //чанк по умолчанию
&tpl_image=`ft_image_tab`// чанк для оформления TV image
&tpl_youtube_video=`ft_video_tab`// чанк для оформления TV youtube_video
]]
Оформление чанка ft_tab:
<div class="ft-content row">
<div class="col-lg-12">
[[+value:default=`[[+default_text]]`]]
</div>
</div>
Оформление чанка ft_image_tab:
<div class="ft-content row">
<div class="col-lg-12">
<img src="[[+value]]" alt="" />
</div>
</div>
Оформление чанка ft_video_tab:
<div class="ft-content row">
<div class="col-lg-12">
<iframe width="560" height="315" src="[[+value]]" frameborder="0" allowfullscreen></iframe>
</div>
</div>
В админке:
Еще пример, для вывода галереи msGallery:
[[frontTabs?
&tab=`ft_tab`
&tpl_gallery=`ft_gallery_tab`
]]
Код чанка ft_gallery_tab:
<div class="ft-content row">
<div class="col-lg-12">
[[msGallery]]
</div>
</div>
Недостатки
Для вывода информации сниппетами, нужно все равно заводить TV (например скрытого типа), и прописывать вызов сниппета в поле «Значение по умолчанию», или оформить индивидуальный чанк для этой ТВ. Это планируется исправить в будущих обновлениях. Пока не решил как, есть идея реализовать это как конфигурирование в json, при этом оставить возможность работы через TV.Использование индексов
Для определения по какой вкладке был произведен клик, а также какой блок показать, используются индексы в DOM, что не хорошо. Получается, что работа js зависит от структуры верстки.
В планах:
На основе собственных размышлений и собранного фидбека, составил список будущих наработок:- Для оформление чанков использовать не только Bootstrap 3, но и собственную верстку, чтобы при вызове на сайтах без Bootstrap, блок с вкладками выглядел адекватно.
- Вместо индексов DOM, использовать селекторы (например название TV)
- Конфигурирование вкладок в json формате.
- Индивидуальные чанки для шапки.
Ссылка на компонент в modstore
Комментарии: 33
Или я не соображаю или правда тяжело написано, думаю так будет проще:
[[frontTabs?
&tab=`чанк оформления TV по умолчанию` //параметр для указания чанка по умолчанию
&tpl_имяTV=`Чанк с оформлением`
&tpl_имяДругойTV=`чанк с оформлением`
]]
Компонент в принципе нужный, однозначно в избранное, спасибо!
Посмотри документацию: Дока
Я видел.
Да, действительно плохо раскрыл этот момент. Исправил, спасибо.
Здесь на сайте справа «Прямой эфир» реализован с помощью этого компонента?
Определённо нет. Табы делать не так уж и сложно, чтобы для этого ставить компонент. По крайней мере Василий не из таких. Ну, насколько я его знаю. :))
Табы делать легко. Но табы с ajax — подгрузкой контента (как здесь) сложнее :)
Ajax подгрузки контента здесь нет, весь контент загружен, просто скрывается.
Пример этих табов с иходным кодом тут — табы.
UPDATE: Понял про что-ты — так это возможно pdoPage (судя по JSON массиву от сервера) с Ajax загрузкой контента.
Пример этих табов с иходным кодом тут — табы.
UPDATE: Понял про что-ты — так это возможно pdoPage (судя по JSON массиву от сервера) с Ajax загрузкой контента.
Спасибо. Пойду посмотрю на исходник.
Это не те табы, у меня более простая реализация. Исходный код
Я не про твои табы))))
Нет, здесь табы реализованы не этим компонентом.
Только на пару лет раньше, а так — конечно =)
Подскажите, пожалуйста. Почему-то не выводится [[+value]] :( Название вкладки выводится ([[+caption]]), а [[+value]] нет :( Тип ввода стоит Текстовый редактор, Тип вывода по умолчанию.
Вкладки вывожу так: [[frontTabs?]], в чанках ничего не меняла.
Вкладки вывожу так: [[frontTabs?]], в чанках ничего не меняла.
Значение, точно есть в доп. поле?
да, перепроверила, все есть.
Если желаете, могу глянуть, пришлите доступы в личку
Добрый день!
У меня та же проблема, как Вы это решили?
У меня та же проблема, как Вы это решили?
Здравствуйте. Если еще актуально. Решили таким образом: [[frontTabs?resource=`[[*id]]`]]. Не определялся ресурс по дефолту.
Добрый день.
Подскажите, можно ли вывести разным видом сами закладки табов? Мне в разных такладках табов нужно вывести разную инфу (у меня есть таб «Отзывы» и там нужно вывести средний рейтинг и есть таб «Вопросы» — там нужно вывести их количество.)
Я так понимаю нужно сюда смотреть: frontTabs.wrapper?
Подскажите, можно ли вывести разным видом сами закладки табов? Мне в разных такладках табов нужно вывести разную инфу (у меня есть таб «Отзывы» и там нужно вывести средний рейтинг и есть таб «Вопросы» — там нужно вывести их количество.)
Я так понимаю нужно сюда смотреть: frontTabs.wrapper?
чанк для оформления берется из &tplHeader. В этом чанке доступны все поля modTemplateVar. Можно взять плейсхолдер «name» и в зависимости от его значения выводить нужную информацию.
Спасибо. Выявил проблему — именно в браузере Опера вкладки не скрываются а отображаются одна под одной. Не знаете в чем дело? В консоли:
Строка 29 файла default.js компонента отдает undefined
Помимо этого в консоли:
Строка 29 файла default.js компонента отдает undefined
Помимо этого в консоли:
jquery.min.js:4 Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/
.send @ jquery.min.js:4
Не выводит [[+body]]
frontTabs.wrapper
frontTabs.wrapper
<div id="frontTabs">
<ul class="nav nav-tabs">
[[+header]]
</ul>
<div>
[[+body]]
</div>
</div>
Никто не знает, почему?
Если вместо [[+body]] вписать что-то другое, то оно выводится во вкладках, а вот содержимое tv не выводится.
Если вместо [[+body]] вписать что-то другое, то оно выводится во вкладках, а вот содержимое tv не выводится.
Подскажите а есть возможность сделать извне ссылку для перехода внутрь конкретного таба?
Здравствуйте, к сожалению этой возможности нет, но её можно добавить расширив default.js
Я понимаю что штатной возможности нет, может быть подскажите скрипт
Скрипт не подскажу, но вот, аналогичная реализация в Twitter Bootstrap, если в jQuery разбираетесь, то доработать не проблема.
Можете также оформить pull request в репозиторий, и тогда я обновлю компонент в modStore.
Можете также оформить pull request в репозиторий, и тогда я обновлю компонент в modStore.
Здравствуйте, подскажите возможно ли сделать так что бы вкладка не выводилась, если соответствующий доп параметр пустой? Просто есть карточки продукта с вкладками Описание, Тех.спецификация, Документация, Видео. Проблема в том что пока не по всем товарам есть видео, а по некоторым его и не будет, а пустые вкладки выглядят не красиво.
Компонентом это не предусмотрено. Попробуйте так:
[[+value:notempty=`тут размещаем html код чанка`]]
Это нужно сделать для чанков tplHeader и tpl
Добрый день. У вас получилось сделать?
этот компонент вообще работает?
кто может подсказать по внедрению?
кто может подсказать по внедрению?
Что не получается?
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.