Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 12-08-2010 13:38:35

guice11
Membre
Date d'inscription: 17-07-2010
Messages: 30

[ZF 1.10] Comments appliquer un filtre venant d'une classe créer ?

J'ai un filtre que j'ai pris sur ce forum venant de l'utilisateur 'Delprog' mais je ne sais pas ou le mettre, dans quel dossier et comment l'appeler dans ma vue.

Code:

<?php
Zend_Loader::loadClass('Zend_Filter_Interface');
/**
 * Classe de filtres sur les chaines de caractères
 * (url, transformation de chaines en images, remplacement
 * de valeur, etc.)
 *
 * @category Tight
 * @package Tight_Filter
 * @author Benjamin Dulau
 */
class Tight_Filter_StringUtil implements Zend_Filter_Interface
{
    /**
     * Obligatoire Zend_Filter_Interface
     * 
     * @param  string $value
     * @return string
     */
    public function filter($value)
    {
            
    }
    
    /**
     * Nettoie la chaine passée en paramètres.
     * Remplace les caractères accentués en non accentués,
     * passe la chaine en minuscule, remplace les espaces
     * par des tirets et supprime les caractères inutiles
     *
     * @param  string $p_value
     * @param  string $p_encoding 
     * @return string $r_out
     */
    public function clean($p_value, $p_encoding = null)
    {        
        /*
         * Expression régulière permettant le changement des caractères accentués en
         * caractères non accentués.
         */        
        $search = array ('@[éèêëÊË]@i','@[àâäÂÄ]@i','@[îïÎÏ]@i','@[ûùüÛÜ]@i','@[ôöÔÖ]@i',
        '@[ç]@i','@[^a-zA-Z0-9]@');
        $replace = array ('e','a','i','u','o','c',' ');
        $r_out =  preg_replace($search, $replace, $p_value);
        
        /*
         * Passe tout en minuscule
         */
        Zend_loader::loadClass('Zend_Filter_StringToLower');
        $z_filter = new Zend_Filter_StringToLower();
        $z_filter->setEncoding($p_encoding);                
        $r_out = $z_filter->filter($r_out); 
        
        /*
         * Remplace les espaces par des tirets
         */
        $r_out = str_replace(" ",'-',$r_out);
        
        /*
         * Supprime tous les caractères inutiles
         */
        $r_out = preg_replace('#\-+#','-',$r_out);
        $r_out = preg_replace('#([-]+)#','-',$r_out);
        
        /*
         * Remplace les espaces restants par des tirets
         */
        Zend_Filter::get($r_out, 'StringTrim', array('-'));

        return $r_out;
    }
}

Hors ligne

 

#2 12-08-2010 14:27:24

Geoffrey
Membre
Lieu: 63
Date d'inscription: 12-04-2007
Messages: 140
Site web

Re: [ZF 1.10] Comments appliquer un filtre venant d'une classe créer ?

Bonjour,

Ta vue doit se trouver dans un fichier nommé "Tight\Filter\StringUtil.php".
Ton dossier Tight doit se trouver dans un emplacement de ton serveur définit dans ton include_path. Tu dois dire à ZF a autoriser l'exécution de toute tes classes commencant par Tight_, pour ca, tu dois mettre ceci dans ton bootstrap :

Code:

protected function _initAutoload()
    {
        require_once 'Zend/Loader/Autoloader.php';
        $autoloader = Zend_Loader_Autoloader::getInstance();
        $autoloader->registerNamespace(array(
            'Tight_'
        ));
    }

Ensuite tu peux appeler ton filtre dans tes vue en mettant

Code:

<?php echo Tight_Filter_StringUtil::clean($valeur); ?>

Geoffrey

Hors ligne

 

#3 12-08-2010 14:40:59

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: [ZF 1.10] Comments appliquer un filtre venant d'une classe créer ?

Salut,

Oh la c'est une vieille classe :p

