在prestashop中从模块创建产品

时间:2011-06-17 12:26:08

标签: php 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é";

代码工作正常,产品已添加到数据库但未在后台显示,有人有想法解决这个问题吗?

3 个答案:

答案 0 :(得分:11)

name和meta关键字字段都是多语言数组。如果您查看admin / tabs中的AdminImport.php,您将找到函数的定义:

private static function createMultiLangField($field) 

将此功能复制到您的模块中,如果您通过将文本作为$field参数传递来调用它,您可以使用它为这些多语言字段创建合适的数组(它将设置所有语言的值)到你传入的字符串)。您还应该为description_shortlink_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);

然后应该出现在目录中。

答案 1 :(得分:0)

您可以参考此示例,其中作者创建了导入过程的导入过程。

Custom Product Import

正如您在下载后看到的那样,ProductImporter.php是将id_lang添加到每个属性中。

答案 2 :(得分:-1)

要使产品可用,您需要更改此信息:

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

-RK -