Jump to content

Insérer bloc CMS dans page contact


Recommended Posts

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

  • Like 1
Link to comment
Share on other sites

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.

  • Like 2
Link to comment
Share on other sites

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 by franckm1000 (see edit history)
  • Like 1
Link to comment
Share on other sites

  • 1 year later...

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

  • 1 month later...
  • 5 months later...
  • 1 month later...
  • 1 year later...

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 by freeriders58 (see edit history)
Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...