Вверх

Блог
RSS лента

Virtuemart: добавляем артикул автоматически к товару и выводим артикул в карточку товара

Vape Shop Эко Заправка

Сегодня понадобилось сделать для магазина на Virtuemart, что бы возле названия товара выводился артикул (код) товара. Все время руцями вводить этот артикул в админке как то не практично. Так как я человек ленивый то мне это вдвойне не хочется делать. Решил я заставить скрипт делать за меня эту работу. И так что имеем, а имеем Joomla 1.5.22 и VirtueMart 1.1.8-COMPLETE PACKAGE.j15

Ну что же начнем трудиться над нашим автоматически добавлением артикула. Для начала вам нужно перейти по вот этому пути: administrator/components/com_virtuemart/classes/ и открыть этот файл ps_product.php. Далее переходите на 76 строку, или ищете:

  1. if (empty( $d["product_sku"])) {
  2.  $vmLogger->err( $VM_LANG->_('VM_PRODUCT_MISSING_SKU',false) );
  3.  $valid = false;
  4. }

И заменяете это всё на:

  1. if (empty( $d["product_sku"])) {
  2.          $q = "SELECT MAX(product_id) AS product_id FROM #__{vm}_product";
  3.            $db->query( $q );
  4.            $db->next_record();
  5.          $list_sku = intval($db->f("product_id"))+rand(intval($db->f("product_id")), 999999999);
  6.          $d['product_sku'] =  ($db->f("product_id")+1).'-'.$list_sku;
  7.          $valid = true;
  8.         }

Первоначальное решение не мое, оно найдено на просторах интернета, но оно мною модернизировано. В моем случае артикул выглядит вот так 23-5961653, где 23 это уникальный ID продукта, всё что через тире это произвольное число которое генерируется на лету. Оно конечно может в каком то случае совпасть, но это маловероятно, да и если совпадет у вас всегда будетуникальный ИД.
($db->f("product_id")+1) означает что мы берем последний ИД из базы и плюсуем ему единичку. Так как в базе аутоинкремент, то все айдишники создаются по порядку и соответственно если мы будем добавлять новый товар то без прибавления единицы мы присваиваем артикулу айдишник предыдущего товара, а так будет свой родной ID товара. Можно и не добавлять единицу, все равно ИД будет уникальный, соответственно и артикул будет так же уникальным. Артикул добавляется автоматически при сохранении товара. так что не удивляйтесь если ничего не отобразиться в поле товара на этапе внесения данных в товар. Когда зайдете в редактирование, то артикул будет на своем месте.

В родном решении вместо ($db->f("product_id")+1) было d['manufacturer_id'], то есть в этом случае брался ИД производителя. Но мне этот вариант не совсем подходил. Но он тоже очень даже работоспособный.

Так с добавлением вроде разобрались, теперь сделаем так что бы наши манипуляции выводились на сайт. Для того что бы артикул выводился возле названия товара при просмотре списка товаров категории, нужно перейти по адресу /components/com_virtuemart/themes/default/templates/browse/ и выбрать там browse_1.php, это если у вас стандартный шаблон, он же default. Теперь вам нужно зайти в админку и перейти в "Настройки", далее "Сайт" и ищем справа "Шаблон категории", у меня там по умолчанию стоял "managed" но так как в папке которую я описал выше, файл не был найден я выбрал browse_1. Так теперь возвращаемся к нашему файлу browse_1.php. примерно на 8-й строке есть:

<?php echo $product_name ?></a>

я же переделал его в такой вид:

<?php echo '<div class="artik">'.$product_sku.'</div>'.$product_name; ?></a>

По сути вам нужно вывести переменную "$product_sku", место расположения у вас будет зависит от ваших потребностей.
Так вроде в категории артикул выводится, теперь выводим его в детальном просмотре или другими словами в карточке товара.

Идем по адресу /components/com_virtuemart/themes/default/templates/product_details/ и ищем flypage.tpl.php, открываем его и идем на 28-ю строку или ищем:

<h1><?php echo $product_name ?> <?php echo $edit_link ?></h1>

и заменяем на:

<h1><?php echo '<div class="artik">'.$product_sku.'</div>'.$product_name; ?> <?php echo $edit_link ?></h1>

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

Не забудьте все по сохранять и по заливать на свои места. У меня всё великолепно работает, надеюсь и у вас так будет. Спасибо за внимание все свободны :)

Ваша оценка: Пусто Средняя: 4.6 (8 votes)

Комментарии

Вот ещё вариант

во flypage в месте, где хотим, что бы отображался артикул пишем следующее <?php echo $product_sku ?>

Емм, а чем ваш вариант

Емм, а чем ваш вариант отличается от моего?
Отсутствием див контейнера и класса, так а как вы дизайн причесывать будете тогда?

Главная | Портфолио | Услуги | Контакты | Блог