Перейти к содержимому


Табы (вкладки) на странице товара


  • Вы не можете ответить в тему
Сообщений в теме: 55

#1 ecco

    Пользователь

  • Download User
  • PipPip
  • 27 сообщений
Репутация: 11
Начинающий

Отправлено 14 March 2012 - 10:53 PM

Попробовав различные решения для организации вкладок на странице товара ShopCMS, остановился на варианте предложенном сервисом Yahoo.

итак, приступим к реализации.

1. Заходим в админку: Настройки / Общие настройки / и активируем (включаем) чекбокс "Принудительная очистка кэша"

2. В файле шаблона core/tpl/user/ВАШ_ШАБЛОН/head.tpl.html ищем строку

 {* подключение скриптов *}


ниже нее вставляем

<script src="http://yui.yahooapis.com/3.4.1/build/yui/yui-min.js"></script>


3. В файле шаблона core/tpl/user/ВАШ_ШАБЛОН/product_detailed.tpl.html в нужном для Вас месте вставляем код:

<div id="product-tabs">
<ul>
<li><a href="#tab1">Вкладка 1</a></li>
<li><a href="#tab2">Вкладка 2</a></li>
<li><a href="#tab3">Вкладка 3</a></li>
</ul>
<div>
<div id="tab1">
Текст вкладки 1
</div>
<div id="tab2">
Текст вкладки 2
</div>
<div id="tab3">
Текст вкладки 3
</div>
</div>
<script>
{literal}
YUI().use('tabview', function(Y) {
var tabview = new Y.TabView({
srcNode: '#product-tabs'
});

tabview.render();
});
{/literal}
</script>
</div>


4. В файле шаблона data/ВАШ_ШАБЛОН/style.css добавляем стили, приведу простой пример стиля - само собой можно оформить более красивые стили с изображениями и т.п.

/* Product tabs  */
#product-tabs{clear:both;}
ul.yui3-tabview-list{margin-top:10px;}
.yui3-tab-label{border-left:1px solid #CCC;border-right:1px solid #CCC;border-top:1px solid #CCC;margin-right:3px;}
div.yui3-tabview-panel{border:1px solid #CCC;padding:20px;margin-bottom:10px;}
.yui3-tab-selected{background-color:#CCC;margin-right:3px!important;}


4. Обновляем страницу товара. Заходим в админку: Настройки / Общие настройки / и деактивируем (выключаем) чекбокс "Принудительная очистка кэша".

На этом установка окончена, ну а вкладки уже используйте на свое усмотрение я например туда вставил виджеты комментариев из соц.сетей.

Прикрепленный файл  tabs.png   17.95К   316 Количество загрузок:

Также табы можно использовать например для вывода описания либо характеристик товара.
  • 1

#2 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 03 April 2012 - 09:43 PM

Сделал на этой базе табы в детальном описании товара.
Вот так - http://cpu.badisoft....ook-IQ-701.html
файлик product_detailed.tpl.html прилагаю.
Если style.css изменено как указано выше, то достаточно этого файла.
Я, правда, чуть изменил css, чтобы были закругления (не в IE :)) и полоска только по верхнему краю, а не по всему контуру блока.
Не уверен, что это правильный путь, но зато очень просто :).

PS. вызов yui-min.js в этом же TPL-файле, вставлять его в head.tpl.html не надо. Более того, вредно :).

Прикрепленные файлы


  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#3 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 03 April 2012 - 10:40 PM

