Хак Автоматическое добавление артикула товара Virtuemart 2

Garyk01

Постоялец
Регистрация
5 Окт 2012
Сообщения
82
Реакции
30
При создании нового товара данное решение автоматически присваивает артикул товару (product_sku) - J2.5.11 + VM2.0.20b
1) В БД ничего не меняем.
2) Открываем файл "ваш_сайт/administrator/components/com_virtuemart/views/product/tmpl/product_edit_information.php"
3. Строку 54:
PHP:
<input type="text" class="inputbox" name="product_sku" id="product_sku" value="<?php echo $this->product->product_sku; ?>" size="32" maxlength="64" />
меняем на:
PHP:
<?php  //AUTO product_sku
    echo '<input type="text" class="inputbox" name="product_sku" id="product_sku" value="';
          if ($this->product->product_sku) $val_sku= $this->product->product_sku;
                    else {
                        $db_sku = JFactory::getDBO();
                        $q_sku = 'SELECT `product_sku` FROM #__virtuemart_products ORDER BY `product_sku` DESC LIMIT 1';
                        $db_sku->setQuery($q_sku);
                        $db_sku->next_record();
                        $val_sku = intval($this->product->virtuemart_product_id)+rand(intval($this->product->product_id), 999999);
                          }
    echo $val_sku.'" size="32" maxlength="64" />'; 
?>
Арктикул получается - случайное уникальное число - например 827611
PHP:
<?php  //AUTO product_sku
    echo '<input type="text" class="inputbox" name="product_sku" id="product_sku" value="';
          if ($this->product->product_sku) $val_sku= $this->product->product_sku;
                    else {
                        $db_sku = JFactory::getDBO();
                        $q_sku = 'SELECT `product_sku` FROM #__virtuemart_products ORDER BY `product_sku` DESC LIMIT 1';
                        $db_sku->setQuery($q_sku);
                        $db_sku->next_record();
                        $list_sku = intval($this->product->virtuemart_product_id)+rand(intval($this->product->product_id), 999999);
                        $list_manufacturer = intval($this->product->virtuemart_manufacturer_id); // id производителя
                        $val_sku = $list_manufacturer.'-'.$list_sku; // арктикул
                        }
    echo $val_sku.'" size="32" maxlength="64" />'; 
?>
Арктикул получается в таком виде - например 3-195756, где первая цифра - id производителя, вторая часть - случайное уникальное число
PHP:
<?php  //AUTO product_sku
    echo '<input type="text" class="inputbox" name="product_sku" id="product_sku" value="';
          if ($this->product->product_sku) $val_sku= $this->product->product_sku;
                    else {
                        $db_sku = JFactory::getDBO();
                        $q_sku = 'SELECT `product_sku` FROM #__virtuemart_products ORDER BY `product_sku` DESC LIMIT 1';
                        $db_sku->setQuery($q_sku);
                        $db_sku->next_record();
                        $list_sku = intval($this->product->virtuemart_product_id)+rand(intval($this->product->product_id), 999999);
                        $list_manufacturer = intval($this->product->virtuemart_manufacturer_id); // id производителя
                        $list_category = intval($this->product->virtuemart_category_id); // id категории
                        $val_sku = $list_manufacturer.'-'.$list_category.'-'.$list_sku; // арктикул
                        }
    echo $val_sku.'" size="32" maxlength="64" />'; 
?>
Арктикул получается в таком виде - например 1-3-236190, где первая цифра - id производителя, вторая - id категории, третья часть - случайное уникальное число

Внимание!
Если используется второй или третий вариант, то при создании нового товара арктикул будет в виде 0-869720 или 0-0-869720 так как еще нет ни производителя , ни категории.
Поэтому после привязки производителя и категории к новому товару - нужно удалить арктикул и нажать кнопку "Сохранить" - присвоится новый арктикул с учетом производителя и категори. Аналогично можно проделать и со старыми артикулами - чтобы привести все к одной структуре.

P.S. Сохраняйте копию файла "ваш_сайт/administrator/components/com_virtuemart/views/product/tmpl/product_edit_information.php" перед обновлением версии VM - после обновления нужно будет восстановить изменения в этом файле

