2011-06-17 83 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-