Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

[Решено] Автоматическая генерация артикула (SKU)


Recommended Posts

Задался целью проставить артикулы. Проставил. А при добавлении нового товара поле с артикулом пустое, и фиг его знает какой номер я до этого вводил...

Вот и решил, чтобы автоматом создавался артикул.

В /admin/controller/catalog/product.php

после

if (isset($this->request->post['sku'])) {
	   $this->data['sku'] = $this->request->post['sku'];
	 } elseif (!empty($product_info)) {
$this->data['sku'] = $product_info['sku'];
} else {
добавил

$autosku_query1 = $this->db->query("SELECT MAX(sku) FROM " . DB_PREFIX . "product");
$this->data['sku'] = $autosku_query1++;
	 }
По идее, я вытаскиваю максимальное значение и добавляю 1, что и должно показываться...

а вижу это:

<b>Unknown</b>: Object of class stdClass could not be converted to string in <b>/admin/view/template/catalog/product_form.tpl</b> on line <b>74</b>

Далее

echo var_dump($autosku_query1);
показал:

object(stdClass)#172 (3) { ["row"]=> array(1) { ["MAX(sku)"]=> string(5) "12154" } ["rows"]=> array(1) { [0]=> array(1) { ["MAX(sku)"]=> string(5) "12154" } } ["num_rows"]=> int(1) }

Что не так сделал?

Надіслати
Поділитися на інших сайтах

да, думал, что вы делаете "правильную" выборку с использованием алиаса :-)

$autosku_query1 = $this->db->query("SELECT MAX(sku) as sku FROM " . DB_PREFIX . "product");
Надіслати
Поділитися на інших сайтах

  • 2 weeks later...
  • 2 months later...

Далее

echo var_dump($autosku_query1);

показал:

object(stdClass)#172 (3) { ["row"]=> array(1) { ["MAX(sku)"]=> string(5) "12154" } ["rows"]=> array(1) { [0]=> array(1) { ["MAX(sku)"]=> string(5) "12154" } } ["num_rows"]=> int(1) }

не подскажете, куда это вставить?

генерация пошла, начиная с "1", но не пойму, куда вставить этот код, чтобы генерация пошла с "12154"...

и еще, если усложнить задачу.

Я добавляю товар путем копирования предыдущего. SKU в этом случае уже не генерируется, стоит пустое поле. Можно ли и в этом случае как-то решить, чтобы SKU продолжал генерироваться?

Надіслати
Поділитися на інших сайтах


  • 4 weeks later...
и еще, если усложнить задачу. Я добавляю товар путем копирования предыдущего. SKU в этом случае уже не генерируется, стоит пустое поле. Можно ли и в этом случае как-то решить, чтобы SKU продолжал генерироваться?
Попробуйте в /admin/model/catalog/product.php

после

$data['status'] = '0';

вставить

$data['sku'] = $this->db->query("SELECT MAX(sku) as sku FROM " . DB_PREFIX . "product")->row['sku']+1;
  • +1 1
Надіслати
Поділитися на інших сайтах


  • 1 year later...

А можете подсказать как в поле Артикул к новым товарам подставлять id товара автоматически? Или к примеру произвольное число и id товара, к примеру 3458-7689 (где 7689 это id товара).

Змінено користувачем newjey
Надіслати
Поділитися на інших сайтах


  • 2 weeks later...
  • 1 month later...

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

http://www.opencart.com/index.php?route=extension/extension/info&extension_id=16891&filter_search=model%20generator

Надіслати
Поділитися на інших сайтах


  • 3 months later...

Заработало так:

$this->data['sku'] = $autosku_query1->row["MAX(sku)"]+1;
Спасибо за подсказку!

 

 

Все работает... хочу добавить пару улучшений... помогите с реализацией....

 

1. Как добавить шаблон вывода... например не "123", а "000123"

2. При копировании товара как добавить авто инкремент

Надіслати
Поділитися на інших сайтах


Все работает... хочу добавить пару улучшений... помогите с реализацией....

 

1. Как добавить шаблон вывода... например не "123", а "000123"

2. При копировании товара как добавить авто инкремент

 

1) в самом шаблоне делать нужный вывод

2) в файле admin\model\catalog\product.php в функции copyProduct

найти

$data['sku'] = '';

и заменить как выше писали

$data['sku'] = $this->db->query("SELECT MAX(sku) as sku FROM " . DB_PREFIX . "product")->row['sku']+1;
Надіслати
Поділитися на інших сайтах

 

1) в самом шаблоне делать нужный вывод

2) в файле admin\model\catalog\product.php в функции copyProduct

найти

$data['sku'] = '';

и заменить как выше писали

