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?

Était-ce utile?

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-

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top