magicJu Posted March 12, 2014 Share Posted March 12, 2014 (edited) Bonjour,J'aimerai afficher une image en fonction des caractéristique des produits (cette fonctionnalité n'étant visiblement pas prévue alors que pas mal de personnes la réclame !).Par exemple, pour un produit virtuel (une vidéo), je peux avoir : Stre@ming, Téléchargement, les deuxPour chaque valeur, j'ai une image placée dans le dossier img/features de mon thème.Mes images portent l'ID de la value (15, 16, ...). Car si je leur donne le nom de la value, j'ai un problème en multilangue (et avec les espaces, accents, ...)Sur ma fiche produit, je peux afficher la caractéristique ainsi que sa valeur : $feature.name & $feature.valuePar contre, je ne peux pas accéder à l'ID de la valeur.Mon code : {foreach from=$features item=feature} {if isset($feature.name)} <td><img src="{$img_dir}features/{$feature.????}.png" alt="{$feature.name} : {$feature.value}"/></td> {/if} {/foreach} Un {$feature|@print_r} Me donne par exemple pour la langue : Array ( [name] => Langue [value] => Anglais [id_feature] => 1 ) 1 Y-a-t-il un moyen d'accéder à la colonne "id_feature_value" de la table "ps_feature_value" pour récupérer l'id et le placer dans mon chemin vers l'image ?Merci d'avance ! Edited March 14, 2014 by magicJu (see edit history) Link to comment Share on other sites More sharing options...
magicJu Posted March 14, 2014 Author Share Posted March 14, 2014 Bonjour, Personne pour m'aider ? Merci ! Link to comment Share on other sites More sharing options...
Raph59 Posted March 14, 2014 Share Posted March 14, 2014 peut être ceci, à tester car j'ai été voir vite fait mais j'ai pas vérifié si sa fonctionne {foreach from=$features item=feature} {if isset($feature.name) && isset($feature.id_feature)} <td><img src="{$img_dir}features/{$feature.id_feature}.png" alt="{$feature.name} : {$feature.value}"/></td> {/if} {/foreach} Link to comment Share on other sites More sharing options...
magicJu Posted March 14, 2014 Author Share Posted March 14, 2014 Salut, Merci mais ça ne fonctionne pas !!! Ca retourne l'ID de la caractéristique et non de la valeur ! J'ai essayé avant de poster !! Link to comment Share on other sites More sharing options...
Raph59 Posted March 14, 2014 Share Posted March 14, 2014 Ha oui en effet désolé, je peux vous expliquer vite fait en modifiant à l'arrache car malheureusement cet ID n'est pas dans la requête, mais il faut savoir qu'on peux faire ca mieux en utilisant l'override pour être tranquille lors des mise à jours... Dans classes/Product.php proche de la ligne 4000 (selon la version..) dans la fonction getFrontFeaturesStatic, ajouter simplement pf.id_feature_value dans la requête SQL, sa donne donc ceci au final SELECT name, value, pf.id_feature, pf.id_feature_value Et enfin ceci dans le fichier thème {foreach from=$features item=feature} {if isset($feature.name) && isset($feature.id_feature_value)} <td><img src="{$img_dir}features/{$feature.id_feature_value}.png" alt="{$feature.name} : {$feature.value}"/></td> {/if} {/foreach} 2 Link to comment Share on other sites More sharing options...
magicJu Posted March 14, 2014 Author Share Posted March 14, 2014 Merci je vais essayer !! La technique de l'overide m'intéresse ! Je n'ai pas envie de devoir refaire la modif à chaque fois ! Je peux trouver des info quelques part ? (mon expérience en PHP commence à dater un peu et j'ai un peu perdu ma maîtrise !) Link to comment Share on other sites More sharing options...
Raph59 Posted March 14, 2014 Share Posted March 14, 2014 Désolé je suis encore en 1.4 donc je ne sais pas si sur la 1.6 cela a un peu évolué au niveau de l'override, mais bon je le serai bientôt car nous allons mettre à jours notre boutique en 1.6 Dite moi déjà si sa marche, je verrai si je peux vous donner l'override à mettre Link to comment Share on other sites More sharing options...
magicJu Posted March 14, 2014 Author Share Posted March 14, 2014 Super !!! Merci ça fonctionne au top !!!!! 1 Link to comment Share on other sites More sharing options...
magicJu Posted March 14, 2014 Author Share Posted March 14, 2014 (edited) J'ai trouvé comment faire l'overide, mais ça ne fonctionne pas !! J'ai crée un fichier Product.php dans /overide/classes A l'intérieur, j'ai mis ça : * @deprecated 1.5.0.1 */ define('_CUSTOMIZE_FILE_', 0); /** * @deprecated 1.5.0.1 */ define('_CUSTOMIZE_TEXTFIELD_', 1); class Product extends ProductCore { /* * Select all features for a given language * * @param $id_lang Language id * @return array Array with feature's data */ public static function getFrontFeaturesStatic($id_lang, $id_product) { if (!Feature::isFeatureActive()) return array(); if (!array_key_exists($id_product.'-'.$id_lang, self::$_frontFeaturesCache)) { self::$_frontFeaturesCache[$id_product.'-'.$id_lang] = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS(' SELECT name, value, pf.id_feature, pf.id_feature_value FROM '._DB_PREFIX_.'feature_product pf LEFT JOIN '._DB_PREFIX_.'feature_lang fl ON (fl.id_feature = pf.id_feature AND fl.id_lang = '.(int)$id_lang.') LEFT JOIN '._DB_PREFIX_.'feature_value_lang fvl ON (fvl.id_feature_value = pf.id_feature_value AND fvl.id_lang = '.(int)$id_lang.') LEFT JOIN '._DB_PREFIX_.'feature f ON (f.id_feature = pf.id_feature AND fl.id_lang = '.(int)$id_lang.') '.Shop::addSqlAssociation('feature', 'f').' WHERE pf.id_product = '.(int)$id_product.' ORDER BY f.position ASC' ); } return self::$_frontFeaturesCache[$id_product.'-'.$id_lang]; } Le code contient donc la modification. Mais je n'ai plus l'affichage correct. J'ai l'impression que l'overide ne se fait pas ! Ai-je fait une bêtise ? EDIT : J'ai essayé de supprimer le fichier classindex.php dans le cache, mais plus rien ne s'est chargé... Je l'ai donc remis ! Edited March 14, 2014 by magicJu (see edit history) Link to comment Share on other sites More sharing options...
indesign47 Posted March 14, 2014 Share Posted March 14, 2014 Bonsoir, manque <?php et la dernière } <?php class Product extends ProductCore { /* * Select all features for a given language * * @param $id_lang Language id * @return array Array with feature's data */ public static function getFrontFeaturesStatic($id_lang, $id_product) { if (!Feature::isFeatureActive()) return array(); if (!array_key_exists($id_product.'-'.$id_lang, self::$_frontFeaturesCache)) { self::$_frontFeaturesCache[$id_product.'-'.$id_lang] = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS(' SELECT name, value, pf.id_feature, pf.id_feature_value FROM '._DB_PREFIX_.'feature_product pf LEFT JOIN '._DB_PREFIX_.'feature_lang fl ON (fl.id_feature = pf.id_feature AND fl.id_lang = '.(int)$id_lang.') LEFT JOIN '._DB_PREFIX_.'feature_value_lang fvl ON (fvl.id_feature_value = pf.id_feature_value AND fvl.id_lang = '.(int)$id_lang.') LEFT JOIN '._DB_PREFIX_.'feature f ON (f.id_feature = pf.id_feature AND fl.id_lang = '.(int)$id_lang.') '.Shop::addSqlAssociation('feature', 'f').' WHERE pf.id_product = '.(int)$id_product.' ORDER BY f.position ASC' ); } return self::$_frontFeaturesCache[$id_product.'-'.$id_lang]; } } Cordialement Link to comment Share on other sites More sharing options...
magicJu Posted March 14, 2014 Author Share Posted March 14, 2014 Merci Indesign Le <?php y était, mais effectivement, la dernière accolade manquait ! J'ai fait ça sur un notepad sans coloration !! Quand j'ai ouvert dans Dreamweaver, il me l'a tout de suite dit! Ca fonctionne nickel après avoir effacé le class_index ! Merci pour votre aide ! 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