Главная > Joomla > Virtuemart — Вывод у товара надписи «Новинка»

Virtuemart — Вывод у товара надписи «Новинка»

Зачастую при добавлении новых товаров в Virtuemart необходимо выводить соответствующие обозначения этих товаров, таких как «новинка», «спецпредложение» и т.п.

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

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

Задача:

Сделать возможным в карточке товара пометку о том, что он является «новинкой».

Решение:

Самый лучший вариант добавить в карточке товара новое поле (флаг) «новинка». Плюсы в том, что можно в любой момент снять либо сделать товар «новинкой». Отличие от встроенного флага спецпредложения в том, что можно в любой момент снять позицию «новинка» у товара, а так же ее добавить, и товар не будет показываться в других ненужных местах. Существуют более легкие методы решения данной задачи, такие как просто корректирование логики при выводе товаров, когда из запроса из БД вывода товара смотрится дата занесения этого товара, и если дата занесения товара например меньше, чем две недели от текущей даты, то такому товару присваивается статус «новинка». Тут есть один существенный минус — получается каждый добавленный новый товар автоматически получает статус «новинка», что некорректно + по происшествии двух недель у нового товара так же этот статус автоматически пропадает. Так же не забываем сделать как можно большую возможность для видимости этой статьи в сети для этого идеально подходит емейл маркетинг, с помощью этого можно делать рассылки потенциальным клиентам и получать хорошую аудиторию на свой сайт и в результате это даст прирост продажам. Плюс эффект новинки будет привлекать много внимания…

Исполнение:

1. Находим файл «administrator/components/com_virtuemart/html/product.product_form.php«, который отвечает за отображение полей в админке.

В данном файле находим блок (примерно 204 строка)

<tr class="row0">
                                <td  width="21%" ><div style="text-align:right;font-weight:bold;">
                                <?php echo $VM_LANG->_('PHPSHOP_PRODUCT_FORM_PUBLISH') ?>:</div>
                                </td>
                                <td width="79%" > <?php
                                if ($db->sf("product_publish")=="Y") {
                                        echo "<input type=\"checkbox\" name=\"product_publish\" value=\"Y\" checked=\"checked\" />";
                                }
                                else {
                                        echo "<input type=\"checkbox\" name=\"product_publish\" value=\"Y\" />";
                                }
                                        ?></td>
</tr>

После него добавляем наш новый флаг «Новинка».

Сразу добавим в языковой файл слово «Новинка», для этого находим файл

«administrator/components/com_virtuemart/languages/product/russian.php«, находим в нем строку (56 строка)

'PHPSHOP_PRODUCT_FORM_PUBLISH' => 'Опубликовать?',

После нее добавляем следующее

'PHPSHOP_PRODUCT_FORM_NEW' => 'Новинка',

Возвращаемся к первому файлу, добавляем после найденного бока следующее:

<tr>
 <td  width="21%" ><div style="text-align:right;font-weight:bold;">
 <?php echo $VM_LANG->_('PHPSHOP_PRODUCT_FORM_NEW') ?>:</div>
 </td>
 <td width="79%" > <?php
 if ($db->sf("product_new")=="Y") {
 echo "<input type=\"checkbox\" name=\"product_new\" value=\"Y\" checked=\"checked\" />";
 }
 else {
 echo "<input type=\"checkbox\" name=\"product_new\" value=\"Y\" />";
 }
 ?></td>
 </tr>

Сохраняем, обновляем администраторский интерфейс карточку товара, в ней появилось необходимое нам поле.

 

 

 

 

 

Делаем синхронизацию нового поля с БД.

Заходим в phpmyadmin, открываем таблицу jos_vm_product , добавлем в нее новое поле, которое имеет следующие параметры:

Поле product_new
Тип CHAR
Длина/значения1 1
Сравнение utf_general_ci
Атрибуты
Null null
По умолчанию2 NULL
Дополнительно
Комментарии

Поле добавлено теперь делаем свзяь поля с БД

Октрываем файл «administrator/components/com_virtuemart/classes/ps_product.php»

В районе 290 строчки находим следующее:

// Insert into DB
 $fields = array ( 'vendor_id' => $vendor_id,
 'product_parent_id' => vmRequest::getInt('product_parent_id'),
 'product_sku' => vmGet($d,'product_sku'),

Добавляем после ‘product_publish’ => $d['product_publish'], в этом запросе следующую строку:

'product_new' => vmGet($d,'product_new'),

Такая комбинация встречается в данном файле 2 раза, первый раз для добавления нового товара (290 строка), второй раз для его изменения (473 строка). То бишь если отредактировать только один раз, то новое поле будет добавляться при создании товара, но потом его нельзя будет отредактировать. Теперь можно зайти в админку и попробовать добавить новый товар с новым параметром, затем попробовать его изменить, если все прошло успешно и все данные нормально сохраняются, значит поле успешно связывается с бд.

Делаем отображения нового поля в категории и карточке товара.

Идем в файл «administrator/com_virtuemart/html/shop_browse_queries.php«, находим строку (37 строка) следующее

$fieldnames = "`#__{vm}_product`.`product_id`, `product_name`, `products_per_row`, `category_browsepage`, `category_flypage`, `#__{vm}_category`.`category_id`, `product_full_image`, `product_thumb_image`, `product_s_desc`, `product_parent_id`, `product_publish`, `product_in_stock`, `product_sku`, `product_url`, `product_weight`, `product_weight_uom`, `product_length`, `product_width`, `product_height`, `product_lwh_uom`, `product_available_date`, `product_availability`, `#__{vm}_product`.`mdate`, `#__{vm}_product`.`cdate`";

Вставляем после «,`product_publish`,» следующее «,`product_publish`, ‘product_new’,» . Сохраняем выходим.

Далее окрываем «administrator/com_virtuemart/html/shop.browse.php» (файл отвечает за «заглушку», которую мы будем использовать в карточке товара и в категории, кто не знает, в данном случае заглушка — это PHP функция, которая выводит данные из нашего нового поля непосредственно на сайте).Находим строку (444строка) :

// Unset these for the next product unset($full_image_width); unset($full_image_height);
$products[$i]['product_name'] = shopMakeHtmlSafe( $product_name ); $products[$i]['product_s_desc'] = $product_s_desc; $products[$i]['product_details'] = $product_details; $products[$i]['product_rating'] = $product_rating;

В конец этого списка добавляем

$products[$i]['product_new'] = $db_browse->f("product_new");

Формируем шаблон категории и карточки товара.

Открываем «components/com_virtuemart/themes/default/templates/browse/ваш шаблон категории«.

В моем случае это browse_4.php.

В файле вывод формируется через функции вида <?php echo $product_title ?>, следовательно, чтобы вывести наше новое поле нужно вставить: <?php echo $product_new ?>.


Комментарии:

Об авторе: admin