2011-06-17 82 views
5

我家伙,我尝试从一个模块中创建一个自定义的产品,这样的代码:从一个模块中创建的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é"; 

的代码工作正常,产品被添加到数据库中,但没有显示在后台,有人有一个想法来解决这个问题?

回答

12

名称和meta关键字字段都是多语言数组。如果你在管理/标签看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); 

应该再出现在目录中。

0

您可以参考本示例,其中作者创建导入过程以导入产品。

Custom Product Import

正如你可以下载后看到ProductImporter.php是,id_lang被添加到每个属性。

-1

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

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

-rk-