Jump to content

Bonne utilisation de la Class Image.php


Recommended Posts

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

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

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

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

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

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

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

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 by csid (see edit history)
Link to comment
Share on other sites

  • 1 month later...

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']);
}
}

  • Like 1
Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...