[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            
                Добрый день. У вас получилось сделать?            
                    
                этот компонент вообще работает?
кто может подсказать по внедрению?
                    кто может подсказать по внедрению?
                Что не получается?            
                    
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.