Приведу еще один вариант - на любителя:
PHP:
<?php  //AUTO product_sku
    echo '<input type="text" class="inputbox" name="product_sku" id="product_sku" value="';
          if ($this->product->product_sku) $val_sku= $this->product->product_sku;
                    else {
                        $db_sku = JFactory::getDBO();
                        $q_sku = 'SELECT `product_sku` FROM #__virtuemart_products ORDER BY `product_sku` DESC LIMIT 1';
                        $db_sku->setQuery($q_sku);
                        $db_sku->next_record();
                        $list_sku = intval($this->product->virtuemart_product_id) + 1; // id товара + 1
                        $list_manufacturer = intval($this->product->virtuemart_manufacturer_id);// id производителя
                        $list_category = intval($this->product->virtuemart_category_id); // id категории
                        $val_sku = '0'.$list_manufacturer.'-0'.$list_category.'-00'.$list_sku; // арктикул
                        }
    echo $val_sku.'" size="32" maxlength="64" />'; 
?>
Арктикул получается в таком виде - например 01-03-0023, где первая цифра - id производителя, вторая - id категории, третья - id товара + 1
 
А как сделать что бы формировался такой артикул:
алиаспроизводителя-алиал категории-айдитовара?
 
Работает ли на VM3 ?
 
Работает ли на VM3 ?
Если присмотреться к коду, то и на тройке будет работать, если совпадают таблицы, а название поля артикула посмотреть в том же файле и заменить его при надобности.
Ничего сверхъестественного в коде нет, так что заработает на любой версии. Нужно быть внимательнее
 
Если присмотреться к коду, то и на тройке будет работать, если совпадают таблицы, а название поля артикула посмотреть в том же файле и заменить его при надобности.
Ничего сверхъестественного в коде нет, так что заработает на любой версии. Нужно быть внимательнее
Проверил - работает на связке J3.4.1+VM3.0.8
 
На этот случай, на просторах интернета нашел прекрасный SQL запрос, который позволяет присвоить артикул для каждого товара, артикул будет соответствовать ID товара:
Код:
UPDATE #_virtuemart_products p, #_virtuemart_products_ru_ru pp
SET p.product_sku = pp.product_name
WHERE
p.virtuemart_product_id = pp.virtuemart_product_id
Вместо решетки указывайте свой префикс таблицы.
для выполнения данного запроса используется утилита phpMyAdmin.
 
На этот случай, на просторах интернета нашел прекрасный SQL запрос, который позволяет присвоить артикул для каждого товара, артикул будет соответствовать ID товара:
Код:
UPDATE #_virtuemart_products p, #_virtuemart_products_ru_ru pp
SET p.product_sku = pp.product_name
WHERE
p.virtuemart_product_id = pp.virtuemart_product_id
Вместо решетки указывайте свой префикс таблицы.
для выполнения данного запроса используется утилита phpMyAdmin.
после выполнения этого запроса товарам пристроится артикул, равный имени товара, для того, чтобы был присвоен артикул по id надо такой запрос:
Код:
UPDATE #_virtuemart_products p, #_virtuemart_products_ru_ru pp
SET p.product_sku = pp.virtuemart_product_id
WHERE
p.virtuemart_product_id = pp.virtuemart_product_id

p.s. как всегда nulled выручил, гуглил, гуглил, еле нашел! спасибо, Для просмотра ссылки Войди или Зарегистрируйся
 
А реально этот хак как-то зафиксировать, чтобы он не убирался после обновления виртуемарт? Как с отдельными файлами шаблона, которые можно перенести.
 
А реально этот хак как-то зафиксировать, чтобы он не убирался после обновления виртуемарт? Как с отдельными файлами шаблона, которые можно перенести.
Это вряд ли, при обновлении затрутся, так как не уверен что виртумарт сделает отдельные шаблоны для бэкенда.
 
Вот Для просмотра ссылки Войди или Зарегистрируйся, есть уже решение, НО! С любым из представленных хаков (в том числе и хаки, которые предлагает уважаемый Garyk01), есть траблы: при ИМЕННО дублировании продукта.

Вот Для просмотра ссылки Войди или Зарегистрируйся, человек предлагает решение, но если честно, я, не понял как его сделать... Может кто-то поможет/объяснит...?

А реально этот хак как-то зафиксировать, чтобы он не убирался после обновления виртуемарт? Как с отдельными файлами шаблона, которые можно перенести.
А что Вам мешает переопределить в administrator/templates/isis/html/com_virtuemart/product_edit_information.php
 
Последнее редактирование:
Назад
Сверху