Автоматический ввод артикула при добавлении товара

  • 38 Ответов
  • 5487 Просмотров

0 Пользователей и 1 Гость просматривают эту тему.

*

Оффлайн Tuzemec

  • ****
  • 225
  • [+]26 / [-]0
  • Пол: Мужской
  • Ня!
    • Просмотр профиля
    • iki.kz - Модный интернет-магазин
И так...
Допустим что необходимо сделать так, чтоб артикул товара добавлялся автоматически при создании товара
и шел не как попало, а по порядку, т.е. "товар = арт.: 1, товар = арт.: 2, товар = арт.: 3,.......... товар = арт.: 205987....."
Для того чтоб артикул товара подставлялся автоматически при добавлении товара делаем следующее:

1. В базе данных меняем тип поля "product_sku" c "char"(символьный) на "integer"(числовой).
    Делается это в таблице "#__virtuemart_products". Не забываем выставить длину поля.
    Мне вполне хватает длины поля равным в 9 пунктов.
2. Открываем файл "ваш_сайт/administrator/components/com_virtuemart/views/product/tmpl/product_edit_information.php"
3. Находим строку под номером 48, ну или если у вас файл уже не раз изменялся, строку со следующим куском кода:
<input type="text" class="inputbox" name="product_sku" id="product_sku" value="<?php echo $this->product->product_sku?>" size="32" maxlength="64" />
4. Меняем на это:
<?php
    
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);
            
$data_sku $db_sku->loadAssoc();
            
$val_sku= (int)$data_sku['product_sku'] + 1;
        }
    echo 
$val_sku.'" size="32" maxlength="64" />'
?>

5. Сохраняем.
6. Проверяем.
7. *DRINK*
« Последнее редактирование: 06.08.2012, 12:58:11 от Tuzemec »
Каждый ваш клик помогает заработать сыну на конфеты
Не дайте ребенку остаться без сладкого! Сделай ТЫЦ!

*

Оффлайн Tuzemec

  • ****
  • 225
  • [+]26 / [-]0
  • Пол: Мужской
  • Ня!
    • Просмотр профиля
    • iki.kz - Модный интернет-магазин
Для того чтоб артикул товара подставлялся автоматически при добавлении товара делаем следующее:

Этот способ имеет один изъян... Артикул идет по порядку, но имеет вид
(при длине поля =9): "Артикул: 109" вместо требуемого "Артикул: 000000109".

Решение:
При изменении типа поля "product_sku" необходимо указать атрибут "UNSIGNED ZEROFILL"
Запрос для изменения типа поля приведен ниже. Не забудьте изменить суффикс таблицы на свой.
ALTER TABLE `kifnr_virtuemart_products` CHANGE `product_sku` `product_sku` INT( 9 ) UNSIGNED ZEROFILL NULL DEFAULT NULL
« Последнее редактирование: 08.05.2012, 18:16:24 от Tuzemec »
Каждый ваш клик помогает заработать сыну на конфеты
Не дайте ребенку остаться без сладкого! Сделай ТЫЦ!

*

Оффлайн Tuzemec

  • ****
  • 225
  • [+]26 / [-]0
  • Пол: Мужской
  • Ня!
    • Просмотр профиля
    • iki.kz - Модный интернет-магазин
У меня есть вопрос касательно проверки артикула, если артикул вводится ручную.
Как реализовать проверку на дубли при сохранении или потере фокуса поля ввода артикула...
Алгоритм такой:
Человек ввел артикул и перешел на другое поле. При этом срабатывает функция,
которая проходит по всем имеющимся записям в БД. Если совпадений не найдено, то
артикул и товар сохраняется, если артикул найден - значит выходит сообщение
"Ошибка! Такой артикул присутствует в БД."
Я понимаю что это может выполнить javascript, но я в нем вообще дуб дубом.
Может кто поможет с решением такой задачи?
Каждый ваш клик помогает заработать сыну на конфеты
Не дайте ребенку остаться без сладкого! Сделай ТЫЦ!

