I guys i try to create a custom product from a module with this code :
$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é";
The code works fine, the product was added to the database but wasn't display in the back office, someone have an idea to solve this problem ?
The name and meta keyword field are both multi-language arrays. If you look at AdminImport.php in admin/tabs you'll find the definition for a function:
private static function createMultiLangField($field)
Copy this function into your module and you can use it to create a suitable array for these multi-language fields if you call it by passing your text as the $field
parameter (it will set the value for all languages to the string you pass in). You should also set a default value for the description_short
and link_rewrite
fields:
$object->description_short = array((int)(Configuration::get('PS_LANG_DEFAULT')) => '');
and
$object->link_rewrite = array((int)(Configuration::get('PS_LANG_DEFAULT')) => '');
The second point is that although you've set the default category, you will also have to explicitly set id_category as an array e.g.
$object->category=array(18);
I also think you should then set the categories explicitly with:
$object->updateCategories($object->category, true);
It should then appear in the catalog.