VM 2.x Закладки в карточке товара

Попытался использовать код, предложенный в этой теме ранее(с использованием встроенного скрипта joomla), но у меня возникли трудности с добавлением содержимого табов. Дело в том, что для отображения содержимого таба нужно записывать его в переменную, что для меня показалось не совсем удобно(ведь я очень плохо знаю php..). По-этому я нашел простой скрипт табов и использовал его. Возможно это не самое изящное решение, но главное оно прекрасно работает!
Вот собственно способ:
1. Подключаем обязательно библиотеку jQuery не ниже версии 1.7
2. Открываем файл components/com_virtuemart/views/productdetails/tmpl/default.php (либо файл карточки товара из вашего шаблона, если он есть)
и после строки
Код:
<div class="product-description">
добавляем
Код:
   <script>
    //табы
        (function($) {
        $(function() {

        $('ul.tabs').on('click', 'li:not(.current)', function() {
        $(this).addClass('current').siblings().removeClass('current')
        .parents('div.section').find('div.box').eq($(this).index()).fadeIn(150).siblings('div.box').hide();
        })

        })
        })(jQuery)
    </script>
3. Далее ищем код
Код:
    // Product Description
    if (!empty($this->product->product_desc)) {
        ?>
        <div class="product-description">
    <?php /** @todo Test if content plugins modify the product description */ ?>
        <span class="title"><?php echo JText::_('COM_VIRTUEMART_PRODUCT_DESC_TITLE') ?></span>
    <?php echo $this->product->product_desc; ?>
        </div>
    <?php
    } // Product Description END

и меняем его на:
Код:
    <div class="section">
    <div class="tabs_wrap">
        <ul class="tabs">
        <li class="current">Описание товара</li>
        <li>
        <?php //настраиваемые поля чери пикера?>
        Характеристики</li>
        <li>
            <?php //вкладка для комментариев из jcomments с выводом количества комментариев?>
            <span class="otzyv"><?php
            $comments = JPATH_SITE . '/components/com_jcomments/jcomments.php';
            if (file_exists($comments)) {
            require_once($comments);
            $options = array();
            $options['object_id'] = $this->product->virtuemart_product_id;
            $options['object_group'] = 'com_virtuemart';
            $options['published'] = 1;
            $count = JCommentsModel::getCommentsCount($options);
            echo $count ? ('<p>Комментарии <b>('. $count . ')</b></p>') : '<p>Комментарии (0)</p>';
            }
            ?>
            </span>     
        </li> 
        <li>Насраиваемые поля виртумарт 2</li> 
        </ul>
    </div>
    <div class="box tab1 visible">
    <?php
    if (!empty($this->product->product_desc)) {
        echo $this->product->product_desc;
        }
        else {
        echo '<div class="desc_none"><span>Описание товара пока отсутствует</span></div>';
        } 
        ?>
    </div>

    <div class="box tab2">
    <?php
        // настраиваемые поля чери пикера
        $pid = JRequest::getVar('virtuemart_product_id', null);
        list_product_type($pid);
    ?>
    </div>

  <div class="box tab3">
    <?php//стандартные отзывы, если надо включить их раскомментируейте следующую строчку
//    echo $this->loadTemplate('reviews'); ?>

    <?php // код для вывода комментариев jcomments
    echo $this->product->event->afterDisplayContent;
    $comments = JPATH_ROOT . '/components/com_jcomments/jcomments.php';
    if (file_exists($comments)) {
        require_once($comments);
        echo JComments::showComments($this->product->virtuemart_product_id, 'com_virtuemart', $this->product->product_name);
    }
    ?>
</div>


  <div class="box tab4">
    <?php
        if (!empty($this->product->customfieldsSorted['normal'])) {
        $this->position = 'normal';
        echo $this->loadTemplate('customfields');
        }
        else {
        echo '<div class="desc_none"><span>Настраиваемые поля отсутствуют</span></div>';
        }
    ?>
</div>
</div>