Je pensais à ce moment à réunir divers filtres sur les chaines au sein d'une même classe filter. La classe va un peu à l'encontre de la philosophie des filtres Zend qui ont chacun un rôle bien précis.

Elle ne respecte aussi pas quelques conventions, rhaa smile

Tu pourrais la refactoriser comme ceci:

Code:

<?php
/**
 * Classe de filtres sur les chaines de caractères
 * (url, transformation de chaines en images, remplacement
 * de valeur, etc.)
 *
 * @category Tight
 * @package Tight_Filter
 * @author Benjamin Dulau
 */
class Tight_Filter_StringSanitize implements Zend_Filter_Interface
{
    /**
     * Nettoie la chaine passée en paramètres.
     * Remplace les caractères accentués en non accentués,
     * passe la chaine en minuscule, remplace les espaces
     * par des tirets et supprime les caractères inutiles
     *
     * @param  string $value
     * @param  string $encoding
     * @return  string
     */
    public function filter($value, $encoding = 'utf-8')
    {
        /*
         * Expression régulière permettant le changement des caractères accentués en
         * caractères non accentués.
         */        
        $search = array ('@[éèêëÊË]@i','@[àâäÂÄ]@i','@[îïÎÏ]@i','@[ûùüÛÜ]@i','@[ôöÔÖ]@i',
        '@[ç]@i','@[^a-zA-Z0-9]@');
        $replace = array ('e','a','i','u','o','c',' ');
        $returnString =  preg_replace($search, $replace, $value);
        
        /*
         * Passe tout en minuscule
         */
        $stringToLower = new Zend_Filter_StringToLower();
        $stringToLower->setEncoding($encoding);                
        $returnString = $stringToLower->filter($returnString); 
        
        /*
         * Remplace les espaces par des tirets
         */
        $returnString = str_replace(" ", '-', $returnString);
        
        /*
         * Supprime tous les caractères inutiles
         */
        $returnString = preg_replace('#\-+#', '-', $returnString);
        $returnString = preg_replace('#([-]+)#', '-', $returnString);
        
        /*
         * Supprime les espaces restants
         */
        $stringTrim = new Zend_Filter_StringTrim();
        $returnString = $stringTrim->filter($returnString);

        return $returnString;
    }
}

