Jump to content

Essai création module


Recommended Posts

Bonjour,

Je souhaite ajouter 2 champs Téléphone sur le formulaire de contact et qu'ils soient affichés dans le mail reçu et dans SAV. Grâce à un tuto de H. Hennes et Nula Bord, j'ai obtenu ce que je voulais.

Je voudrais maintenant aller plus loin, réaliser cela via un module afin de ne pas avoir à toucher aux fichiers de PS au cas où je souhaite retirer ces champ.

Je suis sur un PS 1.7.8.10.

Donc, de base, la fonctionnalité nécessitait :

1. Créer le code à afficher dans le tpl de contactform => je souhaite ajouter juste un hook

2. Créer un override de modules/contactform/contactform.php afin de modifier les functions getWidgetVariables et sendMessage

3. Modifier les fichiers mail contact.html et contact.txt

Alors, j'ai créé un dossier contactformfields avec un fichier php pour l'installation, la désinstallation, la création d'un hook.
Un sous-dossier override/modules/contactform/ avec un fichier contactform.php contenant le code de l'override.
Un sous dossier views/templates/hook/ avec un fichier hookContactFormAdditionnalFields.tpl dans lequel j'ai mis le code pour afficher les champs supplémentaires, exactement tel que je l'avais d'abord ajouté directement dans le fichier tpl de contactform, avec les variables pour les deux champs ($contact.phone1 et $contact.phone2). Je rappelle que c'était fonctionnel sans module.

L'installation se fait bien, l'override est bien ajouté. Vidage de cache (par ailleurs désactivé), tout le toutim.
Mais ... ça ne marche pas. Erreur

Notice: Undefined index: contact

in 9f2fdf73658af9f102f5947ccdb8337ca0faab8e_2.file.hookContactFormAdditionnalFields.tpl.php line 29

Si dans le fichier tpl du hook je mets du code sans les variables, pas de souci. J'en conclus donc qu'il n'arrive pas à faire le lien entre les variables du tpl du hook et l'override dans lequel ces variables sont traitées. Et là, je ne sais plus quoi essayer. J'ai cherché dans la doc, dans les forums, je ne trouve pas de piste. J'imagine que, dans le fichier php du module, il faut lui dire qu'il doit utiliser le fichier de modules/contactform et que, vu que celui-ci est overridé, hop, il va l'utiliser automatiquement ?

Mais comment ?

Si quelqu'un avait la grande bonté de me donner un chouïa de piste, ce serait vraiment très sympa !

Voici le code de contactformfields après je ne sais combien de modifs, d'ajouts et de retraits ...

<?php

/**
/*
 */
 if (!defined('_CAN_LOAD_FILES_')) {
    exit;
}
use PrestaShop\PrestaShop\Core\Module\WidgetInterface;
class contactformfields extends Module {


    public function __construct() {
        
        $this->name = 'contactformfields';
        $this->tab = 'others';
        $this->author = '';
        $this->version = '0.1.1';

        $this->bootstrap = true;
        parent::__construct();

        $this->displayName = $this->l('contactformfields');
        $this->description = $this->l('contactformfields allows to add phone fields in the contact form page');
		$this->confirmUninstall = $this->l('Are you sure you want to uninstall?');

        $this->ps_versions_compliancy = array('min' => '1.7.0.0', 'max' => _PS_VERSION_);
    }

    public function install() {
            return parent::install()
        && $this->registerHook('contactFormAdditionnalFields');
    }

    public function uninstall() {
        if (!parent::uninstall()) {
            return false;
        }

        return true;
    }
public function initContent()
{
    parent::initContent();
    $this->setTemplate = 'module:contactformfields/views/templates/hook/hookContactFormAdditionnalFields.tpl'; 
}

    /**
     * Hook spécifique créé par le module pour afficher les nouveaux champs
     * @param array $params
     */
    public function hookContactFormAdditionnalFields($params)
	{
        
    
	  return $this->display(__FILE__, 'views/templates/hook/hookContactFormAdditionnalFields.tpl');
    }
    
    /**
     * Validation des champs additionnels du formulaire
     * 
     * @param type $params
     */
    public function hookActionValidateContactFormAdditionnalFields($params) {
        
    }

}

Mille mercis !

Link to comment
Share on other sites

ahh de fait, plus d'erreur. Je m'étais pourtant basée sur un ancien module de H. Hennes pour 1.6.

Mais le hook n'est pas chargé, les champs n'apparaissent pas. Ma grammaire est-elle correcte pour la function du hook ?

Merci Eolia !

Link to comment
Share on other sites

ok, c'était par ça que j'avais commencé mais il me semblait que c'était plus "propre" de faire un module qui m'aurait permis d'ajouter ou retirer facilement les champs ajoutés sans devoir aller remodifier des fichiers. Mais si ce n'est plus dans l'air du temps, j'abandonne car je viens de constater qu'avec le changement fait sur extends, maintenant ça bugue dans l'admin, je ne peux plus ouvrir la page des modules 🙂

Un tout grand merci en tout cas de vous être penché sur mon souci !

Link to comment
Share on other sites

Le module d'exemple était pour la version  1.6 et date d'il y'a pas mal d'années. 😅
Une approche plus simple et plus actuelle si on n'a pas besoin de la gestion SAV serait de remplacer totalement ce formulaire par un module de formulaire riche qui permets de mettre les champs qu'on souhaites.

 

Link to comment
Share on other sites

Bonjour hhennes et merci. C'était justement pour un 1.6 que je cherchais à faire un module :-). Ca fonctionnait très bien avec le code intégré dans les fichiers idoines, je voulais juste me compliquer un peu l'existence 🙂

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...