Annonce

#1 2011-03-26 01:07:57

Chami
Membre
Inscription : 2011-03-11
Messages : 2

assign_block_tags et assign_block_vars

Bonsoir,

Tout d'abord, un monument ce wanewsletter. Bravo et merci.
J'ai voulu utiliser assign_block_tags comme je le fais avec assign_block_vars pour créer un tableau dans un mail du genre :
----------------------------------------------------------------
<!-- start_block winners -->

Email : %winners.EMAIL%            Code : %winners.CODE%

<!-- end_block winners -->
-----------------------------------------------------------------
code :
                    do
                    {
                            $quiz_form->mailer->assign_block_tags('winners', array(
                                'EMAIL'        => $rowWarned['abo_email'],
                                'CODE'        => $rowWarned['register_key']
                            ));
                            $i++;
                    }
                    while( $rowWarned = $result->fetch() );
-------------------------------------------------------------------
Mais, il n'est créé qu'une ligne.
En regardant le code, ça paraît normal. Est-ce volontaire ? Est-ce que je fais une mauvaise interprétation de cette fonction ?
Y-a-t-il une méthode pour faire ce que je veux faire ?

Merci de votre aide,
Chami

Hors ligne

#2 2011-03-30 14:13:27

Bobe
Administrateur
Lieu : La Rochelle
Inscription : 2002-05-27
Messages : 5 299

Re : assign_block_tags et assign_block_vars

salut smile

En effet, le fonctionnement n'est pas le même qu'avec le système de templates. Dans Wamailer, c'est un bête système de blocs conditionnels.

Ce que vous pourriez faire, c'est utiliser la classe template pour générer le texte de l'email en amont, puis le faire passer à la classe wamailer.


PHP et MySQL, un duo gagnant !

Hors ligne

#3 2011-03-30 17:21:03

Chami
Membre
Inscription : 2011-03-11
Messages : 2

Re : assign_block_tags et assign_block_vars

Merci Bobe,

Entre temps, j'ai fait ces modifications. Peut-être peuvent-elles servir à d'autres ?

    /**
     * @param string $name  Nom du block et des éventuels sous blocks
     * @param array  $tags  Tableau des tags à remplacer dans le message
     *
     * @access public
     * @return void
     */
    function assign_block_tags($name, $tags = null)
    {
        if( preg_match('/^[[:alnum:]_-]+$/i', $name) )
        {
            //if( !isset($this->block_tags[$name]) ) $this->block_tags[$name] = array();
            $this->block_tags[$name][] = $tags;
        }


    /**
     * @param string $texte
     *
     * @access private
     * @return string
     */
    function replace_block_tags($texte)
    {
        $total_blocks = preg_match_all(
            "/<!-- start_block ([[:alnum:]_-]+) -->(.*?)<!-- end_block \\1 -->([\r\n]+)/is",
            $texte,
            $matches
        );
       
        for( $i = 0; $i < $total_blocks; $i++ )
        {
            $block_name = $matches[1][$i];
           
            $tmp = '';
            if( isset($this->block_tags[$block_name]) && $nb_items = count($this->block_tags[$block_name]) )
            {
                for( $j=0; $j<$nb_items; $j++ )
                {
                    $keys = $values = array();
                    foreach( $this->block_tags[$block_name][$j] as $key => $val )
                    {
                        $keys[]   = '/(?:(%)|(\{))' . $block_name . '\.' . $key . '(?(1)%|\})/i';
                        $values[] = $val;
                    }
                   
                    $tmp .= preg_replace($keys, $values, trim($matches[2][$i])) . $matches[3][$i];
                }
            }
            $texte = str_replace($matches[0][$i], $tmp, $texte);
           
        }

        return $texte;
    }

Donc, peu de choses modifiées et un fonctionnement un peu amélioré permettant de construire un tableau simple.
C'est quand même pratique pour dresser un listing vers le webmaster.
La nouvelle function assign_block_tags est peut-être un peu simpliste ?
Je ne pense pas qu'il y ait incompatibilité avec l'existant.

C'est une sacrée usine à gaz ce wanewsletter.
Cordialement,
Chami

Dernière modification par Chami (2011-03-31 18:55:00)

Hors ligne

Pied de page des forums