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

 

<?php if (!empty($this->product->customfieldsSorted['my-position'])) {
    $this->position='my-position';
    echo $this->loadTemplate('customfields');
}
?>

 



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

Создание настраиваемых полей

Для начала создадим несколько типов настраиваемых полей: Строка, Изображение и Атрибут корзины. Для этого заходим в Virtuemart -> Настраиваемые поля и нажимаем в правом верхнем углу кнопку Создать.

создание настраиваемого поля

Тип поля: Строка

С помощью этого поля укажем есть ли товар в наличии. Все настройки приведены на скриншоте.

pole nalichie 206x300

Тип поля: Изображение

Это поле будет, например, выводить картинку Новинка (хотя гораздо проще это реализовать с помощью этого плагина). Настройки приведены на скриншоте.

tip izobrazhenie 229x300

В папку /images/stories/virtuemart/product загрузим необходимые картинки. Далее зайдем в Медиа файлы и синхронизируем картинки.

sinkhronizatsiya izobrazheniy 300x72

Чтобы уменьшить размер миниатюры, нужно зайти в нужную картинку, выбрать Заменить миниатюру изображения и повторно загрузить нужную картинку.

zamena miniatyury izobrazheniya 300x135

Тип поля: Атрибут корзины

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

tip atribut korziny 218x300

Настраиваемые поля созданы, теперь добавим их в нашему товару. Заходим в товар, переходим во вкладку Настраиваемые поля и добавляем все поля.

dobavlenie nastraivaemykh poley 300x117

Вывод настраиваемых полей на странице категории

Начнем с вывода настраиваемого поля Атрибут корзины. Самый простой, на мой взгляд, способ — это вывести на странице категории кнопку Купить. После этого все поля Атрибут корзины появятся автоматически и при выборе разных вариантов цена будет меняться динамически, как на странице товара. Есть и другие способы, но с их помощью мне так и не удалось настроить динамическое изменение цены.

Итак, добавим кнопку Купить на страницу категорий.

1. Скопируем файл components/com_virtuemart/views/productdetails/tmpl/default_addtocart.php в папку components/com_virtuemart/views/category/tmpl.

2. В файле components/com_virtuemart/views/category/tmpl/default.php сразу после

 

// Start the Output
foreach ($this->products as $product) {

 

Вставляем

$this->product = $product;

Получается

 

// Start the Output
foreach ($this->products as $product) { $this->product = $product;

 

3. Для вывода кнопки вставляем в понравившееся место в файле components/com_virtuemart/views/category/tmpl/default.php код

 

<?php
echo $this->loadTemplate('addtocart');
?>

 

Я, например, вставил его сразу после кода, который выводит кнопку «описание товара»

 

<p>
<?php // Product Details Button
echo JHTML::link ($product->link, JText::_ ('COM_VIRTUEMART_PRODUCT_DETAILS'), array('title' => $product->product_name, 'class' => 'product-details'));
?>
</p>

 

 

В результате получится:

atribut korziny na stranitse kategoriy 300x92

Если кнопка купить не нужна на странице категорий, то скрыть ее можно, например, с помощью стилей. В файл /components/com_virtuemart/assets/css/vmsite-ltr.css нужно добавить

 

.spacer .addtocart-bar{
display:none;
}

 


Теперь выведем оставшиеся поля — изображение и строка. Если нужно вывести все настраиваемые поля, которые есть у товаров, то можно просто добавить в файл /components/com_virtuemart/views/category/tmpl/default.php следующий код:

 

<?php $custom_title = null;
if (!empty($product->customfields)) {
foreach ($product->customfields as $field) {
if ($field->is_hidden )
continue;
if ($field->display) { ?>
<span class="product-field-title"><?php echo $field->custom_title ?></span>
<span class="product-field-display"><?php echo $field->display ?></span>
<?php } ?> <?php } ?> <?php }  ?>

 

 

Данный код я добавил перед

 

</div>
<div class="clear"></div>
</div>
<!-- end of spacer -->

 

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

vyvod vsekh nastraivaemykh poley 300x121

Стиль отображения можно легко изменить с помощью css. Например, чтобы убрать название картинки нужно добавить в /components/com_virtuemart/assets/css/vmsite-ltr.css

 

.spacer .vm-img-desc{
display:none;
}

 

 


Но если нужно вывести не все поля, а только некоторые, то можно воспользоваться способом, предложенным на форуме nulled.cc (кстати, там есть и другие варианты вывода настраиваемых полей).

Для начала распечатаем массив данных, чтобы посмотреть какие настраиваемые поля существуют у товара. Для этого перед

 

<!-- end of spacer -->
        </div> <!-- end of product -->

 

Вставим

 

<?php echo '<pre>';
print_r($product->customfields);
echo '</pre>'; ?>

 

В результате получится что-то вроде этого


massiv dannykh o nastraivaemykh polyakh 300x222


Чтобы убрать информацию о настраиваемых полях из категории можно просто закомментировать строчку

 

<?php echo '<pre>';
//print_r($product->customfields);
echo '</pre>'; ?>

 


Имея эти данные можно вывести только поля с наличием, не затрагивая поле с изображением. Для этого нужно добавить

 

<?php if($product->customfields[0]->virtuemart_custom_id == 7){
           echo '<span class="product-field-title">';
       echo $product->customfields[0]->custom_title;
       echo '</span>';
 
       echo '<span class="product-field-display">';
       echo $product->customfields[0]->display;
       echo '</span>';
}
?>

 

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

 

echo '<span class="product-field-title">';
echo $product->customfields[0]->custom_title;
echo '</span>';

 

В итоге получаем

vyvod otdelnogo polya 300x101

P.S.

Описанные способы не претендуют на 100% универсальность. Если у вас есть свои способы вывода настраиваемых полей на странице категорий, то буду рад если вы поделитесь ими в комментариях.