Сегодня многие интернет-магазины делаются по образу и подобию своих существующих, успешных конкурентов. Заказчики, как правило, не тратят средства на разработку технического задания, а пишут его самостоятельно, опираясь на известные сайты, которые им нравятся. Таким образом, сегодня все чаще и чаще можно встретить задания, в которых присутствуют различные элементы, выполняющиеся на Javascript. К таким элементам относятся и так называемые «Вкладки» или «Табы». Эта статья посвящена довольно сложному, но очень важному вопросу отображения элементов VirtueMart с помощью вкладок.
Теперь перейдем к VirtueMart. По умолчанию о вкладках тут и речи не идет. Все придется допиливать собственным напильником. Т.к. писать javascript-код c нуля нам не хочется, не умеется, и некогда, то приходит идея использовать фреймворк. Т.к. Joomla изначально работает с Mootools, для построения вкладок желательно использовать именно его. Остается лишь найти подходящий скрипт. Как оказалось, он уже есть в Joomla и подключать дополнительные файлы не требуется. Выглядит это так:
<?php
//Говорим Joomla, что мы хотим использовать панели
jimport('joomla.html.pane');
$myTabs = & JPane::getInstance('tabs', array('startOffset'=>0));
$output = '';
//Создаем панель для вкладок
$output .= $myTabs->startPane( 'pane' );
//Создаем 1 вкладку
$output .= $myTabs->startPanel( '1st', 'tab1' );
$output .= '<p>Это первая вкладка</p>';
$output .= $myTabs->endPanel();
// Создаем 2 вкладку
$output .= $myTabs->startPanel( '2nd', 'tab2' );
$output .= '<p>Это вторая вкладка</p>';
$output .= $myTabs->endPanel();
// Создаем 3 вкладку
$output .= $myTabs->startPanel( '3rd', 'tab3' );
$output .= '<p>Это третья вкладка</p>';
$output .= $myTabs->endPanel();
//окончание панели
$output .= $myTabs->endPane();
//Выводим
echo $output;
?>
Далее необходимо создать для вкладок стили. Отталкиваться можно от этих:
dl.tabs {
float: left;
margin: 10px 0 -1px 0;
z-index: 50;
}
dl.tabs dt {
float: left;
padding: 4px 10px;
border-left: 1px solid #ccc;
border-right: 1px solid #ccc;
border-top: 1px solid #ccc;
margin-left: 3px;
background: #f0f0f0;
color: #666;
}
dl.tabs dt.open {
background: #F9F9F9;
border-bottom: 1px solid #F9F9F9;
z-index: 100;
color: #000;
}
div.current {
clear: both;
border: 1px solid #ccc;
padding: 10px 10px;
}
div.current dd
{
padding: 0;
margin: 0;
}
Просто добавьте их в любой css-файл, используемый в шаблоне, либо в css-файл VirtueMart.
IE, как обычно, отличился. Для него небольшой фикс:
Это добавляем между тегами <head></head> используемого шаблона Joomla:
<!--[if IE]>
<link href="/[php:start]=$this->baseurl[php:end]/templates/[php:start]=$this->template[php:end]/css/ieonly.css" rel="stylesheet" type="text/css" />
<![endif]-->
div.current { overflow:auto; }
div.current dd { float:left; }
Пример.
Я понимаю, что разобраться со всеми кодами довольно сложно, особенно новичку, поэтому ниже я привожу пример работающих вкладок.
Вкладки выглядят так:
Код добавлен в файл:
components\com_virtuemart\themes\default\templates\product_details\ flypage.tpl.php
Естественно, для отображения страницы товара в настройках VirtueMart должен быть задан шаблон именно flypage.tpl.php.
Здесь привожу часть кода, отвечающего за вывод вкладок с пояснениями:
<?php
jimport('joomla.html.pane');
$myTabs = & JPane::getInstance('tabs', array('startOffset'=>0));
$output = '';
$output .= $myTabs->startPane( 'pane' );
//1 вкладка
$output .= $myTabs->startPanel( '<span>Описание</span>', 'tab1' ); // добавляем вкладку с заголовком «Описание»
$output .= '<div >'.$product_description.'</div>'; // выводим в контейнер под вкладкой описание товара из переменной $product_description
$output .= $myTabs->endPanel();
//2 вкладка
$output .= $myTabs->startPanel( '<span>Отзывы</span>', 'tab2' ); // добавляем вкладку с заголовком «отзывы»
$output .= '<div >'.$product_reviews.'<br>'.$product_reviewform.'</div>'; // выводим в контейнер под вкладкой отзывы о товаре из переменной $product_reviews и форму добавления отзывов из переменной $product_reviewform
$output .= $myTabs->endPanel();
//3 вкладка
$output .= $myTabs->startPanel( '<span>Дополнительные изображения</span>', 'tab3' ); // добавляем вкладку с заголовком «Дополнительные изображения»
$output .= '<div class="thumbnailListContainer" ><h5>'.$VM_LANG->_('PHPSHOP_MORE_IMAGES').' </h5> '.$this->vmListAdditionalImages( $product_id, $images ).' </div>'; ; // выводим в контейнер под вкладкой дополнительные изображения товара
$output .= $myTabs->endPanel();
$output .= $myTabs->endPane();
echo $output;
?>
Результат получится немного не таким, как на рисунке, но это лишь вопрос правки стилей.
Также хочу заметить, что выводить вкладки таким образом можно не только в VirtueMart, но и в других компонентах. Главное, чтобы это делалось в файле, где интерпретируется php.
Надеюсь, эта статья поможет многим делать интернет-магазины красивее и удобнее, а также продвинутся еще на шаг в освоении Joomla. Удачи!
Здесь про настройку плагина почитать можно: http://joomlaforum.ru/index.php/topic,99883.0.html
А здесь пример как он выглядит в работе: http://kupitzemlyu.ru/izhs/category/product/6-uchastki-pod-igs/48-krasivaya-zemlya
Со своего опыта, в принципе очень доволен его работой, но, слышал,что у некоторых возникают проблемы из стилей в шаблоне.
Посмотрел вашу страничку. Не понравилось 2 вещи:
1) при смене вкладок эффект не очень приятный. Подергивается. Лучше бы просто открывалась новая вкладка, без всплывания.
2) мой браузер секунд 5 тормозил, переваривая этот скрипт.
Но в качестве альтернативы плагин очень даже ничего.
и не надо копаться в кодах
Сейчас делаем магазин на вирте по продаже юридических услуг и при оформлении закаказа нужно реализовать такую фишку как прикрепить файл. Возможно ли это?????
- может быть есть какое расширение
- или нужно поковырять код
- или кто может допрограмировать за $$$ (сколько по времени и цене)
http://wedal.ru/forum/Poisk-podhodjashchego-rasshirenija/123-Kak-prikrepit-foto-k-zakazu-v-Virtuemart.html
http://www.bixie.org/downloads/view_category/1-virtueupload.html
Я пользуюсь платной версией, очень удобный плагин, вот пример: http://www.apechati.ru/index.php?page=shop.product_details&flypage=flypage_pechati.tpl&product_id=311&category_id=39&option=com_virtuemart&Itemid=2&vmcchk=1&Itemid=2
Огромное спасибо за этот сайт! Я здесь постоянно нахожу много полезной информации по VirtueMart. Возможно Вы сможете мне помочь. Я использую VirtueMart 1.1.7 и Gantry-framework 3.1.7 (http://www.gantry-framework.org/). Оба они используют mootools, но первый версию 1.11, а второй 1.3. Из-за этого Ломается плавная прокрутка страницы наверх (как я понял это конфликт библиотек). Как можно обновить в VirtueMart mootools до последней версии?
Спасибо.
У меня проблема. Вкладки отображались отлично, пока не понадобилось создать дочерный товар. Перехожу в главный товар, все ок, но стоит выбрать дочерный, то вкладки все съезжают и они получаются откртые (сразу все). Подскажите куда копать?
Спасибо.
В чем причина?
Если серьезно, попробуйте активировать плагин Joomla System - Mootools Upgrade. Также очень вероятно, что ошибку вызывает сторонний скрипт(не mootools), который подключается на этой странице.
Спасибо за ответ )
Но причину нашел методом тыка, я накосячил, когда в дочерних товарах делал кнопку "Заказать" (если товара нет на складе).
Не много не в тему, но у тебя VM Universal Search PRO на денвере или просто на апаче работал? До переноса на хостинг?
Тема очень актуальная!
Сделал все, как описано выше.
Практически получилось, только возникла одна проблема.))
Когда сделал, то название вкладок "Описание", "Отзывы", "Дополнительные изображения" не отобразились. Вместо них выводятся ромбики с вопросами (такое впечатление, что текст названия вкладки не распознается).
Подскажите, как можно исправить?!
P.S. Спасибо за Ваш сайт! Очень много полезной и хорошей информации, написанной доступным и простым языком, даже для тех, кто очень далек от web программирования.
Просто пересохранить файлы, которые собственно изменяли в UTF8 без BOM
Все получилось!!!!!!!!!!!
п.с. http://vse-est.com.ua/
Понимаю что не в тему.
Посоветуйте SEO модуль который не сильно снизит и без того не быструю производительность.
this.dlist.getElements is not a function
[Прерывать на этой ошибке]
this.titles = this.dlist.getElements('dt');
Это ошибка файла media/system/js/tabs.js
joomla 1.5.25
как победить данную проблему?
У меня такая же беда на joomla 2.5
C чистого листа поставил, не работает. 100 раз проверял. Румаю проблема в библиотеке. Как исправить не знаю, нужна помощь.
благодарю за ответ, я не силен в php, не могли бы вы данный код показать на примере вывода стандартных отзывов, которые у меня выводятся в таб кодом:
if ($this->loadTemplate('reviews')) {
$output .= $myTabs->startPanel( JText::_('COM_VIRTUEMART_REVIEWS'), 'tab8' );
$output .= ''.$this->loadTemplate('reviews').'';
$output .= $myTabs->endPanel();
}
А как эти вкладки оформалять в описании товара, код вставил, ксс поправил, я так понимаю нужно писать в виде:
"какойто тег" нужный мне текст "какойто тег закрытый", просветите пожалуйста!