"чуть поправленный" CSS:
ul.yui3-tabview-list{margin-top:5px;}
.yui3-tab-label{border-left:1px solid #CCC;border-right:1px solid #CCC;border-top:1px solid #CCC;margin-right:3px;border-radius:5px 5px 0 0;}
div.yui3-tabview-panel{border-top:1px solid #CCC;padding:20px;margin-bottom:10px;}
.yui3-tab-selected{background-color:#CCC;margin-right:3px!important;border-radius:5px 5px 0 0;}

  • 1
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#4 ecco

    Пользователь

  • Download User
  • PipPip
  • 27 сообщений
Репутация: 11
Начинающий

Отправлено 07 April 2012 - 12:13 AM

PS. вызов yui-min.js в этом же TPL-файле, вставлять его в head.tpl.html не надо. Более того, вредно :).


Ну я вставил в head - туда, где остальные js-файлы подключены , там же написано {* подключение скриптов *} :)
.... в принипе я замечал что обычно стараются выносить в отдельные страницы js-файлы, которые работают только на этих страницах, особенно в крупных проектах.

Замечено что периодически сайт притормаживает когда подгружает js-файлик с ресурса Yahoo - видимо когда ресурс Yahoo подтормаживает. Думаю может его в шаблон лучше забрать?
  • 0

#5 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 07 April 2012 - 11:59 AM

Замечено что периодически сайт притормаживает когда подгружает js-файлик с ресурса Yahoo - видимо когда ресурс Yahoo подтормаживает. Думаю может его в шаблон лучше забрать?

Я выше так и сделал. Только это не сильно изменит ситуацию, просто будет подтормаживать не по всему сайту, а только на страничке с этим шаблоном :).

Вот понять бы, за каким оно лезет на яху даже если скрипт берешь с собственного сайта.... И, главное, как от этого избавиться.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#6 Dbus

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 1116 сообщений
Репутация: 174
Мастер
  • ГородОдесса

Отправлено 07 April 2012 - 01:07 PM

Господа, на дворе время CSS3, подключать скрипты для табов уже абсолютно не обязательно, можно все стилями сделать :)


  • 0
502 Bad Gateway

#7 R.Sergey

    Администратор

  • Администраторы
  • 2810 сообщений
Репутация: 332
Мастер

Отправлено 07 April 2012 - 01:40 PM

Господа, на дворе время CSS3,

Оно то так, но как-то недоверяю этому ксс3 - вечно с ним траблы, то в ИЕ то в МАК то еще где-то.
  • 0

#8 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 07 April 2012 - 02:48 PM

Господа, на дворе время CSS3, подключать скрипты для табов уже абсолютно не обязательно, можно все стилями сделать

И оно будет работать в IE? Ведь пока оно не работает в IE (точнее, пока люди работают в XP, где IE7 и IE8 достаточно часты) - способ бессмысленен. Я в процессе разбирательства с раунд-корнерами уже убедился, что все давно и прекрасно решено в CSS3, только вот для одних браузеров оно решено такими командами, для других другими, а для третьих не решено вообще. Ну и толку от этих команд, если старый проверенный способ работает в любом браузере почти одинаково? :)

PS. Там по ссылке есть view demo, так вот это демо в IE8 не работает, а больше у меня тут на даче ничего и нет.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#9 ecco

    Пользователь

  • Download User
  • PipPip
  • 27 сообщений
Репутация: 11
Начинающий

Отправлено 07 April 2012 - 06:39 PM

Пример 2.

В файле core/tpl/user/ВАШ_ШАБЛОН/product_detailed.tpl.html в нужном месте вставьте код

