Créer un produit à partir d'un module dans prestashop
-
29-10-2019 - |
Question
Les gars, j'essaye de créer un produit personnalisé à partir d'un module avec ce 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é";
Le code fonctionne bien, le produit a été ajouté à la base de données mais n'a pas été affiché dans le back-office, quelqu'un a une idée pour résoudre ce problème?
La solution
Le nom et le champ de mot-clé meta sont tous deux des tableaux multilingues.Si vous regardez AdminImport.php dans admin / tabs, vous trouverez la définition d'une fonction:
private static function createMultiLangField($field)
Copiez cette fonction dans votre module et vous pourrez l'utiliser pour créer un tableau approprié pour ces champs multilingues si vous l'appelez en passant votre texte en tant que paramètre $field
(il définira la valeur de toutes les langues sur la chaîne que vouspasser).Vous devez également définir une valeur par défaut pour les champs description_short
et link_rewrite
:
$object->description_short = array((int)(Configuration::get('PS_LANG_DEFAULT')) => '');
et
$object->link_rewrite = array((int)(Configuration::get('PS_LANG_DEFAULT')) => '');
Le deuxième point est que bien que vous ayez défini la catégorie par défaut, vous devrez également définir explicitement id_category comme un tableau, par exemple.
$object->category=array(18);
Je pense également que vous devriez alors définir les catégories explicitement avec:
$object->updateCategories($object->category, true);
Il devrait alors apparaître dans le catalogue.
Autres conseils
Vous pouvez vous référer à cet exemple où l'auteur a créé une procédure d'importation pour importer des produits.
Importation de produits personnalisés
Comme vous pouvez le voir après le téléchargement, ProductImporter.php est que l'id_lang est ajouté à chaque propriété.
pour rendre le produit disponible, vous devez modifier ceci:
$object->active = 1; // sets the product as active for shop
-rk-