Вверх

Блог
RSS лента

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

Прошло уже четыре года с написания мною подобной статьи только для 1.1.8 версии магазина. Время идет, а проблема, почему то не решается. По какой причине разработчики решили, что артикул должны заполнять только вручную не понятно. Ведь большинство людей всё же пытаются автоматизировать этот процесс. Так почему же не сделать где то пункт в админке, активация которого будет отвечать за автоматическое заполнение артикула. И как вариант еще несколько выбираемых полей с вариантом заполнения артикула. Ниже вы увидите, что коду для реализации подобного функционала не много, разве что еще строк 10 добавиться, что бы реализовать выбор вариантов заполнения. И на официальном форуме эту проблему уже не раз подымали. Подымается она с каждой новой версией виртуемарта.

Ну что же ждать когда решат проблему разработчики глупо, сделаем всё сами. И так что нам нужно сделать. Сначала зайти по FTP к файлам вашего сайта, надеюсь, это вы знаете, как сделать, если нет, то переходите сначала в гугл поисковик.

Идем дальше и ищем файл «product_edit_information.php» по адресу «/administrator/components/com_virtuemart/views/product/tmpl/», обратите внимание, что файл находится в админской части сайта, а не просто в компонентах.

Открываем его и ищем строку «<input type="text" class="inputbox" name="product_sku" id="product_sku" value="<?php echo $this->product->product_sku; ?>" size="32" maxlength="64" />»
Для быстрого поиска нажмите в файле CTRL+F и там введите строку поиска.

Когда вы нашли нужную строку удалите её и вместо неё нам нужно добавить следующее:

  1. <?php  
  2.     echo '<input type="text" class="inputbox" name="product_sku" id="product_sku" value="';
  3.           if ($this->product->product_sku) $val_sku= $this->product->product_sku;
  4.                     else {
  5.                         $db_sku = JFactory::getDBO();
  6.                         $q_sku = 'SELECT `product_sku` FROM #__virtuemart_products ORDER BY `product_sku` DESC LIMIT 1';
  7.                         $db_sku->setQuery($q_sku);
  8.                         $db_sku->next_record();
  9.                        $list_sku = intval($this->product->virtuemart_product_id)+rand(intval($this->product->product_id), 999999);
  10.                         $val_sku = intval($this->product->virtuemart_product_id).'-'.$list_sku;
  11.                         }
  12.     echo $val_sku.'" size="32" maxlength="64" />';
  13. ?>

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

В моем случае артикул формируется так ID продукта, это значение у всех продуктов разное, потом идет случайное число. Например, вот так 7-746633. В таком случае первая часть всегда будет уникальной, вторая часть может совпасть, хоть и очень маленький процент вероятности. Но вместе они будут уникальны всегда.

На самом деле вы можете формировать артикул исходя из поставленных задач, если вам нужно вместо ID продукта ID производителя, то выглядеть это будет примерно так:

$val_sku = intval($this->product->virtuemart_manufacturer_id).'-'.$list_sku;

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

Например, если соединить ID товара + ID производителя + случайное число, то тогда это будет выглядеть вот так:
$val_sku = intval($this->product->virtuemart_product_id).'-'.intval($this->product->virtuemart_manufacturer_id).'-'.$list_sku;

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

 

Вторая часть моей статьи это вывод артикула.

Мало того что разработчики не сделали автоматическое заполнение артикула, так они еще и не сделали его вывод, где либо на сайте. Либо я не нашел где это можно сделать в админке и сделал по старинке, вывел его кодом.

Приступим. Идем в папку «/components/com_virtuemart/views/productdetails/tmpl/», там лежит файл «default.php», он то нам и нужен. Обратите внимание, что файл уже в папке компонентов, которые отвечают за вывод информации на сайт, а не админ панели.

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

<?php echo $this->product->product_sku;?>

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

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

Комментарии

Постоянно новый артикул

Очень полезная стать, использовал Ваш метод, все артикулы прописались сразу на всех товарах, но при каждом открытии и редактировании товара артикул меняется на новый. версия вирта 3.0.9. Поможете решить задачку?

Я думаю что как то так <?php

Я думаю что как то так
<?php echo $this->product->manufacturer;?>
Но точно не скажу. Не выводил, а сейчас проверить негде.

вывод производителя

Подскажите а как осуществить вывод названия производителя ?
Пробую вставить

Производитель: <?php echo $product->virtuemart_manufacturer_id ?>

Получаю ---- Производитель: Array

Отправить комментарий

 
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Строки и параграфы переносятся автоматически.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>. Beside the tag style "<foo>" it is also possible to use "[foo]".
  • Image links with 'rel="lightbox"' in the <a> tag will appear in a Lightbox when clicked on.
  • Image links from G2 are formatted for use with Lightbox2
  • Image links with 'rel="lightshow"' in the <a> tag will appear in a Lightbox slideshow when clicked on.
  • Links to HTML content with 'rel="lightframe"' in the <a> tag will appear in a Lightbox when clicked on.
  • Links to video content with 'rel="lightvideo"' in the <a> tag will appear in a Lightbox when clicked on.
  • Links to inline or modal content with 'rel="lightmodal"' in the <a> tag will appear in a Lightbox when clicked on.

Подробнее о форматировании

CAPTCHA
Если вы человек, то тогда введите символы изображенные на картинке ниже
Image CAPTCHA
Введите символы, изображенные на картинке.
Главная | Портфолио | Услуги | Контакты | Блог