Jump to content
Sign in to follow this  
leos

[Решено] Автоматическая генерация артикула (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) }

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

Share this post


Link to post
Share on other sites
$this->data['sku'] = $autosku_query1->row['sku']++;

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

Далее

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

Share this post


Link to post
Share on other sites
и еще, если усложнить задачу. Я добавляю товар путем копирования предыдущего. 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

Share this post


Link to post
Share on other sites

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

Edited by newjey

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

 

 

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

 

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

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

Share this post


Link to post
Share on other sites

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

 

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;

Share this post


Link to post
Share on other sites

 

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 и т.д.

 

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

Share this post


Link to post
Share on other sites

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

 

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

Share this post


Link to post
Share on other sites

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

 

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

 

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

 

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

 

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

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

 

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

 

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

небольшой LevelUp

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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>

Share this post


Link to post
Share on other sites

Добрый день.

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

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

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

 

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.