Jump to content
Dmit

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

Recommended Posts

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

Share this post


Link to post
Share on other sites

В артикул товара подгружать Id товара...

Share this post


Link to post
Share on other sites

так точно! именно так и надо! Вот как это реализовать?

Share this post


Link to post
Share on other sites

Создать overraid для класса Product и в методе add присваивать артикул

Share this post


Link to post
Share on other sites

не силен в программирование. Можно файлик который нужно просто заменить?

Share this post


Link to post
Share on other sites

Файл 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());
}
}

 

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

Share this post


Link to post
Share on other sites

Код для PS 1.5.*

вставил код но у товара в артикуле все пусто

Share this post


Link to post
Share on other sites

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

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

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

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

Share this post


Link to post
Share on other sites

как в артикул добавить еще спереди нули типа 00000х

Share this post


Link to post
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)

Share this post


Link to post
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)

Share this post


Link to post
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 что то не обрабатывается

Share this post


Link to post
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

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

Share this post


Link to post
Share on other sites

Ошибка HTTP 500 (Internal Server Error): При попытке сервера выполнить запрос возникла неожиданная ситуация.

Share this post


Link to post
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';

 

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

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

Share this post


Link to post
Share on other sites

теперь ошибка

 

 

504 Gateway Time-out

nginx/1.2.6

Share this post


Link to post
Share on other sites

добавьте этот скриптик в крон, отвал по таймауту. Или попросите хостера увеличить max_time_execution

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

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

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

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

Share this post


Link to post
Share on other sites

видимо, не делать "товар+комбинация", а делать просто "товар, размер 35, цвет красньій" - и не использовать комбинации.

Share this post


Link to post
Share on other sites

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

 

 

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

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

 

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

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

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

Edited by Dmit (see edit history)

Share this post


Link to post
Share on other sites
Здравствуйте, воспользовалась данным методом

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

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

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

Share this post


Link to post
Share on other sites
UPDATE `ps_product_shop` SET `reference` = `id_product`;

если преста 15х

Share this post


Link to post
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)

Share this post


Link to post
Share on other sites

Помогли на prestodev. 

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

Share this post


Link to post
Share on other sites

Файл 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 какой код будет для такой операции?

Share this post


Link to post
Share on other sites

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)

Share this post


Link to post
Share on other sites

Файл 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 нужен другой код или нужно внести изменения в другом файле?

Share this post


Link to post
Share on other sites

как сделать это для 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());
}
}

не работает.

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.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  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.


×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More