freetrax Posted January 14, 2013 Share Posted January 14, 2013 Bonjour, je développe un moteur objet pour faire le liens avec un logiciel de caisse et prestashop. J'ai réussi à utiliser l'ensemble des objets de la class de prestashop, j'en profile pour saluer le travail de l’équipe prestashop qui a fait un travail vraiment remarquable ! Je n'arrive pas a comprendre le fonctionne de la class Image, utilisant uniquement les objets et méthode de la class prestashop je voudrais ajouter des photos a mes produits en utilisant le mécanisme déjà codé. En résumé: j'ai un fichier xml (qui viens du logiciel de caisse) que j’interprète pour recrée le produits, catégorie ... dans le même répertoire j'ai un dossier image ou tout les images sont uploader. J'ai bêtement utiliser le moteur objet avec le code suivant : $g = new Image(0); $g->source_index = 'PATH DE L/image /381253893_847.jpg'; $g->id_product = 343; $g->save(); L'image et bien rajouter dans la base mysql mais elle n'est pas déplacer dans le répertoire des img avec sont id de création \img\p\id de la nouvelle image Je pense qu'il doit avoir une fonction qui fait tout ce travail et qui renvois un objet Image nouvellement crée mais je ne trouve pas ou si vous pouvez m'aidez Merci Link to comment Share on other sites More sharing options...
Broceliande Posted January 14, 2013 Share Posted January 14, 2013 salut, un truc dans le genre devrait faire l'affaire : $imgTypes = ImageType::getImagesTypes('products'); foreach ($imgTypes as $imgType) { imageResize($g->source_index, _PS_PROD_IMG_DIR_.$g->getExistingImgPath().'-'.stripslashes($imgType['name']).'.jpg', (int)($imgType['width']), (int)($imgType['height'])); } Link to comment Share on other sites More sharing options...
PhiLho Posted January 14, 2013 Share Posted January 14, 2013 Je pense que writePostedImageOnDisk()(partie POST) dans classes/webservice/WebserviceSpecificManagementImages.php montre comment tu peux faire. J'y vois, entre autres, l'usage de ImageManager::validateUpload() et de move_uploaded_file(), plus ImageManager::resize(). Link to comment Share on other sites More sharing options...
freetrax Posted January 14, 2013 Author Share Posted January 14, 2013 Merci a vous pour vos réponses , j'ai prit un peux des deux post pour faire une fonction : $g = new Image(0); $g->id_product = 343; $g->save(); $g->createImgFolder(); $imgTypes = ImageType::getImagesTypes('products'); foreach($imgTypes as $value){ ImageManager::resize('381253893_847.jpg', _PS_PROD_IMG_DIR_.'/'.$g->id.'/'.$g->id.'-'.$value['name'].'.jpg',$value['width'],$value['height']); } Mais bon je pense qu'une fonction dans le même style doit être déjà codé, si vous avez une idée n’hésitez pas a compléter ce post Merci Link to comment Share on other sites More sharing options...
Broceliande Posted January 14, 2013 Share Posted January 14, 2013 Merci a vous pour vos réponses , j'ai prit un peux des deux post pour faire une fonction : $g = new Image(0); $g->id_product = 343; $g->save(); $g->createImgFolder(); $imgTypes = ImageType::getImagesTypes('products'); foreach($imgTypes as $value){ ImageManager::resize('381253893_847.jpg', _PS_PROD_IMG_DIR_.'/'.$g->id.'/'.$g->id.'-'.$value['name'].'.jpg',$value['width'],$value['height']); } Mais bon je pense qu'une fonction dans le même style doit être déjà codé, si vous avez une idée n’hésitez pas a compléter ce post Merci A la différence près que ImageManager n'existe pas dans la 1.4.x . A l'inverse imageResize fonctionne dans les deux cas même si dépréciée. Je suis aussi assez surpris de que tu ne donnes pas le path complet de ton image et que ça fonctionne : ImageManager::resize('381253893_847.jpg'..... C'est pourquoi j'appelais $g->source_index rapport à ton propre code. Link to comment Share on other sites More sharing options...
freetrax Posted January 15, 2013 Author Share Posted January 15, 2013 Bonjour, c’était juste pour faire un test j'ai coller l'image dans le répertoire de mon module. Par contre je recherche un guide des fonctions prestashop, car pour l'instant j'utilise NetBean pour coder et je trouver les fonctions grâce a son système de proposition. Il n'y a pas un site pour les dévelopeurs qui explique les fonctions de chaque class prestashop ? un peu comme ApiGen Merci , Link to comment Share on other sites More sharing options...
csid Posted January 15, 2013 Share Posted January 15, 2013 Je suis un peu sur la même problématique... des flux de produits, categories etc... à interfacer avec un prestashop quotidiennement... Je galère à chaque pas car je ne trouve aucune documentation sur les manières de faire des opérations de base. J'ai donc codé une partie en dur (mysql à la mano) avec le risque d'oublier des trucs... Et là pour creer mes produits, mes marques etc... j'ai besoin aussi de créer des images et là... ben j'essaye aussi d'utiliser l'existant. Malheureusement avec le code ci dessus moi aussi ca m'ajoute bien l'image dans la base avec (je pense) toutes les relations mais rien sur disque. J'ai fait un tout petit script à la racine, j'y ai aussi mis une image en jpg mais ... aucune erreur et pas d'image créée sur le disque. Concernant la doc j'ai trouvé qq liens mais il manquerait des exemples des tutos... http://doxygen.prestashop.daviddallet.com/1.5.x/html/classProductCore.html http://doxygen.prestashop.daviddallet.com/1.5.x/html/classCategoryCore.html http://www.collinsharper.com/documentation/prestashop/class_image_core.html Donc avec ca je tâtonne mais pour l'instant j'ai pas fait grand chose de bien efficace. Pourtant je sens bien qu'il y a deja tous les outils pour tout faire et j'enrage... Mais comme je suis pas tombé dans la marmite Objet étant petit.... je patauge! Link to comment Share on other sites More sharing options...
csid Posted January 15, 2013 Share Posted January 15, 2013 (edited) Petit rajout au bout de code : $g = new Image(0); $lefichier='12345654.jpg'; //-- fichier image à mettre sur le produit $g->id_product = 7; //-- produit sur lequel on ajoute l'image $g->save(); //-- je sais pas trop à quoi ca sert...donc je laisse............ $g->createImgFolder(); $imgTypes = ImageType::getImagesTypes('products'); foreach($imgTypes as $value){ //-- on calcule le sous répertoire $ch=$g->id; $chaine=''; for($i=0;$i<strlen($ch);$i++){ $chaine.=$ch[$i].'/'; } ImageManager::resize($lefichier, _PS_PROD_IMG_DIR_.$chaine.$g->id.'-'.$value['name'].'.jpg',$value['width'],$value['height']); } @copy($lefichier, _PS_PROD_IMG_DIR_.$chaine.$g->id.'.jpg'); Comme ca ne marchait pas chez moi j'ai debuggé ancienne ecole... il semble que le stockage des images (pour les produits en tout cas) se fait comme suit : Dans le répertoiredes images produit on crée des sous répertoires selon la règle s'appuyant sur le numéro d'image : si le numéro d'image est 456 on créera le repertoire 4/5/6/ Ceci est fait par createImgFolder() qui se charge aussi de copier un fichier index.php Ensuite pour chaque type d'image enregistré dans PS on crée une image dans ce répertoire (la boucle de resize() ) Comme dans le BO je n'avais pas d'image qui s'affichait en plein ecran je me suis rendu compte que dans la fiche produit onglet images c'est une image nommée avec l'id image tout court qui est affichée et qui semble être l'original de départ. Je copie donc mon image d'origine dans le répertoire dédié. Et pour ce que j'en ai testé pour l'instant ca semble marcher! Et je confirme l'intérêt de ce que disait PhiLho : Je pense que writePostedImageOnDisk()(partie POST) dans classes/webservice/WebserviceSpecificManagementImages.php montre comment tu peux faire.J'y vois, entre autres, l'usage de ImageManager::validateUpload() et de move_uploaded_file(), plus ImageManager::resize(). Edited January 15, 2013 by csid (see edit history) Link to comment Share on other sites More sharing options...
tidjean Posted March 13, 2013 Share Posted March 13, 2013 hello, I fixe it with this code : function create_product_image($source,$pid){ $image = new Image(0); $image->id_product = $pid; $image->cover = 1; $image->save(); $image->createImgFolder(); $imgTypes = ImageType::getImagesTypes('products'); $image_base = _PS_PROD_IMG_DIR_.$image->getExistingImgPath().'.'.$image->image_format; @copy($source, $image_base); foreach($imgTypes as $value){ $t = ImageManager::resize($image_base, _PS_PROD_IMG_DIR_.$image->getExistingImgPath().'-'.stripslashes($value['name']).'.'.$image->image_format,$value['width'],$value['height']); } } 1 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