kanu Posted September 17, 2015 Share Posted September 17, 2015 Bonjour à tous, Bien voilà je ne sais pas si cela est possible mais je ne sais pas comment faire, comme beaucoup je n'ai pas de connaissances en programmation, code, etc...par contre je sais bien me débrouiller pour modifier/adapter les choses à ma sauce avec un petit peu d'aide ;-) Le problème qui me préoccupe depuis un moment que je n'ai jamais corrigé est le suivant 2 exemples de fiche produits: http://www.kanucomputer.net/clavier-pc/6694-rapoo-e9090p.html http://www.kanucomputer.net/pc-portable/7765-asus-n551jk-cn263h-be.html Sur ces fiches produit on voit donc un onglet "fiche technique" la fiche technique de base de prestashop qui permet d'être déroulé ou pas via le thème que je possède. Cette fiche technique est complètement brouillon, aucun thème, classement possible etc... Mon module fournisseur de produit permet la classification des caractéristiques par catégories, via ce dernier tout est catégorisé et je peux modifier tout ce que je veux via le CSS. Cette partie se trouve en dessous de la fiche technique prestashop de base sous forme de tableau juste en dessous de "avis client" Ma question vous vous en doutez ;-) comment mettre ce tableau à la place de celui de base et garder également le fait que ce soit déroulant ou pas. J'espère avoir été aussi clair que possible pour détailler le soucis ? D'avance merci pour votre retour/conseils. Bonne journée à tous. Cordialement. Link to comment Share on other sites More sharing options...
Alexandre Carette Posted September 17, 2015 Share Posted September 17, 2015 (edited) En gros tu veux supprimer l'affichage des features dans ton product.tpl ? A voir comment est fait ton theme par defaut insere un commentaire: {* Ne plus afficher ce block {if isset($features) && $features} <!-- Data sheet --> <section class="page-product-box"> <h3 class="page-product-heading">{l s='Data sheet'}</h3> <table class="table-data-sheet"> {foreach from=$features item=feature} <tr class="{cycle values="odd,even"}"> {if isset($feature.value)} <td>{$feature.name|escape:'html':'UTF-8'}</td> <td>{$feature.value|escape:'html':'UTF-8'}</td> {/if} </tr> {/foreach} </table> </section> <!--end Data sheet --> {/if} *} Edited September 17, 2015 by Alexandre-KM (see edit history) Link to comment Share on other sites More sharing options...
Julien64 Posted September 17, 2015 Share Posted September 17, 2015 Bonjour, Si j'ai bien compris vous souhaitez remplacer le contenu de l'onglet "fiche technique" natif de Prestashop par le contenu de votre module? L'idée est donc, dans le fichier "product.tpl" de votre thème, de remplacer le code qui génère la liste des caractéristiques <ul id="idTab10" class="bullet"... par l'appel au hook sur lequel est greffé votre module. Dans l'onglet "Modules" > "Positions" vous pourrez trouver comment s'appelle ce hook, le retrouver dans le fichier TPL et ainsi le déplacer au bon endroit. Link to comment Share on other sites More sharing options...
kanu Posted September 18, 2015 Author Share Posted September 18, 2015 En gros tu veux supprimer l'affichage des features dans ton product.tpl ? A voir comment est fait ton theme par defaut insere un commentaire: {* Ne plus afficher ce block {if isset($features) && $features} <!-- Data sheet --> <section class="page-product-box"> <h3 class="page-product-heading">{l s='Data sheet'}</h3> <table class="table-data-sheet"> {foreach from=$features item=feature} <tr class="{cycle values="odd,even"}"> {if isset($feature.value)} <td>{$feature.name|escape:'html':'UTF-8'}</td> <td>{$feature.value|escape:'html':'UTF-8'}</td> {/if} </tr> {/foreach} </table> </section> <!--end Data sheet --> {/if} *} Bonjour, Merci pour ta réponse, ce n'est pas exactement ce qu'il faut faire, oui il faut supprimer les caractéristiques de base mais il faut ajouter celle du module à la place et pouvoir garder le menu déroulant. Merci pour ton intervention. Link to comment Share on other sites More sharing options...
kanu Posted September 18, 2015 Author Share Posted September 18, 2015 Bonjour, Si j'ai bien compris vous souhaitez remplacer le contenu de l'onglet "fiche technique" natif de Prestashop par le contenu de votre module? L'idée est donc, dans le fichier "product.tpl" de votre thème, de remplacer le code qui génère la liste des caractéristiques <ul id="idTab10" class="bullet"... par l'appel au hook sur lequel est greffé votre module. Dans l'onglet "Modules" > "Positions" vous pourrez trouver comment s'appelle ce hook, le retrouver dans le fichier TPL et ainsi le déplacer au bon endroit. Bonjour, Merci pour votre solution c'est exactement ce que je souhaite faire ! J'ai bien repéré la ligne que vous m'avez indiquée et je sais également à quel Hook se rapporte mon module, cette ligne se trouve tout en bas du fichier product.tpl. Je fais donc déplacer la totalité de ce block à la place de celui des caractéristiques de base et donc par la meme occasion écrase ce dernier. Cela fait donc ce que je souhaite j'obtient bien les caractéristiques du module à la place de celle de prestashop, par contre impossible de refaire fonctionner ce menu déroulant Une idée ? Cordialement. Link to comment Share on other sites More sharing options...
Julien64 Posted September 18, 2015 Share Posted September 18, 2015 Vous avez peut être supprimé un peu trop de code ou alors il faut en rajouter. En gros il faut s'inspirer de la façon dont est affichée la description longue "en savoir plus", à savoir un titre h3 et une div qui s'affiche ou non suivant le contexte. Vous pouvez faire un copier/coller mais attention à modifier les "id" pour que les nouveaux soient bien uniques! Link to comment Share on other sites More sharing options...
ledmounting Posted January 8, 2016 Share Posted January 8, 2016 (edited) Bonjour Je suis en train d'adapter mon product.tpl et mon product-list.tpl pour générer automatiquement du contenu en fonction des caractéristiques. j'ai, sous le champs description, ajouté une nouvelle ≤div> qui contient des icons qui pour l'affichage ferons appel aux valeurs des caractéristique. En premier lieu j'ai ajouté cette div dans global.js pour l'affichage en product-list comme ceci function display(view) { if (view == 'list') { .............................. html += '<div itemprop="Information" class="desperso">'+ $(element).find('.desperso').html() + '</div>'; .............................. Créer un code identique sur mes deux tpl ( {foreach from=$features item=feature} pour product) et {foreach from=$product.features item=feature} pour la product-list) exemple pour l'image: <tr> {foreach from=$features item=feature} {if $feature.name == 'Nom de la caractéristique fr' && $feature.value !== ' ' && $feature.value !== '-' && $category->id == 311|| $feature.name == 'Nom de la caractéristique en' && $feature.value !== ' ' && $feature.value !== '-' && $category->id == 311} <td><img src="{$base_dir}img/cms/{$feature.value}.png" alt="{$feature.value}" title="{$feature.value}"/></td> {/if} {/foreach} </tr> Jusqu'ici aucun soucis tout s'affiche cependant quand j'ai un champs contenant plusieurs valeurs dans ma product-list la boucle se fait et m'affiche les valeur une à une, alors qu'en page product il l'affiche comme une chaine de caractère quelqu'un saurait-il pourquoi? Voici un exemple ex: Product-list: <tr> <td><img src="http://monsite/img/cms/img1.png" alt="img1" title="img1"/></td> <td><img src="http://monsite/img/cms/img2.png" alt="img2" title="img2"/></td> <td><img src="http://monsite/img/cms/img3.png" alt="img3" title="img3"/></td> <td><img src="http://monsite/img/cms/img4.png" alt="img4" title="img4"/></td> </tr> Product: <td><img src="http://monsite/img/cms/img1, img2, img3, img4.png" alt="img1, img2, img3, img4" title="img1, img2, img3, img4"/></td> Et dernier petit soucis en product-list si j'utilise "$category->id == " j'ai une belle erreur :/ Excusez pour le roman j'espère que quelqu'un pourra m'aider, en vous remerciant d'avance Version prestashop: 1.6.1.3 Thème personnalisé Edited January 8, 2016 by ledmounting (see edit history) Link to comment Share on other sites More sharing options...
franckm1000 Posted January 8, 2016 Share Posted January 8, 2016 Je n'ai pas vraiment creusé mais clairement ta variable $features est bien un tableau quand tu arrives dans product-list alors que c'est une chaîne de caractères quand tu arrives dans la page produit. D'un côté tu dois arriver avec: array( [0] => 'img1', [1] => 'img2', [2] => 'img3', [3] => 'img4', ) Et de l'autre: string( img1, img2, img3, img4 ) Tu devrais regarder du côté des contrôleurs. Link to comment Share on other sites More sharing options...
ledmounting Posted January 8, 2016 Share Posted January 8, 2016 (edited) Merci, pour cette réponse rapide Oui c'est ce que je me disais mais je ne sais quel contrôleur .... il y a-t-il un contrôleur particulier qui génère l'affichage de product-list.tpl ? Je vois dans ma classe FeatureValue.php public static $definition = array( 'table' => 'feature_value', 'primary' => 'id_feature_value', 'multilang' => true, 'fields' => array( 'id_feature' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'required' => true), 'custom' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool'), /* Lang fields */ 'value' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'required' => true, 'size' => 255), ), ); Edited January 8, 2016 by ledmounting (see edit history) Link to comment Share on other sites More sharing options...
franckm1000 Posted January 8, 2016 Share Posted January 8, 2016 (edited) Il faut plutôt partir dans le contrôleur product (puisque c'est lui qui te renvoie un string non ?) et trouver comment est défini: $features Je suppose qu'il est défini comme un string (img1, img2, ...) A ce moment, après la construction de $features, faire un truc du style: $MesFeaturesAmoi = implode(',', $features); $this->context->smarty->assign('mesfeaturesamoi', $MesFeaturesAmoi); Et là, dans ta vue $mesfeaturesamoi sera un tableau Edited January 8, 2016 by franckm1000 (see edit history) Link to comment Share on other sites More sharing options...
ledmounting Posted January 8, 2016 Share Posted January 8, 2016 (edited) Dans mon productControlleur la seul fois ou est déclaré mon feature c'est là et il me semble que on l'assigne en tableau non ? :/ $this->context->smarty->assign(array( 'stock_management' => Configuration::get('PS_STOCK_MANAGEMENT'), 'customizationFields' => $customization_fields, 'id_customization' => empty($customization_datas) ? null : $customization_datas[0]['id_customization'], 'accessories' => $accessories, 'return_link' => $return_link, 'product' => $this->product, 'product_manufacturer' => new Manufacturer((int)$this->product->id_manufacturer, $this->context->language->id), 'token' => Tools::getToken(false), 'features' => $this->product->getFrontFeatures($this->context->language->id), 'attachments' => (($this->product->cache_has_attachments) ? $this->product->getAttachments($this->context->language->id) : array()), 'allow_oosp' => $this->product->isAvailableWhenOutOfStock((int)$this->product->out_of_stock), 'last_qties' => (int)Configuration::get('PS_LAST_QTIES'), 'HOOK_EXTRA_LEFT' => Hook::exec('displayLeftColumnProduct'), 'HOOK_EXTRA_RIGHT' => Hook::exec('displayRightColumnProduct'), 'HOOK_PRODUCT_OOS' => Hook::exec('actionProductOutOfStock', array('product' => $this->product)), 'HOOK_PRODUCT_ACTIONS' => Hook::exec('displayProductButtons', array('product' => $this->product)), 'HOOK_PRODUCT_TAB' => Hook::exec('displayProductTab', array('product' => $this->product)), 'HOOK_PRODUCT_TAB_CONTENT' => Hook::exec('displayProductTabContent', array('product' => $this->product)), 'HOOK_PRODUCT_CONTENT' => Hook::exec('displayProductContent', array('product' => $this->product)), 'display_qties' => (int)Configuration::get('PS_DISPLAY_QTIES'), 'display_ht' => !Tax::excludeTaxeOption(), 'jqZoomEnabled' => Configuration::get('PS_DISPLAY_JQZOOM'), 'ENT_NOQUOTES' => ENT_NOQUOTES, 'outOfStockAllowed' => (int)Configuration::get('PS_ORDER_OUT_OF_STOCK'), 'errors' => $this->errors, 'body_classes' => array( $this->php_self.'-'.$this->product->id, $this->php_self.'-'.$this->product->link_rewrite, 'category-'.(isset($this->category) ? $this->category->id : ''), 'category-'.(isset($this->category) ? $this->category->getFieldByLang('link_rewrite') : '') ), 'display_discount_price' => Configuration::get('PS_DISPLAY_DISCOUNT_PRICE'), )); } $this->setTemplate(_PS_THEME_DIR_.'product.tpl'); } Edited January 8, 2016 by ledmounting (see edit history) Link to comment Share on other sites More sharing options...
franckm1000 Posted January 8, 2016 Share Posted January 8, 2016 Oui et bien c'est ça, au moment de l'assignation, la valeur est construite par : $this->product->getFrontFeatures($this->context->language->id) Donc si tu fais: $MesFeaturesAmoi = implode(',', $this->product->getFrontFeatures($this->context->language->id)); $this->context->smarty->assign('mesfeaturesamoi', $MesFeaturesAmoi); Dans SMARTY ta variable $MesFeaturesAmoi devrait être un tableau correspondant à tes besoins. Link to comment Share on other sites More sharing options...
ledmounting Posted January 8, 2016 Share Posted January 8, 2016 Je vous remercie infiniment pour votre aide et votre patience ! j'aurais cependant besoin de plus de détail si cela ne vous ennui pas quant à la manière de procéder (je ne suis novice encore dans le développement prestashop) Voilà ce que j'ai fais sans succès ... :/ Dans la fonction "public function initContent()" au dessus de "$this->context->smarty->assign(array(" $MesFeaturesAmoi = implode(',', $this->product->getFrontFeatures($this->context->language->id)); et dans : $this->context->smarty->assign(array( je déclare comme ceci 'features' => $this->product->getFrontFeatures($this->context->language->id), 'mesfeaturesamoi' => $MesFeaturesAmoi, J'obtiens "Notice: Array to string conversion in/Fichier concerné" Link to comment Share on other sites More sharing options...
franckm1000 Posted January 8, 2016 Share Posted January 8, 2016 Désolé, il ne faut pas faire un IMPLODE mais un EXPLODE: $MesFeaturesAmoi = explode(',', $this->product->getFrontFeatures($this->context->language->id)); Link to comment Share on other sites More sharing options...
ledmounting Posted January 8, 2016 Share Posted January 8, 2016 Merci , j'obtiens ceci :"explode() expects parameter 2 to be string, array given in" sans changement Au niveau du tpl il mes faut changer tout mes valeurs features c'est cela ?! Link to comment Share on other sites More sharing options...
franckm1000 Posted January 8, 2016 Share Posted January 8, 2016 Mettez {debug} dans le fichier tpl, vous devriez obtenir une popup , essayez de m'envoyer en PJ ce qu'il y a dedans au format texte, il faut regarder exactement à quoi ressemble la variable features qui semble être un tableau Link to comment Share on other sites More sharing options...
ledmounting Posted January 8, 2016 Share Posted January 8, 2016 Je n'arrive pas à joindre de fichier le résultat pour $Feautures Smarty_Variable Object (3) ->value = Array (8) 15 => Array (3) values => Array (6) 0 => "ledil" 1 => "Carclo" 2 => "GAGGIONE Holder" 3 => "GAGGIONE Lens" 4 => "LEDENGIN" 5 => "LEDLINK" name => "Compatibilite Optiques" value => "ledil, Carclo, GAGGIONE Holder, GA..." 4 => Array (3) values => Array (1) 0 => "Lumileds" name => "Marque LED" value => "Lumileds" 11 => Array (3) values => Array (1) 0 => "Luxeon Z" name => "Reference LED" value => "Luxeon Z" 13 => Array (3) values => Array (1) 0 => "-" name => "Zener" value => "-" 9 => Array (3) values => Array (1) 0 => "4" name => "Nombre de LED" value => "4" 10 => Array (3) values => Array (1) 0 => "Rect" name => "Forme" value => "Rect" 12 => Array (3) values => Array (1) 0 => "-" name => "CTN" value => "-" 16 => Array (3) values => Array (1) 0 => "2W/mK" name => "Conductivite" value => "2W/mK" ->nocache = false ->scope = "file:/Applications/MAMP/htdocs/new-ve..." Link to comment Share on other sites More sharing options...
franckm1000 Posted January 8, 2016 Share Posted January 8, 2016 Mais dans la popup il doit y avoir beaucoup plus de variables que ça et il doit bien y avoir le détail de features non ? Vous avez fait une recherche dans le tableau du DEBUG ? Link to comment Share on other sites More sharing options...
ledmounting Posted January 11, 2016 Share Posted January 11, 2016 (edited) Je vous remercie infiniment pour votre aide, le soucis à été résolu c'était un problème au niveau d'un foreach et d'un item Bonne journée Edited January 11, 2016 by ledmounting (see edit history) 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