$data['sku'] = $this->db->query("SELECT MAX(sku) as sku FROM " . DB_PREFIX . "product")->row['sku']+1;

 

Спасибо за подсказку!

 

Со вторым пунктом разобрался... 

 

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

у меня был формат из 6 цифр типа такого - "000123" а теперь новые номера генерируются с числом 124, 125 и т.д.

 

как нули дописать в начале ????

Надіслати
Поділитися на інших сайтах


-Садись, два!

 

учите, ну хоть немного.. хоть иногда... :-D

 

в php не особо шарю...

 

так я пробовал... НЕ универсальный метод !

 

что делать когда дойдем до 999... числа пойдут 0001000... 7 знаков,  а нужно чтобы было 6 знаков 001000

поэтому и спросил... 

 

может есть какая то функция форматирования числа? или еще как то...

Надіслати
Поділитися на інших сайтах


Еще раз повторюсь... я на php программить не умею... 

Поэтому прошу проверить... если есть ошибки поправьте пожалуйста

 

создал vqMod 

 

его текст:

<modification>
	<id>Auto Increment Model Number</id>         
    <version>1.0</version>         
    <vqmver>2.2.2</vqmver>         
    <author>xxx</author>
       
	<file name="admin/controller/catalog/product.php"> 
             <operation>
             <search position="replace"><![CDATA[$this->data['model'] = '';]]></search>
             <add><![CDATA[
			$max_number_lenght = 6;
			$model_number = $this->db->query("SELECT MAX(model) FROM " . DB_PREFIX . "product")->row["MAX(model)"]+1;
			$model_number = "00000" . $model_number;
			$len = strlen($model_number);
			if($len > $max_number_lenght){
				$model_number = substr($model_number, $len - $max_number_lenght, $max_number_lenght); 
			}
			$this->data['model'] = $model_number;
			 ]]></add>
             </operation>
    </file>		
	<file name="admin/model/catalog/product.php"> 
             <operation>
             <search position="before"><![CDATA[$data['sku'] = '';]]></search>
             <add><![CDATA[
			$max_number_lenght = 6;
			$model_number = $this->db->query("SELECT MAX(model) FROM " . DB_PREFIX . "product")->row["MAX(model)"]+1;
			$model_number = "00000" . $model_number;
			$len = strlen($model_number);
			if($len > $max_number_lenght){
				$model_number = substr($model_number, $len - $max_number_lenght, $max_number_lenght); 
			}
			$data['model'] = $model_number;
			 ]]></add>
             </operation>
    </file>
</modification>
Надіслати
Поділитися на інших сайтах


			$model_number = "00000" . $model_number;
			$len = strlen($model_number);
			if($len > $max_number_lenght){
				$model_number = substr($model_number, $len - $max_number_lenght, $max_number_lenght); 
			}
			$data['model'] = $model_number;
:mellow:  :twisted:

>>

			$data['model'] = str_repeat('0', ($max_number_lenght - strlen($model_number))).$model_number;
Надіслати
Поділитися на інших сайтах

О... крутяк :) Спасибо!

Pro-код пошел :)

Оптимизировал: 

<modification>
	<id>Auto Increment Model Number</id>         
    <version>1.0</version>         
    <vqmver>2.2.2</vqmver>         
    <author>xxx</author>
       
	<file name="admin/controller/catalog/product.php"> 
             <operation>
             <search position="replace"><![CDATA[$this->data['model'] = '';]]></search>
             <add><![CDATA[
			$max_number_lenght = 6;
			$model_number = $this->db->query("SELECT MAX(model) FROM " . DB_PREFIX . "product")->row["MAX(model)"]+1;
			$this->data['model'] = str_repeat('0', ($max_number_lenght - strlen($model_number))).$model_number;
			 ]]></add>
             </operation>
    </file>		
	<file name="admin/model/catalog/product.php"> 
             <operation>
             <search position="before"><![CDATA[$data['sku'] = '';]]></search>
             <add><![CDATA[
			$max_number_lenght = 6;
			$model_number = $this->db->query("SELECT MAX(model) FROM " . DB_PREFIX . "product")->row["MAX(model)"]+1;
			$data['model'] = str_repeat('0', ($max_number_lenght - strlen($model_number))).$model_number;
			 ]]></add>
             </operation>
    </file>
</modification>
Надіслати
Поділитися на інших сайтах


  • 2 weeks later...

Добрый день.

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

Теперь столкнулся с необходимостью заполнения поля Артикул, но в ручную перебивать все товары не очень хочется.

Можно ли сделать какой-то запрос к БД чтобы значение из поля Модель скопировалось в поле Артикул? Или какой другой способ может есть?

 

Заранее спасибо

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.