*

Оффлайн TULLIVER

не работает твой метод, после всех проделанных телодвижений в админке появляются только нули в артикуле. Как это можно исправить?!

*

Оффлайн Tuzemec

  • ****
  • 225
  • [+]26 / [-]0
  • Пол: Мужской
  • Ня!
    • Просмотр профиля
    • iki.kz - Модный интернет-магазин
не работает твой метод, после всех проделанных телодвижений в админке появляются только нули в артикуле. Как это можно исправить?!
Первый кто так утверждает. У меня значит и у других работает... Вывод: либо "телодвижения" не в ту сторону, либо... Зачем искать в админке то, что автоматом ставиться будет?
Проверьте еще раз и внимательней с пунктами. Если есть сомнения - гляньте здесь
Каждый ваш клик помогает заработать сыну на конфеты
Не дайте ребенку остаться без сладкого! Сделай ТЫЦ!

*

Оффлайн TULLIVER

Сделал еще раз все по твоим пунктам, в итоге в артикуле у всех товаров появляются девять нулей и все.

*

Оффлайн Tuzemec

  • ****
  • 225
  • [+]26 / [-]0
  • Пол: Мужской
  • Ня!
    • Просмотр профиля
    • iki.kz - Модный интернет-магазин
Сделал еще раз все по твоим пунктам, в итоге в артикуле у всех товаров появляются девять нулей и все.
Мда... случай. Подробности будут? Пути... логи... Версии движка и ВМ... Если не работает, то должно ошибку хотя бы выдать, мол так и так... Не могу установить значение для поля... Код страницы в студию... "не работает" - 99% причин этих слов - это человеческий фактор. изменения по верному адресу?
ваш_сайт/administrator/components/com_virtuemart/views/product/tmpl/product_edit_information.php
В базе изменения какие были сделаны? с какими столбцами?  Каким образом ввод товара происходит? В общем подробности в студию. До этого вводились артикулы какого плана, вида?
Щипцами информацию вытаскивать? Кому это надо? Мне нет. У меня всё работает. =)
« Последнее редактирование: 21.08.2012, 11:11:33 от Tuzemec »
Каждый ваш клик помогает заработать сыну на конфеты
Не дайте ребенку остаться без сладкого! Сделай ТЫЦ!

*

Оффлайн TULLIVER

Все заработало  ^-^ Правда пришлось удалить весь товар и добавить по новой, только так начал вставляться артикул. Видимо какой то глюк VM

Спасибо за помощь!

*

Оффлайн Garyk01

Все заработало  ^-^ Правда пришлось удалить весь товар и добавить по новой, только так начал вставляться артикул. Видимо какой то глюк VM

Спасибо за помощь!

Не надо было так радикально.
Достаточно удалить артикул в карточке и нажать "Сохранить"

*

Оффлайн TULLIVER

Пробовал, мне это не помогло. Пришлось удалять товар. По другому не сработало!!

*

Оффлайн Garyk01

Я тут набросал свой вариант на основе этого решения и немного из этой темы http://joomlaforum.ru/index.php/topic,113509.0.html

Код получился такой:
<?php
    
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->product_id)+rand(intval($this->product->product_id), 9999999);
        }
    echo 
$val_sku.'" size="32" maxlength="64" />'
?>


код получается уникальный случайный.

Прошу сильно не пинать (так как не силен в программировании), а помочь привязать id производителя, как в приведенной теме по VM1.1.
Мои попытки были такие:
<?php
    
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->product_id)+rand(intval($this->product->product_id), 9999999);
            
$list_manufacturer intval($this->product->virtuemart_manufacturer_id);
            
$val_sku $list_manufacturer.'-'.$list_sku;
        }
    echo 
$val_sku.'" size="32" maxlength="64" />'
?>


