[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
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Компонент в принципе нужный, однозначно в избранное, спасибо!
Пример этих табов с иходным кодом тут — табы.
UPDATE: Понял про что-ты — так это возможно pdoPage (судя по JSON массиву от сервера) с Ajax загрузкой контента.
Вкладки вывожу так: [[frontTabs?]], в чанках ничего не меняла.
У меня та же проблема, как Вы это решили?
Подскажите, можно ли вывести разным видом сами закладки табов? Мне в разных такладках табов нужно вывести разную инфу (у меня есть таб «Отзывы» и там нужно вывести средний рейтинг и есть таб «Вопросы» — там нужно вывести их количество.)
Я так понимаю нужно сюда смотреть: frontTabs.wrapper?
Строка 29 файла default.js компонента отдает undefined
Помимо этого в консоли:
frontTabs.wrapper
Если вместо [[+body]] вписать что-то другое, то оно выводится во вкладках, а вот содержимое tv не выводится.
Можете также оформить pull request в репозиторий, и тогда я обновлю компонент в modStore.
Это нужно сделать для чанков tplHeader и tpl
кто может подсказать по внедрению?