<style type="text/css">
div.tabs{width:100%}
ul.navi {list-style:none; margin:0; padding:0;}
ul.navi li {display: inline;}
ul.navi li a {padding: 3px 9px; text-decoration: none;}
ul.navi li a.selected,ul.navi li a.selected:hover,ul.navi li a:hover{background: #ccc;color: #000;}
div.tabs div {padding: 5px;margin-top: 3px;border: 1px solid #CCC;background: #FFF;}
</style>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript">
{literal}
$(function () {
  var tabs = $('div.tabs > div');
  tabs.hide().filter(':first').show();
  $('div.tabs ul.navi a').click(function () {
   tabs.hide();
   tabs.filter(this.hash).show();
   $('div.tabs ul.navi a').removeClass('selected');
   $(this).addClass('selected');
   return false;
  }).filter(':first').click();
});
{/literal}
</script>
<div class="tabs">
	<ul class="navi">
		<li><a class="first" href="#tab1">Вкладка 1</a></li>
		<li><a href="#tab2">Вкладка 2</a></li>
		<li><a class="last" href="#tab3">Вкладка 3</a></li>
	</ul>
	<div id="tab1">
		Содержимое вкладки 1
	</div>
	<div id="tab2">
		Содержимое вкладки 2
	</div>
	<div id="tab3">
		Содержимое вкладки 3
	</div>
</div>


Этот код вроде не тормозит - подтягивает библиотеку Jquery - при желании файл jquery-1.7.2.min.js можно скачать в шаблон и подключить локально.
* Не помню подключен ли по умолчанию Jquery в ShopCMS, если да то подредактирую код в примере.

Скриншот: Прикрепленный файл  2.png   2.93К   160 Количество загрузок:
  • 2

#10 Dbus

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 1116 сообщений
Репутация: 174
Мастер
  • ГородОдесса

Отправлено 07 April 2012 - 07:35 PM

PS. Там по ссылке есть view demo, так вот это демо в IE8 не работает, а больше у меня тут на даче ничего и нет.


в 9м работает, а ниже у меня нету... хотя да, с ослом вечные проблемы, доколе... :)

Не помню подключен ли по умолчанию Jquery в ShopCMS, если да то подредактирую код в примере.

по умолчанию Jquery конечно же не подключен, но во многих исправленных шаблонах уже есть, нужно смотреть по обстоятельствам, короче...

а cdn имхо гугловский нужно - поживее и встречается чаще, в чем и соль.
  • 0
502 Bad Gateway

#11 ecco

    Пользователь

  • Download User
  • PipPip
  • 27 сообщений
Репутация: 11
Начинающий

Отправлено 07 April 2012 - 07:56 PM

а cdn имхо гугловский нужно - поживее и встречается чаще, в чем и соль.


Почитал про особенности Google CDN и изменил код во втором примере.
  • 0

#12 Dbus

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 1116 сообщений
Репутация: 174
Мастер
  • ГородОдесса

Отправлено 07 April 2012 - 07:59 PM

1.4.4 как-то совсем уж древнее
  • 0
502 Bad Gateway

#13 ecco

    Пользователь

  • Download User
  • PipPip
  • 27 сообщений
Репутация: 11
Начинающий

Отправлено 07 April 2012 - 08:23 PM

ой.. поменял на 1.7.2
  • 0

#14 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 08 April 2012 - 01:35 PM

В файле core/tpl/user/ВАШ_ШАБЛОН/product_detailed.tpl.html в нужном месте вставьте код

А также переместите тэг {/literal} ниже строчек с CSS, иначе работать не будет, т.к. смарти будет озадачен содержимым фигурных скобок :).
  • 2
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#15 R.Sergey

    Администратор

  • Администраторы
  • 2810 сообщений
Репутация: 332
Мастер

Отправлено 08 April 2012 - 01:38 PM

А также переместите тэг {/literal} ниже строчек с CSS, иначе работать не будет, т.к. смарти будет озадачен содержимым фигурных скобок


А вообще для чистоты кода лучше вынести как JS так и CSS отдельные файлы. JS в свой файл и подключить. А CSS в style.css. Но это уже как кому больше нравится.
  • 0

#16 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 08 April 2012 - 05:33 PM