В самой карточке код выводиться по типу 3-1251257, но дальше нет((((

P.S. еще была попытка добавить и категорию товара, но...... тоже самое
       код такой хотел добавить
$list_category = intval($this->product->virtuemart_category_id);
$val_sku = $list_manufacturer.'-'.$list_category.'-'.$list_sku;

В самой карточке код выводиться по типу 3-10-1251257, но....
И еще возник один вопрос - как правильно переопределить файлы в папке админа (например этот "ваш_сайт/administrator/components/com_virtuemart/views/product/tmpl/product_edit_information.php")?
 
« Последнее редактирование: 10.10.2012, 02:57:09 от Garyk01 »

*

Оффлайн Garyk01

Пробовал, мне это не помогло. Пришлось удалять товар. По другому не сработало!!

Ну если точно, то так - удалить артикул -> кнопка "Сохранить" (формируется новый код) -> кнопка "Сохранить и закрыть".
« Последнее редактирование: 10.10.2012, 00:13:32 от Garyk01 »

*

Оффлайн TULLIVER

Мне это не помогло! и это ФАКТ

*

Оффлайн Garyk01

Да! Ты прав! Я проверял на том, что сам написал.
Сейчас изменил код на родной - а на родном автоматом не присваивается код (((((
Но, все равно, ты радикально поступил - можно было двумя способами прописать код :
1 - в админке каждому старому товару прописать код - ну например 000000001, следующему 00000002 и т.д и сохранить - сохраняется.
Специально проверил
2- в БД зайти в поле ххххх_virtuemart_products и ручками прописать код в product_sku , указанные выше.

Долго. Согласен, но не заводить же весь товар заново.
Думаю, что можно через запрос SQL все это сделать  - но не знаю как правильно  запрос оформить.  

P.S.   Просьба к уважаемым знатокам помочь с кодом, которые прописал на пару постов выше.
И как все таки правильно переопределить файлы в папке админа (например этот "ваш_сайт/administrator/components/com_virtuemart/views/product/tmpl/product_edit_information.php")?
Как файлы сайта переопределить - разобрался, а вот с частью админки - засада. После обновления - все слетело

*

Оффлайн TULLIVER

Согласен, у меня просто напросто было около 40 товаров по этому не сложно было перезабить )))
А так респект тебе, за то что не обламался и решил все перепроверить ))) лови плюс!

*

Оффлайн TULLIVER

И снова кризис, обновился сегодня до версии 2.0.12f!
В итоге снова не работает автоматический ввод артикула, снова проставляет одни нули!

Прошу помощи! Не один из выше представленных вариантов не помогает!

*

Оффлайн Garyk01

Все заново надо наверное.
файлы то переписались.

Только артикулы, после внесения изменения в файл product_edit_information.php и базу, попробуй ручками или в карточке или в БД - а то заново вносить товар жестковато будет...
Надеюсь бекап у тебя остался..

Я кстати чуть раньше говорил об этой проблеме
...
P.S.   Просьба к уважаемым знатокам помочь с кодом, которые прописал на пару постов выше.
И как все таки правильно переопределить файлы в папке админа (например этот "ваш_сайт/administrator/components/com_virtuemart/views/product/tmpl/product_edit_information.php")?
Как файлы сайта переопределить - разобрался, а вот с частью админки - засада. После обновления - все слетело

и просил помощи, но.....пока тишина...
« Последнее редактирование: 09.11.2012, 02:35:00 от Garyk01 »

*

Оффлайн Stasweb

Вот я допустим заменил

с
<input type="text" class="inputbox" name="product_sku" id="product_sku" value="<?php echo $this->product->product_sku?>" size="32" maxlength="64" />
на

<?php
    
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);
            
$data_sku $db_sku->loadAssoc();
            
$val_sku= (int)$data_sku['product_sku'] + 1;
        }
    echo 
$val_sku.'" size="32" maxlength="64" />'
?>

в файле

/administrator/components/com_virtuemart/views/product/tmpl/product_edit_information.php

и он у меня везде ставит артикул 10 автоматически
в чем может быть проблема

*

Оффлайн Stasweb

проблему решил
в pma в virtuemart_products
затем "Структура", product_sku - Изменить,
там заменил char на INT в Numeric

но теперь перестал работать поиск
тоесть теперь не ищит по артикулу вчем тут может быть проблема

вот к примеру http://lik-material.kz/index.php/ru/
и артикул есть с 10-13 но он не находит

*

Оффлайн Dgikar

Так же не получилось воплотить - в артикул, ставит нули. Что сделал:
[spoiler]


В надежде, что теперь, не нужно будет вводить артикул ручками, поле артикула сделал: disabled="disabled"
[/spoiler]
В итоге, получил во такое:
[spoiler]
В админке:


В phpMyAdmin:


То, что выделено красным - это попытка использования кода от Tuzemec. Синим - вводил артикул ручками, пока не нашел эту тему
[/spoiler]

Попробовал код от Garyk01 - да, заработал (и один и второй - в БД - пишет нормально), но, хотелось бы, чтобы артикул, был точно такой же, как и ID товара, ну и конечно же, чтобы поиск так же работал...

Добавлено немного позжее:

Поковырявшись, получилось сделать запись артикула в таком формате: 000000104 (где 104 - ID продукта)
Вот так изменил код от Tuzemec
Код: (php) [Выделить]
<?php
    
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 `virtuemart_product_id` FROM #__virtuemart_products ORDER BY `virtuemart_product_id` DESC LIMIT 1';
            
$db_sku->setQuery($q_sku);
            
$data_sku $db_sku->loadAssoc();
            
$db_sku->next_record();
            
$val_sku= (int)$data_sku['virtuemart_product_id'] + 1;
        }
    echo 
