Jump to content

Артикул товара был равен id товара?


Recommended Posts

Файл override/classes/Product.php должен содержать следующий код:

<?php
class Product extends ProductCore
{
public function add($autodate = true, $null_values = false)
{
    $result = parent::add($autodate, $null_values);
    $this->reference = $this->id;
    return ($result && $this->save());
}
}

 

Если в классе есть другие методы, то их тоже нужно будет добавить

Link to comment
Share on other sites

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

Чтобы артикул сформировался для старых продуктов, нужно выполнить вот этот SQL-запрос:

UPDATE `ps_product` SET `reference` = `id_product`;

с учетом того, что префикс к престашоповским таблицам = "ps_"

Link to comment
Share on other sites

Файл override/classes/Product.php должен содержать следующий код:

 

<?php
class Product extends ProductCore
{
const REFERENCE_LENGTH = 6;
public function add($autodate = true, $null_values = false)
{
	$result = parent::add($autodate, $null_values);
	$this->reference = $this->id;
	return ($result && $this->update());
}

public function update($null_values = false)
{
       $referenceLength = self::REFERENCE_LENGTH;
       $reference = strlen((string)$this->reference);
       if ($referenceLength > $reference) {
               $referenceLength -= $reference;
               for ($i = 0; $i < $referenceLength; $i++) {
                       $this->reference = '0' . $this->reference;
               }
       }

	return parent::update($null_values);
}
}

 

Артикул обновится после сохранения продукта в админке или после создания нового

Edited by Dzianis Yurevich (see edit history)
Link to comment
Share on other sites

Чтобы применить это ко всем продуктам, нужно запустить вот этот код:

  $products = Db::getInstance()->ExecuteS('SELECT `id_product` FROM `'._DB_PREFIX_.'product`;');
  foreach ($products as $product) {
             $_product = new Product($product['id_product']);
             $_product->update();
  }

 

но только поле перезаписи файла override/classes/Product.php

Edited by Dzianis Yurevich (see edit history)
Link to comment
Share on other sites

Чтобы применить это ко всем продуктам, нужно запустить вот этот код:

  $products = Db::getInstance()->ExecuteS('SELECT `id_product` FROM `'._DB_PREFIX_.'product`;');
  foreach ($products as $product) {
		  $_product = new Product($product['id_product']);
		  $_product->update();
  }

 

но только поле перезаписи файла override/classes/Product.php

этот код в mysql что то не обрабатывается

Link to comment
Share on other sites

это код не mysql, а php. Чтобы его выполнить создай файл в корне магазина, например myscript.php и вставь туда следующее:

 

<?php
require(dirname(__FILE__).'/config/config.inc.php');

$products = Db::getInstance()->ExecuteS('SELECT `id_product` FROM `'._DB_PREFIX_.'product`;');
foreach ($products as $product) {
  $_product = new Product($product['id_product']);
  $_product->update();
}

 

Затем выполни скрипт перейдя по ссылке mysite.com/myscript.php

после чего этот файл лучше удалить

Link to comment
Share on other sites

Попробуй так:

 

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
require(dirname(__FILE__).'/config/config.inc.php');
echo 'Start<br>';
try {   
   $products = Db::getInstance()->ExecuteS('SELECT `id_product` FROM `'._DB_PREFIX_.'product`;');
   foreach ($products as $product) {
   $_product = new Product($product['id_product']);
   $_product->update();
   }
} catch (Exception $e) {
   echo $e->getMessage();
}
echo 'Finish';

 

Что теперь отображается на экране?

Ошибок не должно быть, если только файл не лежит в корне

Link to comment
Share on other sites

А не проще товары создавать импортом и при импорте и в id и в артикуле прописать одно и тоже...и не надо не каких правок файлов...

Link to comment
Share on other sites

А не проще товары создавать импортом и при импорте и в id и в артикуле прописать одно и тоже...и не надо не каких правок файлов...

если оператор захочет добавить в ручную один товар ей нужно будет заглянуть какой же присвоется id товару

Link to comment
Share on other sites

А не проще товары создавать импортом и при импорте и в id и в артикуле прописать одно и тоже...и не надо не каких правок файлов...

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

Link to comment
Share on other sites

В смысле реврайтить надо? Там чпу ссылки автоматически создаются...или их можно указать свои в файле импорта...

Сори, реврайтить не надо. Я упустил момент того, что id тоже указывается в файле импорта (для формирования Reference)

Link to comment
Share on other sites

  • 3 weeks later...

приветствую

может вопрос не совсем в тему : но в бэк офисе на одном товаре несколько артиклей - скажем товар отличается по цветам

при переходе в каталог товара их не видно и не выполняется поиск (если один товар - один артикуль - все ОК) - как сделать чтобы они отображались и можно в бэе офисе его было найти в поиске каталога?

Link to comment
Share on other sites

в бэк офисе на одном товаре несколько артиклей - скажем товар отличается по цветам

