1. Уважаемые пользователи, прежде чем ответить в теме или создать новую,
    внимательно ознакомьтесь с правилами раздела

    Кому лень работать или руки не оттуда - пользуйтесь услугами специалистов
  2. Не задавайте глупых вопросов "Посоветуйте какой-нибудь компонент.."

    Есть JED!!! Ищите там!!!

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

Тема в разделе "Virtuemart", создана пользователем Garyk01, 9 май 2013.

Информация :
  • Уважаемые пользователи, прежде чем ответить в теме или создать новую, внимательно ознакомьтесь с правилами раздела
  • Не задавайте глупых вопросов "Посоветуйте какой-нибудь компонент.." Есть JED!!! Ищите там!!!
  • Аналоги ищите там же - на JED!!!
  • Новая версия? - У кого будет - тот выложит!
  1. Garyk01

    Garyk01 Постоялец

    Регистр.:
    6 окт 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
     
    Avi, mdmatic и aivalab нравится это.
  2. dimon7772

    dimon7772

    Регистр.:
    1 май 2013
    Сообщения:
    152
    Симпатии:
    27
    А как сделать что бы формировался такой артикул:
    алиаспроизводителя-алиал категории-айдитовара?
     
  3. aivalab

    aivalab

    Регистр.:
    18 ноя 2012
    Сообщения:
    382
    Симпатии:
    135
    Работает ли на VM3 ?
     
  4. Genk0

    Genk0

    Регистр.:
    2 июн 2010
    Сообщения:
    10
    Симпатии:
    12
    Если присмотреться к коду, то и на тройке будет работать, если совпадают таблицы, а название поля артикула посмотреть в том же файле и заменить его при надобности.
    Ничего сверхъестественного в коде нет, так что заработает на любой версии. Нужно быть внимательнее
     
  5. aivalab

    aivalab

    Регистр.:
    18 ноя 2012
    Сообщения:
    382
    Симпатии:
    135
    Проверил - работает на связке J3.4.1+VM3.0.8
     
  6. romzes6961

    romzes6961 Постоялец

    Регистр.:
    6 дек 2014
    Сообщения:
    137
    Симпатии:
    75
    На этот случай, на просторах интернета нашел прекрасный 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.
     
    spro1 нравится это.
  7. spro1

    spro1

    Регистр.:
    26 май 2013
    Сообщения:
    170
    Симпатии:
    71
    после выполнения этого запроса товарам пристроится артикул, равный имени товара, для того, чтобы был присвоен артикул по 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 выручил, гуглил, гуглил, еле нашел! спасибо, romzes6961
     
  8. korvin222

    korvin222

    Регистр.:
    24 окт 2012
    Сообщения:
    185
    Симпатии:
    130
    А реально этот хак как-то зафиксировать, чтобы он не убирался после обновления виртуемарт? Как с отдельными файлами шаблона, которые можно перенести.
     
  9. dimon7772

    dimon7772

    Регистр.:
    1 май 2013
    Сообщения:
    152
    Симпатии:
    27
    Это вряд ли, при обновлении затрутся, так как не уверен что виртумарт сделает отдельные шаблоны для бэкенда.
     
  10. Dgikar

    Dgikar

    Регистр.:
    9 мар 2008
    Сообщения:
    289
    Симпатии:
    19
    Вот здесь, есть уже решение, НО! С любым из представленных хаков (в том числе и хаки, которые предлагает уважаемый Garyk01), есть траблы: при ИМЕННО дублировании продукта.

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

    А что Вам мешает переопределить в administrator/templates/isis/html/com_virtuemart/product_edit_information.php
     
    Последнее редактирование: 29 дек 2016