Pergunta

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 ?

Foi útil?

Solução

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.

Outras dicas

You can refer to this example where the author created an import procedure to import products.

Custom Product Import

As you can see after download the ProductImporter.php is that the id_lang is added to each property.

to make the product available, You need to change this:

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

-rk-

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top