Перейти к содержанию
leos

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

Рекомендуемые сообщения

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

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

В /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) }

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
$this->data['sku'] = $autosku_query1->row['sku']++;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

$autosku_query1 = $this->db->query("SELECT MAX(sku) as sku FROM " . DB_PREFIX . "product");

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А подробнее можно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

что именно подробнее?

решение полностью описано в сообщениях этой темы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Далее

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 продолжал генерироваться?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
и еще, если усложнить задачу. Я добавляю товар путем копирования предыдущего. 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Изменено пользователем newjey

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А можно ли сделать тоже самое, но не со SKU а с Моделью? Чтобы автоматически генерировать модель товара например M00123

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

$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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

 

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

 

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

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

считать число символов и удалять лишние слева, если их больше 6

по ссылке выше все это можно найти

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Еще раз повторюсь... я на 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>

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в целом вроде работает... но мало ли... может в синтаксисе что не так... 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну вот, другое дело!

-Садись, пять! ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну вот, другое дело!

-Садись, пять! ;)

 

Спасибо за помощь :)

небольшой LevelUp

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

			$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>

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добрый день.

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

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

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.