В этой статье я хочу рассмотреть вывод похожих (сопутствующих) товаров в virtuemart 2. За основу была взята статья с www.joomla-create.net (рекомендую данный сайт, очень много полезных материалов)

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

vvod sopustvuyushchikh tovarov 300x93

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

vid pokhozhikh tovarov na sayte 238x300

Как видно у товаров нет цены и кнопки Купить. Для ее добавления нужно отредактировать файл 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 похожих товара в строке с ценой и кнопкой Купить.


soputstvuyushchie tovary s tsenoy1 300x124

Если кнопка Купить не нужна, то вместо стандартного кода вставляем

 

<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>

 

Получается следующее

soputstvuyushchie tovary bez knopki kupit 300x111

Если вы хотите выводить не 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>

 

Получится что-то вроде этого


11
Надеюсь, что статья окажется полезной :)