Сменил, как вышеуказано, библиотеку YUI на JQUERY и тормоза пропали. Причем я jquery гружу не со своего сайта, а с гугля, справедливо предполагая, что гугль всяко побыстрее по отдаче :).
Вот product_detailed.tpl.html, где табами сделано описание товара (кто-то не так давно просил именно такое решение, насколько я помню). Я туда от балды вбил пять "табов":
- полное описание
- краткое описание
- код товара
- количество на складе
- емейл ("есть вопросы по товару?")
, но каждый может сделать под себя.
CSS я чуть переделал и загнал в /data/[шаблон]/style.css:
/* Product tabs  JQUERY */
ul.navi {list-style:none; margin:0; padding:0;}
ul.navi li {display: inline;}
ul.navi li a {border-left:1px solid #CCC; border-right:1px solid #CCC; border-top:1px solid #CCC; padding: 3px 9px; text-decoration: none; border-radius:5px 5px 0 0;}
ul.navi li a.selected,ul.navi li a.selected:hover,ul.navi li a:hover{background: #ccc;color: #000;}
div.tabs{width:100%}
div.tabs div {border-top:1px solid #CCC;padding: 20px; margin-top: 3px;}

загрузка jquery.min.js у меня вставлена в head.tpl.html, т.к. используется не только в этом месте, а также в Живом поиске и Фильтре товаров (в движках цен). Что особенно приятно, т.к. для табов не требуется подгрузки ни байта дополнительных библиотек в отличие от варианта с YUI.

ecco отдельное спасибо как за идею, так и (особенно!) за примеры.

PS. Вот ссылка, где видно "как оно выглядит" - http://cpu.badisoft....ook-IQ-701.html - но оно никак не отличается по виду от предыдущего моего поста на эту тему. Только быстрее в разы, что и приятно :).

PPS. Нашел косячок. Перезалил.

Прикрепленные файлы


  • 2
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#17 ramshaus

    Продвинутый пользователь

  • Download User
  • PipPipPip
  • 80 сообщений
Репутация: 15
Начинающий

Отправлено 09 April 2012 - 12:07 PM

Тоже выложу таб
html
<!--   начало табов -->
  <table border="0" cellpadding="0" cellspacing="0" width="100%">
	<tbody>
	  <tr valign="top">
		<td width="380">
{literal}
		  <script type="text/javascript">
   var curr = "s1";
   var tk = "td1";
   var ak = "a1";
  function layer(id) {
   var yl = "s"+id;
   var ct = "td"+id;
   var at = "a"+id;
	document.getElementById(curr).style.display = "none";
	document.getElementById(tk).className = "rss";
	document.getElementById(ak).className = "but_p";
	document.getElementById(yl).style.display = "block";
	document.getElementById(ct).className = "rs";
	document.getElementById(at).className = "but_a";
   curr = yl;
   tk = ct;
   ak = at;
  }
  </script>
{/literal}
		
		  <table style="margin-top: 10px;" border="0" cellpadding="0" cellspacing="0" width="100%">
			<tbody><tr valign="bottom">
			  <td class="rs" id="td1" width="1%"><a onclick="layer(1);" id="a1" class="but_a">Описание</a></td>
	  <td class="rss-rs"></td>
	  <td class="rss" id="td2" width="1%"><a onclick="layer(2);" id="a2" class="but_p">Характеристики</a></td>
	  <td class="rss-rs"></td>
	  <td class="rss" id="td3" width="1%"><a onclick="layer(3);" id="a3" class="but_p">Доставка</a></td>
	  <td class="rss-rs"></td>
	  <td class="rss" id="td4" width="1%"><a onclick="layer(4);" id="a4" class="but_p">Видео</a></td>
	  <td class="rss-rs"></td>
	  <td class="rss" id="td5" width="1%"><a onclick="layer(5);" id="a5" class="but_p">Похожие&nbsp;товары</a></td>
	  <td class="rss-rs2"></td>
	 </tr>
			  <tr valign="top">
				<td colspan="10" class="div_list">
				  <div id="s1" style="display: block;">
				  
					<p>Таб 1</p>
					 </div>
	<div id="s2" style="display: none;">
	  <p>Таб 2</p>
	</div>
	<div id="s3" style="display: none;">
	  <p>Таб 3</p>
		  </div>
	<div id="s4" style="display: none;">
	 <p>Таб 4</p>
			</div>
  <div id="s5" style="display: none;">
  <p>Таб 5</p>
  </div>	</td>
	 </tr>
			  </tbody></table>  </td>
   </tr>
  </tbody>
	</table>
<!--  конец таба -->
==========================================
CSS
td.rss {height: 34px; border-bottom: 1px solid #c7cdd0;}
a.but_p {background: #efefef; border-top: 1px solid #c7cdd0; border-left: 1px solid #c7cdd0; border-right: 1px solid #c7cdd0; height: 24px; display: block; text-decoration: none; padding: 4px 20px 0px 20px; cursor: pointer;}
td.rs {height: 34px;}
a.but_a {background: #fafafa; border-top: 1px solid #c7cdd0; border-left: 1px solid #c7cdd0; border-right: 1px solid #c7cdd0; height: 25px; display: block; text-decoration: none; padding: 8px 20px 0px 20px; cursor: pointer;}
td.rss-rs {height: 34px; border-bottom: 1px solid #c7cdd0; width: 4px;}
td.rss-rs2 {height: 34px; border-bottom: 1px solid #c7cdd0; padding-right: 4px;}
td.div_list {background: #fafafa; border-bottom: 1px solid #c7cdd0; border-left: 1px solid #c7cdd0; border-right: 1px solid #c7cdd0; padding: 33px; font-family: Arial, Helvetica, sans-serif; font-size: 13px; font-weight: normal; color: #0f344d;}

Прикрепленные файлы

  • Прикрепленный файл  tabss5.jpg   7.56К   143 Количество загрузок:

  • 2

#18 R.Sergey

    Администратор

  • Администраторы
  • 2810 сообщений
Репутация: 332
Мастер

Отправлено 09 April 2012 - 12:09 PM

Вопрос такой, позволяют ли эти табы использовать по несколько ГРУПП табов на одной странице?

Я с табами работаю давно, и полно у меня различных вариантов ))) все хотел выложить как-то по свободе, но видимо уже без надобности. Вот только не все они работают если сделать несколько групп.
  • 0

#19 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 21 April 2012 - 01:06 AM

А если все равно используется не только jquery.js, но и jquery-ui.js, то табы делаются еще проще:
<script type="text/javascript">
{literal}
$(function() {
$( "#tabs" ).tabs({selected:1});
});
{/literal}
</script>

<div id="tabs">
<ul>
<li><a href="#tab1">Вкладка 1</a></li>
<li><a href="#tab2">Вкладка 2</a></li>
<li><a href="#tab3">Вкладка 3</a></li>
</ul>
<div id="tab1">
Содержимое вкладки 1
</div>
<div id="tab2">
Содержимое вкладки 2
</div>
<div id="tab3">
Содержимое вкладки 3
</div>
</div>

css подтягивается родной от jquery-ui, а selected:1 я написал просто для примера, как стартово выбрать нужный таб.
полное описание тут: http://jqueryui.com/demos/tabs
пример, как это выглядит у меня (все по дефолту, своих css не делал) тут: http://cpu.badisoft....ook-IQ-701.html

Вопрос такой, позволяют ли эти табы использовать по несколько ГРУПП табов на одной странице?

Как я понимаю, в function надо сменить ".selection" на другой, т.е. во второй группе табов он будет не #tabs, а, скажем, #tabs2. Ну и <div id="tabs2"> у второй группы. Хотя, конечно, надо бы проверить :).

PS. Проверил. Работает.
  • 1
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#20 bank911

    Пользователь

  • Пользователи
  • PipPip
  • 22 сообщений
Репутация: 0
Начинающий

Отправлено 29 April 2012 - 10:05 PM

Выдирайте табы отсюда, если нужно, дам любые файлы, хотя реализацию видно и так в html на странице с любым из товаров.

  • 0