Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
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.
<?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
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 :
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
<?php echo Tight_Filter_StringUtil::clean($valeur); ?>
Geoffrey
Hors ligne
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
Tu pourrais la refactoriser comme ceci:
<?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 :
$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)
Hors ligne
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
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
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
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
Pages: 1