Ptipwa Posted January 4, 2013 Share Posted January 4, 2013 Bonjour, Après avoir parcouru divers fils de discussion en long et en large, je ne trouve pas de solution qui fonctionne à un souci qui me semblait pourtant simple à résoudre. Je suis en train de créer un thème Prestashop avec la version 1.5.1.0 Je souhaite modifier la page contact native de Prestashop, en y insérant une page CMS que j'ai créée. L'objectif est d'insérer un bloc de texte administrable au-dessus du formulaire de contact de la page du même nom, car un simple formulaire de contact sur la page "contact" ne me suffit pas. J'ai essayé différentes choses, notamment les solutions proposées ici et ici, mais je ne m'en sors pas. Au pire j'obtiens une page totalement blanche, et au mieux le formulaire s'affiche, sans mon fameux bloc au-dessus. Bon là je cherche à intégrer le bloc de texte administrable en ajoutant une page CMS, mais s'il y a une autre solution je prends. Ca pourrait être de créer un module éditable dans l'administration, qui gère le fameux texte que je souhaite ajouter. Mais ça non plus je n'ai pas trouvé comment faire. Si quelqu'un peut m'aider, je lui serai reconnaissante sur les 750 prochaine générations. Bonne soirée 1 Link to comment Share on other sites More sharing options...
Ptipwa Posted January 6, 2013 Author Share Posted January 6, 2013 Bien je vois que ma question ne passionne pas les foules, pourtant je doute fortement que tout le monde se satisfasse de la page contact par défaut, qui ne contient qu'un formulaire. Link to comment Share on other sites More sharing options...
Ptipwa Posted January 9, 2013 Author Share Posted January 9, 2013 Bonjour, Après une lutte sans merci, beaucoup de café et de jurons, j'ai enfin réussi à utiliser le code trouvé dans un des fils postés dans mon premier message (là). Mon message va être un peu long, mais je poste mon raisonnement et la solution que j'ai trouvée, ça peut servir à des personnes qui rencontrent le même cas de figure. Attention, ça fonctionne mais c'est peut-être pas hyper clean pour les puristes, j'ai du me dépatouiller toute seule. - première solution envisagée : faire l'inverse, c'est-à-dire inclure le formulaire de contact dans une page CMS spécifique, dont l'identifiant est 7 par exemple. La condition est la suivante : "si je suis dans la page cms dont l'identifiant est 7, alors j'appelle contact.form.tpl". {if (($cms->id) == 7)}{include file="$tpl_dir./contact-form.tpl"}{/if} Le souci : la page "contactez-nous" de Prestashop par défaut existe toujours, et je ne sais pas comment la virer. En plus l'URL de cette fameuse page est quand même plus sympa que celle d'une page cms : www.toto.com/contactez-nous au lieu de www.toto.com/7-contact - donc, Retour à ce que je cherchais à faire au départ : faire appel au contenu de la page CMS dont l'identifiant est 7 dans contact-form.tpl J'ai d'abord overridé le fichier Contactcontroller.php, en ajoutant quelques lignes (trouvées dans les fils de mon premier message) à la fonction initContent(), comme suit : class ContactController extends ContactControllerCore { public function initContent() { parent::initContent(); // custom code pour appeler contenu de la page cms dont l'id est 7 global $smarty; global $cookie; $cms = new CMS(7, intval($cookie->id_lang)); if (Validate::isLoadedObject($cms)) $smarty->assign('cmscontent', $cms->content); // end custom code $this->assignOrderList(); $email = Tools::safeOutput(Tools::getValue('from', ((isset($this->context->cookie) && isset($this->context->cookie->email) && Validate::isEmail($this->context->cookie->email)) ? $this->context->cookie->email : ''))); $this->context->smarty->assign(array( 'errors' => $this->errors, 'email' => $email, 'fileupload' => Configuration::get('PS_CUSTOMER_SERVICE_FILE_UPLOAD') )); if ($id_customer_thread = (int)Tools::getValue('id_customer_thread') && $token = Tools::getValue('token')) { $customerThread = Db::getInstance()->getRow(' SELECT cm.* FROM '._DB_PREFIX_.'customer_thread cm WHERE cm.id_customer_thread = '.(int)$id_customer_thread.' AND cm.id_shop = '.(int)$this->context->shop->id.' AND token = \''.pSQL($token).'\' '); $this->context->smarty->assign('customerThread', $customerThread); } $this->context->smarty->assign(array( 'contacts' => Contact::getContacts($this->context->language->id), 'message' => html_entity_decode(Tools::getValue('message')) )); $this->setTemplate(_PS_THEME_DIR_.'contact-form.tpl'); } } Et du coup après il suffit d'ajouter n'importe où dans le fichier contact-form.tpl le code suivant : <div class="toto">{$cmscontent}</div> J'espère que c'est pas trop une mauvaise façon de faire, et que ça pourra servir. 2 Link to comment Share on other sites More sharing options...
franckm1000 Posted January 9, 2013 Share Posted January 9, 2013 (edited) Bah c'est très joli tout ça ! Une seule remarque, travaillant sur la version 1.5, utilises plutôt le context que les variables globales. De ce fait, remplacer: // custom code pour appeler contenu de la page cms dont l'id est 7 global $smarty; global $cookie; $cms = new CMS(7, intval($cookie->id_lang)); if (Validate::isLoadedObject($cms)) $smarty->assign('cmscontent', $cms->content); // end custom code Par: // custom code pour appeler contenu de la page cms dont l'id est 7 $cms = new CMS(7, intval($this->context->language->id)); if (Validate::isLoadedObject($cms)) $this->context->smarty->assign('cmscontent', $cms->content); // end custom code Les 2 fonctionnent mais les variables globales fonctionnent sur le 1.5 uniquement pour une compatibilité qui je crois sera abandonnée sur la future 1.6. Enfin, au cas où le context ne fonctionne pas dans l'environnement où tu travailles il suffit normalement de rajouter: Context::getContext() pour pouvoir l'utiliser. Edited January 9, 2013 by franckm1000 (see edit history) 1 Link to comment Share on other sites More sharing options...
Ptipwa Posted January 9, 2013 Author Share Posted January 9, 2013 Merci, je viens de modifier le bazar, ça fonctionne impeccable, et c'est propre, la vie est belle ! 1 Link to comment Share on other sites More sharing options...
aallbbyy Posted January 15, 2014 Share Posted January 15, 2014 Je l'ai déjà dit des centaines de fois, et je le dirais encore très souvent je pense: MERCI LE FORUM! MERCI A TOUS LE MEMBRES QUI DONNENT LES SOLUTIONS AUX PETITS ET AUX GROS PROBLÈMES QUE L'ON RENCONTRE MILLES MERCI Ça m'a pris 10mn et ça marche super bien! Link to comment Share on other sites More sharing options...
dkbane Posted February 20, 2014 Share Posted February 20, 2014 Un grand merci itou !! Link to comment Share on other sites More sharing options...
syriaca Posted July 29, 2014 Share Posted July 29, 2014 Merci Ptipwa... JE T'AIME !!! Link to comment Share on other sites More sharing options...
cockpitinferno Posted September 10, 2014 Share Posted September 10, 2014 ca marche super, merci beaucoup! Link to comment Share on other sites More sharing options...
freeriders58 Posted October 29, 2015 Share Posted October 29, 2015 (edited) Merci beaucoup à Ptipwa et PrestaShop Addict !!! Fonctionne parfaitement sous prestashop 1.6.1.1 ;-) Copier/coller à la ligne 223 dans controllers / front / contactController.php : // custom code pour appeler contenu de la page cms dont l'id est 7 $cms = new CMS(7, intval($this->context->language->id)); if (Validate::isLoadedObject($cms)) $this->context->smarty->assign('cmscontent', $cms->content); // end custom code Copier/coller à l'emplacement désiré dans le fichier contact-form.tpl <div class="toto">{$cmscontent}</div> Edited October 29, 2015 by freeriders58 (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