Crea prodotto da un modulo in Prestashop
-
29-10-2019 - |
Domanda
Ragazzi, provo a creare un prodotto personalizzato da un modulo con questo codice:
$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é";
Il codice funziona bene, il prodotto è stato aggiunto al database ma non è stato visualizzato nel back office, qualcuno ha un'idea di risolvere questo problema?
Soluzione
Il campo Nome e Meta Key Word sono entrambi array multi-linguaggio. Se guardi adminimport.php in admin/tabs troverai la definizione per una funzione:
private static function createMultiLangField($field)
Copia questa funzione nel tuo modulo e puoi usarla per creare un array adatto per questi campi multi-lingua se la chiami passando il testo come il $field
parametro (imposterà il valore per tutte le lingue sulla stringa in cui si passa). Dovresti anche impostare un valore predefinito per il description_short
e link_rewrite
campi:
$object->description_short = array((int)(Configuration::get('PS_LANG_DEFAULT')) => '');
e
$object->link_rewrite = array((int)(Configuration::get('PS_LANG_DEFAULT')) => '');
Il secondo punto è che sebbene tu abbia impostato la categoria predefinita, dovrai anche impostare esplicitamente ID_Category come array EG
$object->category=array(18);
Penso anche che dovresti quindi impostare esplicitamente le categorie:
$object->updateCategories($object->category, true);
Dovrebbe quindi apparire nel catalogo.
Altri suggerimenti
È possibile fare riferimento a questo esempio in cui l'autore ha creato una procedura di importazione per importare prodotti.
Importazione del prodotto personalizzata
Come puoi vedere dopo il download il productimporter.php è che l'ID_LANG viene aggiunto a ciascuna proprietà.
Per rendere disponibile il prodotto, devi cambiare questo:
$object->active = 1; // sets the product as active for shop
-rk-