$val_sku.'" size="32" maxlength="64" />'
?>

Правда, при создании товара, в админке, в поле артикул, вбивается только 104, но, в БД, прописывается именно 000000104
« Последнее редактирование: 30.05.2013, 17:40:49 от Dgikar »
Долог путь поучения, короток и успешен путь примеров (Сенека).

*

Оффлайн Tuzemec

  • ****
  • 225
  • [+]26 / [-]0
  • Пол: Мужской
  • Ня!
    • Просмотр профиля
    • iki.kz - Модный интернет-магазин
Еще один вариант автоматического заполнения артикула товара.
В данном варианте артикул получается вида "ВТ-0000000123", где:
"ВТ-" - это префикс артикула;
"0000000123" - это число, равное текущему ID товара;

Код: (php) [Выделить]
<?php
    
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 `virtuemart_product_id` FROM #__virtuemart_products ORDER BY `virtuemart_product_id` DESC LIMIT 1'//Запрос крайнего ID товара
         
$db_sku->setQuery($q_sku); //Получаем последний использованный ID товара, для формирования артикула
         
$data $db_sku->loadAssoc();
         
$data intval($data['virtuemart_product_id'])+1//Прибавляем к полученному ID единицу, для получения нынешнего ID товара
         
$a strlen($data); //Получаем длину значения ID товара             
         
$a 10 $a//10 - это количество цифр в формируемом артикуле
         
$val_sku"BT-"//Префикс артикула
         
for($i=1$i<=$a$i++){
             
$val_sku .= "0"//Циклом заполняем артикул недостающими нулями перед ID товара
         
}
         
$val_sku .= $data//Прибавляем к полученному ID товара             
    
}
    echo 
$val_sku.'" size="32" maxlength="64" />'//Выводим значение в форму     
?>
« Последнее редактирование: 13.08.2013, 15:20:16 от Tuzemec »
Каждый ваш клик помогает заработать сыну на конфеты
Не дайте ребенку остаться без сладкого! Сделай ТЫЦ!

*

Оффлайн LeoShe

