efostile Posted November 2, 2013 Share Posted November 2, 2013 (edited) Bonjour à tous, Je développe actuellement un module et j'ai bien besoin de vos lumières pour finir le projet ! D'abord, quelques mots à propos du contexte : il s'agit d'un module de type "personnalisation de produits", qui permet à tous les visiteurs de créer leurs propres produits (t-shirts, casquettes, tapis de souris, etc.), en utilisant une bibliothèque de pictogrammes, en saisissant leurs propres textes et/ou en envoyant leurs images. Une grande partie des scripts n'est donc pas intimement liée à Prestashop --- il s'agit grosso modo de comportements jQuery permettant de déplacer les éléments à la souris, d'effectuer des rotations, des redimensionnements, etc. - Les "produits de base" (t-shirts, tapis de souris, etc.) et les pictogrammes prêts à l'emploi sont deux catégories de produits Prestashop. Je parviens correctement à les charger, à les afficher sur le "canevas" offert aux visiteurs, etc. - Lorsque l'utilisateur est satisfait de son produit et qu'il désire le commander, une boucle de traitement vérifie la qualité des images qu'ils ont envoyées, le non-dépassement de la zone imprimable, etc. Je me suis dit que la solution la plus facile pour assurer la commande par la suite consistait à enregistrer la réalisation de chaque client en tant que nouveau produit dans le catalogue. Là encore, c'est OK, à travers la classe Product et la méthode add() --- de nouvelles entrées apparaissent dynamiquement et le client peut ainsi procéder au paiement, revoir son historique, etc. Je parviens également à enregistrer la "composition" qu'il a réalisée, dans un dossier de mon serveur web, sous forme de JPEG. J'aimerai associer cette image au produit correspondant ! Mais je rencontre des difficultés pour associer l'image que j'ai enregistrée --- existe-t-il une méthode aussi simple que add() pour associer dynamiquement une image à un nouveau produit ? Merci beaucoup pour votre éclairage ! Edited November 25, 2013 by efostile (see edit history) Link to comment Share on other sites More sharing options...
efostile Posted November 2, 2013 Author Share Posted November 2, 2013 J'ajoute juste une question subsidiaire : je fais appel à votre propre expérience ; dans mon cas de figure, ne vaut-il pas mieux, finalement, écrire la requête SQL "à la main" plutôt que de faire appel à ce type de fonctions ? Quelles sont les habitudes des créateurs de modules ? Merci ! Link to comment Share on other sites More sharing options...
efostile Posted November 25, 2013 Author Share Posted November 25, 2013 (edited) Hello ! C'est encore moi :-) J'en profite pour publier le résultat de mes recherches, ça pourra peut-être servir à un autre utilisateur par la suite ! J'ai réussi à obtenir le résultat escompté sous PrestaShop 1.5.6. Quelques explications (et donc des mots-clés pour d'éventuelles recherches :-)) - Il s'agit ici d'un script PHP, appelé depuis un bouton d'un module perso (via $.ajax, jQuery) - On crée un nouveau produit à partir d'infos passées dans la requête $_POST - On lui associe une image, précédemment traitée par un autre script PHP Voici mon code commenté : $produit = new Product(12345, true, $cookie->id_lang); // Définition du produit // Je ne complète ici que certains champs $produit->name = "Mon produit"; // En réalité : je prends le résultat de requêtes $_POST, passées au script via un appel $.ajax en jQuery //$produit->name = $titre; //$produit->price = $prix; $produit->category = array(10); // A changer $produit->id_category_default = 10; // A changer $produit->description_short = array((int)(Configuration::get('PS_LANG_DEFAULT')) => 'test'); $produit->link_rewrite = array((int)(Configuration::get('PS_LANG_DEFAULT')) => 'test'); $produit->active = 1; // Le produit est créé dans la table "ps_product" $produit->add(); // On met à jour la table "ps_category_product" $produit->addToCategories($produit->category); $id_product = $produit->id; // Une petite image de test ! :-) $url = "http://static.giantbomb.com/uploads/original/16/161219/2424758-batman_render.png"; // En réalité, je prends ici une image traitée précédemment par un autre script PHP // L'objectif est d'avoir son URL $shops = Shop::getShops(true, null, true); $image = new Image(); // On associe l'id du produit fraîchement créé $image->id_product = $id_product; // On place l'image en tête de position $image->position = Image::getHighestPosition($id_product) + 1; // On en fait l'image de couverture $image->cover = true; // On ajoute l'image à la table "ps_image" if (($image->validateFields(false, true)) === true && ($image->validateFieldsLang(false, true)) === true && $image->add()) { $image->associateTo($shops); // Il s'agit ici d'un appel à la méthode copyImg (ligne 874, controllers/admin/AdminImportController.php) // Si "self" est en-dehors du scope du module, la solution la plus simple // reste de copier-coller la fonction copyImg() dans le présent script et de l'appeler directement if (!self::copyImg($id_product, $image->id, $url, 'products', false)) { $image->delete(); } } C'est pas un modèle du genre, loin de là, mais ça permet de creuser un peu davantage le sujet. Si ça vous sert, c'est fait pour ça :-) Edited November 25, 2013 by efostile (see edit history) Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now