Настройка сопутствующих товаров в virtuemart 2
В этой статье я хочу рассмотреть вывод похожих (сопутствующих) товаров в virtuemart 2. За основу была взята статья с www.joomla-create.net (рекомендую данный сайт, очень много полезных материалов)
По умолчанию данный функционал уже встроен в виртумарт. Для того, чтобы добавить сопутствующий товар нужно при добавлении нового товара перейти во вкладку Настраиваемые поля и в строке Поиск сопутствующих товаров начать вводить название нужного товара. По мере ввода названия будут отображаться миниатюры товаров, содержащие в название текст, который вы вводите. Поочередно добавляем нужные товары.
После того, как мы добавили нужное количество похожих товаров на сайте будет примерно такая картина.
Как видно у товаров нет цены и кнопки Купить. Для ее добавления нужно отредактировать файл components/com_virtuemart/views/productdetails/tmpl/default_relatedproducts.php, который отвечает за внешний вид сопутствующих товаров в карточке товара. Так же этот файл может располагать в папке с вашим шаблоном по адресу templates/ваш шаблон/html/com_virtuemart/views/productdetails/default_relatedproducts.php.
Весь код в файле
<div class="product-related-products"> <h4><?php echo JText::_('COM_VIRTUEMART_RELATED_PRODUCTS'); ?></h4> <?php foreach ($this->product->customfieldsRelatedProducts as $field) { if(!empty($field->display)) { ?><div class="product-field product-field-type-<?php echo $field->field_type ?>"> <span class="product-field-display"><?php echo $field->display ?></span> </div> <?php } } ?> </div>
Заменим на
<div class="product-related-products"> <h4><?php echo JText::_('COM_VIRTUEMART_RELATED_PRODUCTS'); ?></h4> <?php foreach ($this->product->customfieldsRelatedProducts as $field) { $db = JFactory::getDBO(); $qt='SELECT `product_price` FROM `#__virtuemart_product_prices` WHERE `virtuemart_product_id` = '.$field->custom_value.''; $db->setQuery($qt); $result = $db->loadResult(); $sena = $this->currency->getSymbol(); $knop= '<form method="post" class="product js-recalculate" action="index.php" > <span class="quantity-box"><input type="text" class="quantity-input js-recalculate" name="quantity[]" value="1"/> </span> <span class="quantity-controls js-recalculate"><input type="button" class="quantity-controls quantity-plus" /> <input type="button" class="quantity-controls quantity-minus" /> </span> <span class="addtocart-button" style="width: 100px"> <input type="submit" name="addtocart" class="addtocart-button" value="Купить" style="float:left; width: 100px"/> </span> <input type="hidden" value="com_virtuemart" name="option"> <input type="hidden" value="cart" name="view"> <noscript><input type="hidden" name="task" value="add" /></noscript> <input type="hidden" value='.$field->custom_value.' name="virtuemart_product_id[]"> <input type="hidden" value="0" name="virtuemart_category_id[]"></form>'; ?> <div class="product-field product-field-type-<?php echo $field->field_type ?>" style="text-align: center; float:left; width: 33%;"> <span class="product-field-display" style="text-align: center"><?php echo $field->display ?></span> <span class="product-field-desc"><?php echo jText::_($field->custom_field_desc) ?></span><br/> <?php echo $this->currency->createPriceDiv ('salesPrice', 'COM_VIRTUEMART_PRODUCT_SALESPRICE', $result) ?> <span class="product-field-price"><?php echo jText::_($knop) ?></span> </div> <?php } ?> </div>
Чтобы не появились кракозябры предварительно нужно сохранить файл в кодировке UTF-8(без ВОМ). Теперь у нас будет выводится по 3 похожих товара в строке с ценой и кнопкой Купить.
Если кнопка Купить не нужна, то вместо стандартного кода вставляем
<div class="product-related-products"> <h4><?php echo JText::_('COM_VIRTUEMART_RELATED_PRODUCTS'); ?></h4> <?php foreach ($this->product->customfieldsRelatedProducts as $field) { $db = JFactory::getDBO(); $qt='SELECT `product_price` FROM `#__virtuemart_product_prices` WHERE `virtuemart_product_id` = '.$field->custom_value.''; $db->setQuery($qt); $result = $db->loadResult(); $sena = $this->currency->getSymbol(); ?> <div class="product-field product-field-type-<?php echo $field->field_type ?>" style="text-align: center; float:left; width: 33%;"> <span class="product-field-display" style="text-align: center"><?php echo $field->display ?></span> <span class="product-field-desc"><?php echo jText::_($field->custom_field_desc) ?></span><br/> <?php echo $this->currency->createPriceDiv ('salesPrice', 'COM_VIRTUEMART_PRODUCT_SALESPRICE', $result) ?> </div> <?php } ?> </div>
Получается следующее
Если вы хотите выводить не 3 товара, а больше, то в коде нужно изменить значение 33%.
Для вывода цены со скидкой в сопутствующих товарах нужно вставить такой код
<div class="product-related-products"> <h4><?php echo JText::_('COM_VIRTUEMART_RELATED_PRODUCTS'); ?></h4> <?php foreach ($this->product->customfieldsRelatedProducts as $field) { $db = JFactory::getDBO(); $qt='SELECT `product_price` FROM `#__virtuemart_product_prices` WHERE `virtuemart_product_id` = '.$field->custom_value.''; $db->setQuery($qt); $result = $db->loadResult(); $sena = $this->currency->getSymbol(); $db1 = JFactory::getDBO(); $qt1='SELECT `product_override_price` FROM `#__virtuemart_product_prices` WHERE `virtuemart_product_id` = '.$field->custom_value.''; $db1->setQuery($qt1); $result1 = $db1->loadResult(); $sena1 = $this->currency->getSymbol(); ?> <div class="product-field product-field-type-<?php echo $field->field_type ?>" style="text-align: center; float:left; width: 33%;"> <span class="product-field-display" style="text-align: center"><?php echo $field->display ?></span> <span class="product-field-desc"><?php echo jText::_($field->custom_field_desc) ?></span><br/> <?php echo $this->currency->createPriceDiv ('salesPrice', 'COM_VIRTUEMART_PRODUCT_SALESPRICE', $result) ?> <?php if ($result1 > 0){ echo $this->currency->createPriceDiv ('salesPrice', 'COM_VIRTUEMART_PRODUCT_DISCOUNTED_PRICE', $result1) ; } ?> </div>
Получится что-то вроде этого