Не совсем в тему, но частично касается.
Проблема с выводом артикула (забиваемого ручками) в корзине. Ячейки есть, но пустые.

Вывод заголовка:
<th align="left"><?php echo JText::('COM_VIRTUEMART_CART_SKU')?></th>Вывод значения:
<td align="left"><?php  echo $row->product_sku?></td>
Что не так?

*

Оффлайн Максим Пишняк

  • ******
  • 848
  • [+]35 / [-]0
  • Пол: Мужской
  • Подразделение Virtuemart Украина
    • Просмотр профиля
    • Подразделение Virtuemart Украина - Поддержка и Обучение
Ваша версия? Работает ли на стандартном шаблоне?
Virtuemart 2 работает практически без ошибок. Вы можете поддержать Сообщество, проголосовав за Virtuemart. Присоединяйтесь к нам на Facebook, Google Plus, Linkedin. Подпишитесь на Еженедельник о Virtuemart на Twitter

*

Оффлайн Dgikar

Что мой вариант, что вариант от Tuzemec - оба рабочие на 100%, но вот стал вопрос...:
  • нужно, чтобы в разных категориях, префикс у артикула - был разный...
Кручу, верчу, а придумать - ничего не могу...

И второй вопрос:
  • все то оно, хорошо, но, как бы так модифицировать код, чтобы перед цифрой ID в артикуле, максимально, было:
    • 3-и нуля, если артикул от единицы до девяти;
    • 2-а нуля, если артикул от десяти до девяносто девяти;
    • 1-н ноль, если артикул от ста до "бесконечности"...
Парни, есть идея? Или моя хотелка - из области фантастики*
« Последнее редактирование: 27.10.2013, 08:40:39 от Dgikar »
Долог путь поучения, короток и успешен путь примеров (Сенека).

*

Оффлайн fsv

...//Циклом заполняем артикул недостающими нулями перед ID товара

И второй вопрос:

printf

Пример:  8 цифр, впереди дополняет нулями
Код: (php) [Выделить]
<?php printf("%08d"$my_sku); ?>
« Последнее редактирование: 27.10.2013, 19:53:51 от fsv »
Заказать разработку:    расширения Joomla  |   интерфейсы на javascript(jQuery)  |  мобильные приложения

*

Оффлайн Dgikar

fsv, сорри, я, с PHP, дружу как с нашим президентом...

Не сложно, объяснить (именно кодом), как это:
Код: (php) [Выделить]
<?php printf("%08d"$my_sku?>

прикрутить к коду от Tuzemec?

Заранее благодарю
Долог путь поучения, короток и успешен путь примеров (Сенека).

*

Оффлайн fsv

Не сложно, объяснить (именно кодом), как это:
прикрутить к коду от Tuzemec?
особо не вникал, попробуйте как-то так:
Код: (php) [Выделить]
$val_sku= "BT-".printf("%08d", $data);$a получать уже не надо
Заказать разработку:    расширения Joomla  |   интерфейсы на javascript(jQuery)  |  мобильные приложения

*

Оффлайн Dgikar

... попробуйте как-то так:
Код: (php) [Выделить]
$val_sku= "BT-".printf("%08d", $data);$a получать уже не надо
:( Получатся вот что:
« Последнее редактирование: 27.10.2013, 20:40:20 от Dgikar »
Долог путь поучения, короток и успешен путь примеров (Сенека).

*

Оффлайн fsv

:( Получатся вот что:
Код: (php) [Выделить]
<?php 
echo 'BT-'
printf("%08d"$data); 
?>
Заказать разработку:    расширения Joomla  |   интерфейсы на javascript(jQuery)  |  мобильные приложения

*

Оффлайн robert

Думаю, fsv допустил опечатку
Код: (php-brief) [Выделить]
$val_sku= "BT-".sprintf("%08d", $data);
  • Не будь паразитом, сделай что-нибудь самостоятельно!
  • В личке и по Skype не даю советов.