jomcdonald Posted February 23 Share Posted February 23 Bonjour, Je recherche à mettre en place une variable pour détecté si un mot précis apparaît dans le titre du produit pour afficher un message personnalisé. Dans les fait, si le titre comporte le mot (Carte électronique) ou (Module) alors afficher (Ni repris, ni échangé). Hors je ne trouve pas quelle variable je pourrais utiliser. Quelqu'un pour m'aider? Merci Link to comment Share on other sites More sharing options...
Mediacom87 Posted February 23 Share Posted February 23 Bonjour, il serait plus simple de partir sur une caractéristique technique de chaque produit pour exprimer cette différence puis l'utiliser pour afficher le message. Link to comment Share on other sites More sharing options...
jomcdonald Posted February 23 Author Share Posted February 23 Oui, cela aurait été idéal mais avec plus de 20.000 références à vérifier et modifié manuellement c'est injouable. D’où mon idée assez universelle et sans prise de tête. Link to comment Share on other sites More sharing options...
EISEAL Posted February 23 Share Posted February 23 (edited) Bonjour, Je ne suis pas un expert mais voici une piste qui peut dépanner : Dans classes/Product.php ajouter cette fonction public static function getProductKeywords($id_product) { // Array avec les mots clé $keywords = array("Carte électronique", "Module"); // Définition de la langue $id_lang = Context::getContext()->language->id; // Requete SQL pour trouver le nom du produit selon la langue $sql = 'SELECT p.`id_product`, pl.`name` FROM `'._DB_PREFIX_.'product` p '.Shop::addSqlAssociation('product', 'p').' LEFT JOIN `'._DB_PREFIX_.'product_lang` pl ON (p.`id_product` = pl.`id_product` '.Shop::addSqlRestrictionOnLang('pl').') WHERE p.`id_product` = '.(int)$id_product.' AND pl.`id_lang` = '.(int)$id_lang.' ORDER BY pl.`name`'; $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow($sql); // Teste si la chaîne contient le mot foreach ($keywords as $keyword) { if (strpos(strtolower($result['name']), strtolower($keyword)) !== false) { return true; } } return false; } Puis dans le fichier tpl où tu souhaites ajouter "ni repri, ni échangé" ajouter : {if Product::getProductKeywords($product.id)} {l s='Ni repri, ni échangé' d='Shop.Theme.Actions'} {/if} Dans la fonction tu modifies la ligne : $keywords = array("Carte électronique", "Module"); attention cela prend en compte les accents ^^ Edited February 23 by EISEAL (see edit history) Link to comment Share on other sites More sharing options...
jomcdonald Posted February 23 Author Share Posted February 23 Merci. Avec cet indice j'ai réussi a utilisé un code beaucoup plus simple sans toucher aux fichiers PHP. Voici le code: {if $product.name|stristr:"Carte" or $product.name|stristr:"CARTE"} {l s='Module ou carte électronique, ni repris, ni échangé' d='Shop.Theme.Actions'} {/if} Par contre, comme c'est sensible à la case, je suis obligé d'utiliser beaucoup de variante d'écriture. Je ne sais pas si il existe une astuce pour tout regrouper dans un code moins répétitif de type: {if $product.name|stristr:"Carte","CARTE","etc..."} Link to comment Share on other sites More sharing options...
EISEAL Posted February 23 Share Posted February 23 (edited) en smarty tu peux utiliser "lower" pour tout mettre en minuscule avant le traitement des données. Essaie avec ça : {if $product.name|lower|stristr:"Carte" or $product.name|lower|stristr:"CARTE"} {l s='Module ou carte électronique, ni repris, ni échangé' d='Shop.Theme.Actions'} {/if} EDIT : Ca du coup : {if $product.name|lower|stristr:"carte"} {l s='Module ou carte électronique, ni repris, ni échangé' d='Shop.Theme.Actions'} {/if} Edited February 23 by EISEAL (see edit history) Link to comment Share on other sites More sharing options...
jomcdonald Posted February 23 Author Share Posted February 23 Parfait, cela marche et m'évite des termes redondants. Juste dernière demande, existe t'il une astuce pour éviter de prendre en compte les mots comportant ces termes? Exemple, si mon produit possède dans son nom "carter" et bien il sera pris en compte alors que ce n'est pas le même type de produit. Il faudrait que la variable traite la valeur de manière stricte. stristr ou strstr semble trop flexible à ce niveau. Link to comment Share on other sites More sharing options...
EISEAL Posted February 23 Share Posted February 23 Je ne suis pas assez calé en Smarty, désolé ^^ Link to comment Share on other sites More sharing options...
jomcdonald Posted February 23 Author Share Posted February 23 Pas grave, on va rester comme ça pour l'instant. Merci beaucoup pour l'aide. 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