Создать товар из модуля в prestashop

Ребята, я пытаюсь создать собственный продукт из модуля с помощью этого кода:

$defaultLanguage = new Language((int)(Configuration::get('PS_LANG_DEFAULT')));  
/* Add a new product */
$object = new Product();
$object->price = 22;
$object->id_tax_rules_group = 0;
$object->name = 'test';
$object->id_manufacturer = 0;
$object->id_supplier = 0;
$object->quantity = 1;
$object->minimal_quantity = 1;
$object->additional_shipping_cost = 0; 
$object->wholesale_price = 0;
$object->ecotax = 0;
$object->width = 0;
$object->height = 0;
$object->depth = 0;
$object->weight = 0;
$object->out_of_stock = 0;
$object->active = 0;
$object->id_category_default = 18;
$object->category = 18;
$object->available_for_order = 0;
$object->show_price = 1;
$object->on_sale = 0;
$object->online_only = 1;
$object->meta_keywords = 'test';
if($object->save())
    $object->add();
echo "produit ajouté";

Код работает нормально, продукт был добавлен в базу данных, но не отображался в бэк-офисе, у кого-нибудь есть идея решить эту проблему?


person Awea    schedule 17.06.2011    source источник


Ответы (3)


Поле имени и мета-ключевого слова являются многоязычными массивами. Если вы посмотрите AdminImport.php в admin/tabs, вы найдете определение функции:

private static function createMultiLangField($field) 

Скопируйте эту функцию в свой модуль, и вы можете использовать ее для создания подходящего массива для этих многоязычных полей, если вы вызовете ее, передав свой текст в качестве параметра $field (она установит значение для всех языков в строку, которую вы передаете) . Вы также должны установить значение по умолчанию для полей description_short и link_rewrite:

$object->description_short = array((int)(Configuration::get('PS_LANG_DEFAULT')) => '');

а также

$object->link_rewrite = array((int)(Configuration::get('PS_LANG_DEFAULT')) => '');

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

$object->category=array(18);

Я также думаю, что вам следует явно установить категории с помощью:

$object->updateCategories($object->category, true);

После этого он должен появиться в каталоге.

person Paul Campbell    schedule 18.06.2011

Вы можете обратиться к этому примеру, где автор создал процедуру импорта для импорта продуктов.

Импорт пользовательского продукта

Как вы можете видеть после загрузки ProductImporter.php, id_lang добавляется к каждому свойству.

person julianm    schedule 25.10.2011

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

$object->active = 1; // sets the product as active for shop

-rk-

person gagath    schedule 27.06.2013