Настройка сопутствующих товаров в 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>
Получится что-то вроде этого