(Le code est à vérifier, je l'ai fais en live dans le message)

Pour utiliser la classe :

Code:

$maChaine = 'voilà une chaine de caractères';
$sanitize = new Tight_Filter_StringSanitize();
$maChaine = $sanitize->filter($maChaine);

A+ benjamin.

Dernière modification par Delprog (12-08-2010 14:42:36)


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

#4 12-08-2010 14:55:20

guice11
Membre
Date d'inscription: 17-07-2010
Messages: 30

Re: [ZF 1.10] Comments appliquer un filtre venant d'une classe créer ?

Geoffrey a écrit:

Bonjour,

Ta vue doit se trouver dans un fichier nommé "Tight\Filter\StringUtil.php".
Ton dossier Tight doit se trouver dans un emplacement de ton serveur définit dans ton include_path. Tu dois dire à ZF a autoriser l'exécution de toute tes classes commencant par Tight_, pour ca, tu dois mettre ceci dans ton bootstrap :

Code:

protected function _initAutoload()
    {
        require_once 'Zend/Loader/Autoloader.php';
        $autoloader = Zend_Loader_Autoloader::getInstance();
        $autoloader->registerNamespace(array(
            'Tight_'
        ));
    }

Ensuite tu peux appeler ton filtre dans tes vue en mettant

Code:

<?php echo Tight_Filter_StringUtil::clean($valeur); ?>

Geoffrey

J'ai pas suivi ou mettre la classe, dans "Tight\Filter\StringUtil.php"....

Il faut la mettre ici \library\Zend\Tight\Filter\StringUtil.php ? Dans le dossier library ?

Hors ligne

 

#5 12-08-2010 16:19:57

ndesaleux
Membre
Date d'inscription: 16-04-2007
Messages: 196
Site web

Re: [ZF 1.10] Comments appliquer un filtre venant d'une classe créer ?

library

Hors ligne

 

#6 13-08-2010 10:30:50

guice11
Membre
Date d'inscription: 17-07-2010
Messages: 30

Re: [ZF 1.10] Comments appliquer un filtre venant d'une classe créer ?

Delprog a écrit:

Salut,

Oh la c'est une vieille classe :p

Je pensais à ce moment à réunir divers filtres sur les chaines au sein d'une même classe filter. La classe va un peu à l'encontre de la philosophie des filtres Zend qui ont chacun un rôle bien précis.

Elle ne respecte aussi pas quelques conventions, rhaa smile

Tu pourrais la refactoriser comme ceci:

Code:

<?php
/**
 * Classe de filtres sur les chaines de caractères
 * (url, transformation de chaines en images, remplacement
 * de valeur, etc.)
 *
 * @category Tight
 * @package Tight_Filter
 * @author Benjamin Dulau
 */
class Tight_Filter_StringSanitize implements Zend_Filter_Interface
{
    /**
     * Nettoie la chaine passée en paramètres.
     * Remplace les caractères accentués en non accentués,
     * passe la chaine en minuscule, remplace les espaces
     * par des tirets et supprime les caractères inutiles
     *
     * @param  string $value
     * @param  string $encoding
     * @return  string
     */
    public function filter($value, $encoding = 'utf-8')
    {
        /*
         * Expression régulière permettant le changement des caractères accentués en
         * caractères non accentués.
         */        
        $search = array ('@[éèêëÊË]@i','@[àâäÂÄ]@i','@[îïÎÏ]@i','@[ûùüÛÜ]@i','@[ôöÔÖ]@i',
        '@[ç]@i','@[^a-zA-Z0-9]@');
        $replace = array ('e','a','i','u','o','c',' ');
        $returnString =  preg_replace($search, $replace, $value);
        
        /*
         * Passe tout en minuscule
         */
        $stringToLower = new Zend_Filter_StringToLower();
        $stringToLower->setEncoding($encoding);                
        $returnString = $stringToLower->filter($returnString); 
        
        /*
         * Remplace les espaces par des tirets
         */
        $returnString = str_replace(" ", '-', $returnString);
        
        /*
         * Supprime tous les caractères inutiles
         */
        $returnString = preg_replace('#\-+#', '-', $returnString);
        $returnString = preg_replace('#([-]+)#', '-', $returnString);
        
        /*
         * Supprime les espaces restants
         */
        $stringTrim = new Zend_Filter_StringTrim();
        $returnString = $stringTrim->filter($returnString);

        return $returnString;
    }
}

(Le code est à vérifier, je l'ai fais en live dans le message)

Pour utiliser la classe :

Code:

$maChaine = 'voilà une chaine de caractères';
$sanitize = new Tight_Filter_StringSanitize();
$maChaine = $sanitize->filter($maChaine);

A+ benjamin.

Ca marche sauf que je n'arrive pas à remplacer les accents par des lettres non accentués. Genre é => e.
J'ai essayé de modifier le code de 'Delprog' mais ca ne marche toujours pas.

Hors ligne

 

#7 13-08-2010 21:14:02

guice11
Membre
Date d'inscription: 17-07-2010
Messages: 30

Re: [ZF 1.10] Comments appliquer un filtre venant d'une classe créer ?

Je ne comprend avec le filtre de 'Delprog' nouvelle version ça m'ajoute des 'e' supplémentaire.
Exemple : 'Mon café' devient 'mon-cafee'
Exemple : 'Le bébé' devient 'le-beebee'
Exemple : 'Le bîbébô' devient 'le-beibeebeo'


Accent enlevé mais un 'e' en plus

En fait c'est surement une question d'expression régulières. Mais là j'ai essayé de débugger mais sans succès.

Dernière modification par guice11 (13-08-2010 22:10:43)

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages