Frefred.fr

Extended Attribute Filter

eZ publish nous permet de récuperer certains éléments grâce à la fonction fetch. Pour cette fonction, il est possible de ne sélectionner que certains éléments, en utilisant le paramètre attribute_filter . Le paramètre attribute_filter ne permet pas de faire toutes les restrictions que l'on veut, d'où l'apparition de l' extended attribute filter .

Configuration de l'extended attribute filter

Pour créer un extended attribute filter, qui sera réutilisable facilement sur nos sites, nous allons commencé par créer une nouvelle extension. Cette extension doit contenir deux dossiers :

  • settings
  • classes ( nom par défaut dans eZ publish )

Pour déclarer notre extended attribute filter , nous allons créer un fichier nommé extendedattributefilter.ini.append.php dans le dossier settings.

La déclaration d'un extended attribute filter se fait par le biais de 4 lignes de code :

 
[extended_attribute_filter_name]
ExtensionName=extensionname
ClassName=classname
MethodName=methodname
FileName=filename ( classes/file.php)
 

Une fois la déclaration de notre extended attribute filter fini, nous allons commencé par créer notre fichier php.

Création de l'extended attribute filter

Pour créer le code pour l'extended attribute filter, on va commencer par créer un fichier php dans le répertoire classes, et nous allons commencer par le remplir selon ce que nous avons déclaré dans le fichier de settings.

<?
class classname
{
     function classname()
     {
          // empty
     }
 
     function methodname( $params )
     {
          // Your code
     }
}
?>
 

L'extended attribute filter est tout simplement un ajout dans la requête sql. Notre méthode methodname doit retourner un tableau de type associatif, contenant deux champs :

  • la cellule tables : les tables à rajouter dans la requête
  • la cellule joins : les lignes sql contenant les jointures ou restrictions.

Utilisation de l'extended attribute filter

Voici un exemple de code pour utiliser notre extended attribute filter :

{fetch( 'content', 'list', hash( 'parent_node_id', 2,
                 'sort_by', array( 'priority', false() ),
                 'limit', 15,
                 'extended_attribute_filter',
                            hash( 'id', 'extended_attribute_filter_name',
                                          'params', hash( 'value1', 15,
                                                        'value2', 30 ) ),
              'depth', 10,
              'main_node_only', true() ) )}
 

Bookmark and Share

Commentaires

#1 - Le 01 mai 08 par frefred

MySQL

en fait, on ne créé pas vraiment de requête SQL, on ajoute plutôt des conditions à la requête que le fetch crée ( clause WHERE ).

Selon ta version de MySQL, tu peux toujours faire une requête imbriquée,

#2 - Le 01 mai 08 par soon7

petite précision

Bonjour,
Pour que ton exemple puisse fonctionner correctement, il faut se baser sur le code de l'exemple du site de ez , non ?
http://ez.no/doc/ez_publish/techn...ntent/fetch_functions/list#example19
En gros si je comprends bien on définit une classe qui correspond à un extended_attribute_filter_name, par la création de cette classe on va pouvoir coder une requete mysql à laquelle on pourra passer des variables.
J'ai bon, docteur ?