jeudi 31 janvier 2013

Créer un nouveau bloc (chapitre 2)

Nous avons appris précédemment (chapitre 1) comment créer un nouveau bloc et en changer l'apparence.
Nous allons , maintenant , découvrir comment y ajouter des fonctionnalités.

Revenons à notre exemple de formulaire de contact.
Ce serait pratique de recevoir un email lorsqu'on répond au formulaire.

Pour cela, nous allons rajouter un champ dans la configuration pour renseigner l'email qui va nous servir à recevoir ces notifications.

Modification de l'interface d'administration.

Revenons au fichier block.php  (/modules/core/blocks/contactform/block.php si vous suivez bien)

Nous allons rajouter un paramètre à notre configuration.

D'abord à la création du bloc, nous donnons une valeur par défaut à notre nouveau paramètre:
Pour cela dans
public function init() {}
Nous rajoutons ceci
$this->setConfig('notifyemail', 'exemple@exemple.com');

Où 'notifyemail' est le nom du paramètre et 'exemple@exemple.com' la valeur par défaut.

Puis à la sauvegarde de la configuration, nous lui précisons de sauvegarder ce paramètre.

Dans 
public function saveConfigs(){}
Rajouter
$this->setConfig('notifyemail', $_POST['notifyemail']);

Et voilà, notre paramètre est crée!

Il nous faut toutefois concevoir le champ dans l'interface d'administration pour pouvoir le modifier.

Ajout d'un champ dans l'interface d'administration

L'interface d'administration se modifie dans adminView.php

Rajouter avant
<div class="placeholder">
    <label><?php echo t('Success Message', FALSE); ?></label>

Ceci
<div class="placeholder">
    <label><?php echo t('Email to notify', FALSE); ?></label>
    <input type="text" name="notifyemail" value="<?php echo $this->getConfig('notifyemail'); ?>">
</div>

Voilà l’apparence de ce code:

Quelques précisions.
name= doit être identique à la valeur $_POST[''] dans block.php
$this->getConfig('notifyemail')  : Récupère la configuration du paramètre notifyemail (créé précédemment)

Vous pouvez tester dans l'interface d'administration les valeurs sont bien sauvegardés.

Modification l'action de l'envoi du formulaire

Nous n'avons toujours pas jeté un coup d'oeil à view.php 
C'est ici que nous allons dire à notre bloc d'envoyer l'email.

Étudions un peu son fonctionnement.

if($this->getConfig('module'))
Vérifie que le module est bien configuré sinon il affiche Please Configure this block

if(isset($_POST['add']))
Tout ce qui est encapsulé dans cet if est exécuté lorsque le formulaire est répondu.

 include(PROFILE_PATH .$this->getConfig('pathOfView'));
Cette ligne récupère la vue crée dans l'interface d'administration (et présent dans le dossier /profiles)

Ce code est régénéré par generateViewAction dans block.php si l'option régénérer la vue est actif
(Ne vous laissez pas avoir par le  if($entity->insertInto($_POST)) en plus de vérifier si la requête SQL s'est bien déroulée, ils rajoutent les valeurs rentrées dans la base de données)

Nous allons faire simple (pour commencer),  lorsque le formulaire est rempli, un email vide est envoyé.
Afin de faire ceci, nous allons utiliser la fonction: 

Elle fonctionne comme ceci
sendMail($to, $from, $replyTo, $subject, $body)

Pour l'email nous allons simplement mettre dans $to,$from,$replyTo celui configurerait dans notre paramètre notifyemail.

tools::sendMail($this->getConfig('notifyemail'),$this->getConfig('notifyemail'), $this->getConfig('notifyemail'),$subject,$body);

Pour le sujet ($subject) nous allons mettre le nom du bloc pour cela il nous faut le récupérer comme ceci
$form_name = $this->getName();
Puis rajouter un peu de texte (traduisible)
$subject = $form_name.' '.t('Responded');

Au final, voilà le code:
if(isset($_POST['add'])){
        if($entity->insertInto($_POST)){
            echo '<div class="notify positive">'.t($this->getConfig('success')).'</div>';
        }else{
            echo '<div class="notify negative">'.t($this->getConfig('fail')).'</div>';
        }
$form_name = $this->getName();
$subject = $form_name.' '.t('Responded');
tools::sendMail($this->getConfig('notifyemail'),$this->getConfig('notifyemail'), $this->getConfig('notifyemail'),$subject,$body);
    }

Si vous avez bien paramétré votre serveur mail, et mis la bonne adresse dans l'interface d'administration, vous devriez recevoir un email avec comme sujet NOM_DU_BLOC responded.

Voilà pour ce chapitre ! Pour le prochain, nous allons rajouter les valeurs du formulaire dans le corps de notre email.



Aucun commentaire:

Enregistrer un commentaire