при переходе в каталог товара их не видно

"их" - товаров или артиклей?

 

чтобы они отображались и можно в бэе офисе его было найти

"они" - товр или или артикли??

"его" - товар или артикл???

 

уточните вопрос

Link to comment
Share on other sites

пример : товар штаны - их 2 цвета и у каждого свой артикул. я делаю комбинацию и в каждый цвет забиваю нужный артикул. перехожу в каталог - вижу свой товар - но поле для артикула пустое. если зайти в карту товара и затем комбинацию товара - артикулы присутствуют.

так вот вопрос, как то можно сделать или что нужно изменить, чтобы в каталоге товара, в графе артикул можно было видеть все артикулы (разновидности по цветам, размерам и т.д.) принадлежавшие этому товару?

Link to comment
Share on other sites

  • 4 weeks later...

подскажите, пжлст, запустил скирпт чтоб проставелся артикул к уже созданному товару с шестью нулями и всем товаром присвоился одинаковый артикул, а точнее "000000". Почему то номер id товара не подставился

 

 

Получить только вот как:

сначала скрипт в mysql запустил:

 

UPDATE `ps_product` SET `reference` = `id_product`;

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

А можно как нибудь сделать чтоб при запуски скрипта в нем же сначала сразу проставлялись id и лидирующие нули?

Edited by Dmit (see edit history)
Link to comment
Share on other sites

  • 7 months later...
Здравствуйте, воспользовалась данным методом

Вставила код в override/classes/Product.php 
И выполнила QL-запрос: UPDATE `ps_product` SET `reference` = `id_product`; 

Все отлично заработало, одно но в карточке товара отображается старый артикул, хотя в списке товара и в новых товарах, созданных после внедрения кода все норм, т.е. старый артикул только в старых товарах и только в карточке(product.tpl)
 
Я проанализировала и пришла к выводу что дело в коде в списке товаров он: 
{$product.reference} и отображается новый артикул 
а в карточке: 
{$product->reference} 

Плиз, помогите как обновить артикул в карточке товара на новый?
Edited by annetf (see edit history)
Link to comment
Share on other sites

Prestashop 1.5.4

#1054 - Unknown column 'reference' in 'field list'

 

Я так понимаю у меня отсутствует столбик 'reference', но я не уверена что он в  ps_product_shop и должен быть.

 

Если это была попытка сравнять в базе данных id с артикулом, то в ps_product у меня все в норме.

Там id_product такой же как и reference.

 

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

Edited by annetf (see edit history)
Link to comment
Share on other sites

Помогли на prestodev. 

Если товары с комбинациями то необходимо не только для таблицы `ps_product`, но и для таблицы `ps_product_attribute` выполнить запрос... 

Link to comment
Share on other sites

  • 8 months later...

Файл override/classes/Product.php должен содержать следующий код:

<?php
class Product extends ProductCore
{
public function add($autodate = true, $null_values = false)
{
	    $result = parent::add($autodate, $null_values);
	    $this->reference = $this->id;
	    return ($result && $this->save());
}
}
Если в классе есть другие методы, то их тоже нужно будет добавить

 

а для Prestashop 1.6 какой код будет для такой операции?

Link to comment
Share on other sites

  • 2 months later...

Prestashop 1.6 примерно такая же ситуация! В БД добавил поле id_add_employee

Делаю override

Создаю файл product.php

вставляю код

Как вместо звездочек вставить id админа который добавляет продукт? Пробывал ставить значение 4! Но серавно пишется 0 в БД!

<?php
class Product extends ProductCore
{
	public function add($autodate = true, $null_values = false)
	{
			$result = parent::add($autodate, $null_values);
			$this->id_add_employee = ****;
			return ($result && $this->save());
	}
}
Edited by KupueIIIKo (see edit history)
Link to comment
Share on other sites

  • 1 month later...

Файл override/classes/Product.php должен содержать следующий код:

<?php
class Product extends ProductCore
{
public function add($autodate = true, $null_values = false)
{
	    $result = parent::add($autodate, $null_values);
	    $this->reference = $this->id;
	    return ($result && $this->save());
}
}
Если в классе есть другие методы, то их тоже нужно будет добавить

 

У меня 1.5.6.1  

Файла override/classes/Product.php у меня не было я его создал с приведенным выше кодом

Выполнил UPDATE `ps_product` SET `reference` = `id_product`;

во всех созданных товарах артикулу присвоилось id

при создании новых товаров артикулу id не присваивается

может в 1.5.6 нужен другой код или нужно внести изменения в другом файле?

Link to comment
Share on other sites

  • 4 years later...

как сделать это для 1.6?

код

<?php
class Product extends ProductCore
{
public function add($autodate = true, $null_values = false)
{
    $result = parent::add($autodate, $null_values);
    $this->reference = $this->id;
    return ($result && $this->save());
}
}

не работает.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...