после этого останется добавить код css в ваш шаблон(стили из моего шаблона, возможно есть что-то лишнее, если что подкорректируете..)
Код:
/*Вкладки в карточке товара*/
.box {  
    display: none;
    border: 1px solid #eee;
    border-radius: 5px;
    box-shadow: 0 0 4px rgba(0, 0, 0, 0.1);
    padding: 10px 15px;
    position: relative;
    background: #FFFFFF;
}  
.box.visible {  
    display: block;
}  
.tabs_wrap {
    height: 35px;
    overflow: hidden;
    position: relative;
}
.tabs_wrap ul.tabs {
    height: 35px;
    margin: 5px 10px;
    position: relative;
}
.tabs_wrap ul.tabs li {
    cursor: pointer;
    box-shadow: 0 0 4px rgba(0, 0, 0, 0.1);
    float: left;
    margin: 0 3px;
    padding: 5px !important;
    transition: all 0.2s ease 0s;
    border-radius: 5px 5px 0 0;
    border: 1px solid #EEEEEE;
}
.tabs_wrap ul.tabs li:hover,  .tabs_wrap ul.tabs li.current{
    background: none repeat scroll 0 0 #336699;
    color: #FFFFFF;
    transition: all 0.2s ease 0s;
    border: 1px solid #336699;
}
.tabs_wrap ul.tabs li.current {
    margin-top: -2px !important;
    position: relative;
}

.desc_none {
    font-size: 20px;
    margin: 35px;
    position: relative;
}

/*Вкладка характеристики из чери пикера*/

table.cp_table {
    border-collapse: collapse;
}

table.cp_table tr td {
    border: 1px solid #CCCCCC;
    padding: 3px 10px;
}
.cp_table_r_first > td {
    color: #0054A6 !important;
    font-size: 15px;
}
table.cp_table tr td:first-child {
    color: #555555;
}
table.cp_table tr td:last-child {
    color: #0054A6;
}

вот, как это выглядит у меня:
Снимок.PNG

добавлю, что на вкладке характеристики у меня выводятся настраиваемые поля чери пикера. Если вам это нужно, тогда надо добавить после строки
Код:
defined('_JEXEC') or die('Restricted access');
код
Код:
function list_product_type($pid) {
    $db = JFactory::getDBO();

    $html = "";
    $q  = "SELECT * FROM #__fastseller_product_product_type_xref ";
    $q .= "LEFT JOIN #__fastseller_product_type USING (product_type_id) ";
    $q .= "WHERE product_id='$pid' AND product_type_publish='Y' ";
    $q .= "ORDER BY product_type_list_order";
    
    $db->setQuery($q);
    $pts = $db->loadObjectList();
    
    $q  = "SELECT * FROM #__fastseller_product_type_parameter ";
    $q .= "WHERE product_type_id=";
    foreach ($pts as $pt) {
        $html .= "<br />\n<table class=\"cp_table\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\n";
        $html .= "<tr class=\"cp_table_r_first\"><td colspan=\"2\">".$pt->product_type_name."</td></tr>\n";
        
        // SELECT parameter value of product
        $q2  = "SELECT * FROM #__fastseller_product_type_".$pt->product_type_id;
        $q2 .= " WHERE product_id='$pid'";
        $db->setQuery($q2);
        
        $info = $db->loadAssoc();
        
        
        $db->setQuery($q . $pt->product_type_id ." ORDER BY parameter_list_order");
        $params = $db->loadObjectList();
        
        foreach ($params as $param) {
            $html .= "<tr class=\"cp_table_r\" height=\"18\">\n";
            $html .= "<td width=\"30%\">".$param->parameter_label;
            
            $html .= "</td>\n<td>";
            $html .= $info[$param->parameter_name]." ".$param->parameter_unit."</td></tr>\n";
        
        }
        $html .= "</table>\n";
    }
    
    echo $html;
}
 
Последнее редактирование:
Здравствуйте.
Не получается. Подскажите. Пожалуйста.
Плагин вкладок "DJ-VMPageBreak-UNPACK-FIRST" - Как в одну из вкладок разместить отзывы?
Joomla2.5: VirtueMart - отзывы только зарегистрированным, мне же необходимо, что б комментарии оставлял любой человек.
По совету Для просмотра ссылки Войди или Зарегистрируйся делаю: Табы встали ступеньками и не понятно как наполнять информацией из админки.
Спасибо.
 
Добрый день, подскажите, как добавить в таб конкретный материал?
 
Добрый день, подскажите, как добавить в таб конкретный материал?
что бы в таб добавить конкретный материал нужно
1. сделать таб для доп полей,
2. завести текстовое доп поле "материал", указать для него уникальную позицию.
3. ну и потом вывести это доп поле уже в карточке товара
минусы такого способа - приходиться конкретный материал дублировать каждый раз в доп поле (по другому я не придумал)

Можно также реализовать вывод необходимого материала во всплывающем окне. Способ похож на первый, но уходим от необходимости дублирования материала в доп. поле. Просто указываем в доп.поле ID материала
 
Назад
Сверху