jomcdonald Posted May 8, 2013 Share Posted May 8, 2013 Bonjour, je retravaille un fichier php et je souhaite intégrer une méthode pour vérifier si un produit existe déjà et le modifier en conséquence. if (le produit existe) { "on ne change rien" } else { "on applique les modification" } Si quelqu'un peut m'aider. Merci Link to comment Share on other sites More sharing options...
Vinum Posted May 9, 2013 Share Posted May 9, 2013 Bonjour, Il faudrait déja savoir sous qu'elle version de Prestashop tu es et comment tu veux faire la recherche. Avec l'ID du produit, sa référence, son nom etc...? Link to comment Share on other sites More sharing options...
jomcdonald Posted May 9, 2013 Author Share Posted May 9, 2013 ps 1.4 et recherche par référence. Merci Link to comment Share on other sites More sharing options...
Vinum Posted May 9, 2013 Share Posted May 9, 2013 (edited) Donc il suffit de regarder dans la classe Product et il existe une fonction pour ça : Product::getByReference($reference) et donc : if(Product::getByReference($reference)) { } else { } La fonction retourne l'ID du produit si il existe sinon false. Edited May 9, 2013 by Vinum (see edit history) Link to comment Share on other sites More sharing options...
jomcdonald Posted May 9, 2013 Author Share Posted May 9, 2013 Ok. Je vais essayer avec ça. Merci Link to comment Share on other sites More sharing options...
franckm1000 Posted May 9, 2013 Share Posted May 9, 2013 (edited) On peut également chercher si l'ID produit existe tout court dans la page où l'on se trouve. En gros, si vous voulez l'ID d'un produit, il faut être sur une page où il existe (par exemple la page produit). Si vous êtes sur une page produit, il est dans l'URL vous pouvez donc le récupérer en faisant: if(Tools::getValue('id_product'){ //mes actions }else{ //pas d'id produit sur cette page } Edited May 9, 2013 by franckm1000 (see edit history) Link to comment Share on other sites More sharing options...
jomcdonald Posted May 9, 2013 Author Share Posted May 9, 2013 Oui, j'ai compris le principe. Pour moi c'est la référence produit que je doit aller chercher. J'ai mis ça en rapport avec ma récupération de donnée. if(Product::getByReference($Product->Name)) On verra si ça marche. Merci Link to comment Share on other sites More sharing options...
franckm1000 Posted May 9, 2013 Share Posted May 9, 2013 Ce n'est pas name mais reference donc plutôt : $Product->reference Et faites attention à la casse, PHP y est sensible. Link to comment Share on other sites More sharing options...
jomcdonald Posted May 9, 2013 Author Share Posted May 9, 2013 Pour moi c'est bien $Product->name, je le récupère du webservice de mon fournisseur. Merci Link to comment Share on other sites More sharing options...
Vinum Posted May 9, 2013 Share Posted May 9, 2013 Bah, il faudrait savoir tu me dis que tu veux faire une recherche par référence et puis maintenant tu fais la recherche avec le nom. Donc la fonction que je t'ai donné ne fonctionnera pas. Une recherche par le nom c'est pas génial, si tu as des produits avec des noms plus ou moins identiques cela va retourner un produit qui peut-être n'existe pas. Donc, il faut d'abord faire une requête SQL sur la table product_lang. $sql = ‘SELECT id_product FROM ‘._DB_PREFIX_.’product_lang WHERE name="'.ton nom a chercher.'"’; $id_product= Db::getInstance()->getValue($sql); if($id_product) { } else { } Link to comment Share on other sites More sharing options...
jomcdonald Posted May 9, 2013 Author Share Posted May 9, 2013 Et bien en fait la référence est donnée par le webservice avec la variable $Product->name donc je pense que c'est bon. Link to comment Share on other sites More sharing options...
Vinum Posted May 10, 2013 Share Posted May 10, 2013 Bonjour, Si ton problème est résolu pense à éditer ton message et à mettre [RESOLU] devant ton titre. Link to comment Share on other sites More sharing options...
jomcdonald Posted May 11, 2013 Author Share Posted May 11, 2013 Parfait, je viens de tester le code ce matin et cela fonctionne parfaitement. Merci Merci J'ai juste un dernier petit problème concernant une autre fonctionnalité, il s'agit de l'importation des images du webservice vers mon prestashop. Pour l'instant, l'importation se faisait avec l'ancien système d'image hors je suis passé au nouveau et je cherche comment importer avec la bonne url mes images. Pour l'instant, quand j'importe mes images, j'ai une image 404, l'image s'enregistre sur l'ancien système et je suis obligé de régénérer les images pour qu'elles s'affichent correctement. Voici la parti intégration image: // Images $i = 0; foreach ($Product->Images->children() as $img) { $tempFileRaw = file_get_contents('http://www.xxxxx.com/images/products/' . $img); $imageData = array( 'id_product' => $idProduct, 'position' => $i+1, 'cover' => ($i == 0 ? 1 : 0) ); $db->autoExecute(_DB_PREFIX_ . "image", $imageData, 'INSERT'); $idImage = $db->Insert_ID(); $imageLangData = array( 'id_image' => $idImage, 'id_lang' => 2, 'legend' => pSQL(ucfirst(strtolower($Product->Description))) ); $db->autoExecute(_DB_PREFIX_ . "image_lang", $imageLangData, 'INSERT'); $image = new Image($idImage); $imgFile = _PS_PROD_IMG_DIR_ . $idProduct . '-' . $idImage . '.jpg'; file_put_contents($imgFile, $tempFileRaw); $imagesTypes = ImageType::getImagesTypes('products'); foreach ($imagesTypes AS $k => $imageType) { imageResize($imgFile, _PS_PROD_IMG_DIR_ . $idProduct . '-' . $idImage . '-' . stripslashes($imageType['name']) . '.' . $image->image_format, $imageType['width'], $imageType['height'], $image->image_format); } $i++; } Je présume qu'il faut changer $imgFile = _PS_PROD_IMG_DIR_ . $idProduct . '-' . $idImage . '.jpg'; par le nouveau système d'image mais je ne trouve pas le code adéquat. Si vous avez une idée. Link to comment Share on other sites More sharing options...
Vinum Posted May 12, 2013 Share Posted May 12, 2013 Bonjour, Normalement tu aurais dû clore ce topic en le mettant résolu et tu aurais dû en ouvrir un nouveau. Car cette nouvelle question ne correspond pas au titre de ton topic. Mais pour l'url tu as cette fonction : $url_image=$image->getExistingImgPath(); Link to comment Share on other sites More sharing options...
jomcdonald Posted May 12, 2013 Author Share Posted May 12, 2013 Merci pour ça. Mais j'ai l'impression que cette méthode sert pour l'url hors pour moi, je cherche à importer l'image dans le fichier correspondant. Exemple: /img/p/2/5/4/0/9/25409.jpg Alors que là ça va me renvoyer: 25409-home/amplificateur-large-bande-15-18db.jpg Par contre je n'ai pas fermé le topic car la méthode que vous m'avez donné ne marche pas. J'ai crié victoire trop vite. Je pense que dans mon cas il faut un autre système pour vérifier si la référence est déjà existante dans la BDD. Merci Link to comment Share on other sites More sharing options...
Vinum Posted May 12, 2013 Share Posted May 12, 2013 Pour moi la requête sql que je t'ai donnée fonctionne très bien donc tu dois mal faire quelque chose. Pour l'url de l'image c'est pareil cette fonction retourne bien : img/p/1/2/3/4/1234.jpg si tu utilises le nouveau système et l'autre url si tu utilises l'ancien. Link to comment Share on other sites More sharing options...
jomcdonald Posted May 13, 2013 Author Share Posted May 13, 2013 J'ai voulu faire un test avec un fichier php . Voici mon code: <?php $ref = 'EBP04L'; $sql = "SELECT id_product FROM " . _DB_PREFIX_ . "product WHERE reference = '$ref' AND supplier_reference = '$ref'"; $id_product= Db::getInstance()->getValue($sql); if($id_product) { echo "le produit existe"; } else { echo "Pas de produit"; } ?> Y a t'il une faute dans mon code. Sachant que ce code là me renvoi une erreur 500 si je l'effectue. Merci Link to comment Share on other sites More sharing options...
Vinum Posted May 13, 2013 Share Posted May 13, 2013 Bonjour, Apparemment soit tu ne lis pas les messages correctement soit tu n'en fait qu'à ta tête. Tu dis que tu fais la recherche par référence, puis finalement c'est par nom. Je te donne un bout de code avec une recherche par nom et tu ré-utilises la reference. Donc la franchement je ne sais plus ce que tu veux exactement ?????? Mais bon pour ta requête, la bonne syntaxe est : $sql = 'SELECT id_product FROM '. _DB_PREFIX_ .'product WHERE reference ="'.$ref.'" AND supplier_reference ="'.$ref.'"'; Il faut faire attention aux ' et "; Link to comment Share on other sites More sharing options...
jomcdonald Posted May 13, 2013 Author Share Posted May 13, 2013 J'avoue ne pas connaitre le php mais depuis le début ma recherche se fait par référence produit (voir post n°3) et pour moi $sql = 'SELECT id_product FROM '. _DB_PREFIX_ .'product WHERE reference ="'.$ref.'" AND supplier_reference ="'.$ref.'"'; est une recherche par référence produit. Pour info, si vous me relisez (voir post n°9 et 11) la référence produit et récupérer du webservice de mon fourniseur avec la variable $Product->name. Vous avez peut être fait une confusion. Link to comment Share on other sites More sharing options...
Vinum Posted May 13, 2013 Share Posted May 13, 2013 donc cette requête doit fonctionner. Link to comment Share on other sites More sharing options...
jomcdonald Posted May 13, 2013 Author Share Posted May 13, 2013 Et pourtant, je viens de faire le test à l'instant et erreur 500. <?php $ref = 'EBP04L'; $sql = 'SELECT id_product FROM '. _DB_PREFIX_ .'product WHERE reference ="'.$ref.'" AND supplier_reference ="'.$ref.'"'; $id_product= Db::getInstance()->getValue($sql); if($id_product) { echo "le produit existe"; } else { echo "Pas de produit"; } ?> J'avoue ne pas comprendre ?? Link to comment Share on other sites More sharing options...
Vinum Posted May 13, 2013 Share Posted May 13, 2013 (edited) Si tu lances ton script comme ça effectivement cela ne fonctionnera pas car il utilise des fonctions prestashop. Donc il faut d'abord initialiser Prestashop. <?php include('config/config.inc.php'); $ref = 'MYREF34'; $sql = 'SELECT id_product FROM ' . _DB_PREFIX_ . 'product WHERE reference = "'.$ref.'" AND supplier_reference = "'.$ref.'"'; $id_product= Db::getInstance()->getValue($sql); if($id_product) { echo "le produit existe"; } else { echo "Pas de produit"; } ?> Regardes le include si tu places ton fichier à la racine de prestashop. PS: Ce script ne fonctionne pas si tu as des déclinaisons de produits. Edited May 13, 2013 by Vinum (see edit history) Link to comment Share on other sites More sharing options...
jomcdonald Posted May 13, 2013 Author Share Posted May 13, 2013 (edited) Ok ça marche. Donc le problème vient peut-être du fait que sur mon fichier php, l'appel include('config/config.inc.php'); n'est pas présent. Voici ce qui est présent au début du fichier: <?php error_reporting(0); ini_set('max_execution_time', 0); // Aucune limite d'execution include_once(PS_ADMIN_DIR.'/../classes/AdminTab.php'); require_once(PS_ADMIN_DIR . '/../modules/velleman/libs/velleman.php'); require_once(PS_ADMIN_DIR . '/../modules/velleman/libs/BBCode.class.php'); Donc si je rajoute: <?php error_reporting(0); ini_set('max_execution_time', 0); // Aucune limite d'execution include('config/config.inc.php'); include_once(PS_ADMIN_DIR.'/../classes/AdminTab.php'); require_once(PS_ADMIN_DIR . '/../modules/webservicexxl/libs/webservice.php'); require_once(PS_ADMIN_DIR . '/../modules/webservicexxl/libs/BBCode.class.php'); Cela devrait marcher?? Je ne teste pas pour l'instant de peur d'une instabilité que j'ai déjà rencontré mercredi et qui m'a coûté quelques sueurs froides. Edited May 13, 2013 by jomcdonald (see edit history) Link to comment Share on other sites More sharing options...
Vinum Posted May 13, 2013 Share Posted May 13, 2013 (edited) apparemment dans ton cas plutôt: include('../config/config.inc.php'); Mais j'ai du mal à comprendre pourquoi placer ton fichier dans ton admin et ensuite avoir PS_ADMIN_DIR qui ne sert à rien. Edited May 13, 2013 by Vinum (see edit history) Link to comment Share on other sites More sharing options...
jomcdonald Posted May 13, 2013 Author Share Posted May 13, 2013 (edited) En fait le fichier est dans un module et j'ai fait mon test à la racine. Le fichier n'est aucunement placé dans admin. N'y a t'il pas de possibilité que certaine variable rentre en conflit en intégrant cette include? De toute manière je pense tester cela en local mais j'ai peur que le webservice ne fonctionne plus. Edited May 13, 2013 by jomcdonald (see edit history) Link to comment Share on other sites More sharing options...
Vinum Posted May 13, 2013 Share Posted May 13, 2013 si le fichier est dans un module aucun de tes includes n'est bon. Si le module est webservicexxl tes includes devraient être : include('../../config/config.inc.php'); include_once('../../classes/AdminTab.php'); require_once('libs/webservice.php'); require_once('libs/BBCode.class.php'); Link to comment Share on other sites More sharing options...
jomcdonald Posted May 13, 2013 Author Share Posted May 13, 2013 Pourtant c'est ce que le développeur de l'époque a fait et ça marche. Link to comment Share on other sites More sharing options...
Vinum Posted May 13, 2013 Share Posted May 13, 2013 Bah désolé mais si tu as placé ce fichier dans le répertoire du module webservicexxl les includes et require ne peuvent pas fonctionner. Donc je ne comprends pas et je te conseil de contacter le développeur. 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