IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

EDI, CMS, Outils, Scripts et API PHP Discussion :

[eZ Publish] Fetch attribute_filter sur une énumération


Sujet :

EDI, CMS, Outils, Scripts et API PHP

  1. #1
    Candidat au Club
    Inscrit en
    Avril 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 12
    Points : 3
    Points
    3
    Par défaut [eZ Publish] Fetch attribute_filter sur une énumération
    Bonjour tout le monde,

    J'ai un soucis avec les filtres sur mes différents fetch quand ceux ci concernent un attribut du type "Enumération".

    Par exemple, j'ai modifié la classe article en y ajoutant un attribut category, qui est une énumération comprenant les éléments suivants :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Elément Valeur
    Edito 	1
    Focus 2
    Presse 3
    (cette énumération est à choix unique)

    La requette de mon fetch est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    {def $liste_news=fetch('content', 'tree', hash('parent_node_id', 347, 'class_filter_type', 'include', 'class_filter_array', array('article'), attribute_filter, array( array( 'article/category', '=', 'Edito' ) )))}
    • J'obtiens le message d'erreur : Missing/malformed array to iterate through.
    • Si je fais un filtre sur l'identifiant de mon énumération ça ne marche pas non plus
    • Si je fais un filtre sur n'importe quel autre attribut de ma classe, cela fonctionne très bien


    Y'a t'il quelque chose que je fais mal?Pouvez vous m'aider?

    Merci d'avance.

  2. #2
    Rédacteur

    Avatar de Yoteco
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2004
    Messages
    1 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 099
    Points : 2 498
    Points
    2 498
    Par défaut
    Salut,

    Ce n'est peut-être pas ça, mais attribute_filter doit être entre guillemet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {def $liste_news=fetch('content', 'tree', hash('parent_node_id', 347, 'class_filter_type', 'include', 'class_filter_array', array('article'), 'attribute_filter', array( array( 'article/category', '=', 1 ) )))}
    De plus je filtrerais sur l'identifiant de l'enum mais ça j'en suis pas sûr
    Blog - Mon espace developpez -
    Oracle Certified Professional, Java SE 6 Programmer
    eZ Publish Certified developer

  3. #3
    Candidat au Club
    Inscrit en
    Avril 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    Non non, ça n'est pas une histoire de simple quote

    J'ai essayé toutes les syntaxes possibles et rien n'y fait, à se demander si l'on peut mettre un filtre sur une énumération...

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Bonjour a tous,

    J'ai le même problème qu'au dessus, si quelqu'un en a trouver la solution ...

    Je m'explique :

    mon fetch :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    {def $secteur=ezhttp( 'secteur_activite_recherche', 'get' )}
     
    {def $results=fetch(content, list, hash(
    					parent_node_id, ezini('Noeuds', 'Candidature', 'specifique.ini'),
    					class_filter_type, include,
    					class_filter_array, array('candidature'),
    					attribute_filter, array( array( 'candidature/secteur_activite', '=', $secteur)),
    					sort_by, $sort_by
    				))}
    Il fonctionne, sans attribute_filter !

    Ma syntaxe est mauvaise ? Mon but est de filtrer des candidatures par secteur d'activité que je récupère par une variable $_GET. L'attribut est bien "secteur_activite" et j'ai vérifié, je récupère bien ma variable $_GET.

    Un piste ? =)

    D'avance merci !!

  5. #5
    Membre éclairé Avatar de sboyer
    Homme Profil pro
    Développeur PHP chez OpenWide
    Inscrit en
    Février 2010
    Messages
    348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur PHP chez OpenWide
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2010
    Messages : 348
    Points : 683
    Points
    683
    Par défaut
    Bonjour,
    Un enum peut avoir plusieurs valeurs simultanément, donc je ne pense pas que ce soit possible.
    Il faut utiliser une boucle sinon...

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 25
    Points : 22
    Points
    22
    Par défaut
    Bonjour,

    Je faisais la même recherche, j'ai finalement trouvé une astuce permettant de contourner le problème sans créer de filtre personnalisé, ni faire de boucle
    Je la partage cela servira peut-être un jour
    Cela permet de filtrer sur une sélection (avec plusieurs choix cochés). Il est possible en fait d'utiliser la fonction 'search' du fetch en donnant comme texte recherché la valeur du tag et en ne faisant une recherche que sur l'attribut selection. Ainsi en reprenant l'exemple cela donnerait un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    {def $secteur=ezhttp( 'secteur_activite_recherche', 'get' )
           $selection_id=ezini( 'identifier', 'selection_attribute', 'specifique.ini')
    }
     
    {def $results=fetch(content, search, hash(
    					'text', $secteur,
    					'subtree_array', ezini( 'Noeuds', 'Candidature', 'specifique.ini'),
    					'class_id', array('candidature'),
    					'class_attribute_id', $selection_id,
    					'sort_by', $sort_by
    				))}
    Et voilà Le fichier de configuration .ini donnerait quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    [Noeuds]
    Candidature[]
    Candidature[]=123
     
    [identifier]
    selection_attribute[]
    selection_attribute[]=321
    On trouve l'id de l'attribut dans "Administration" puis "Classes" et enfin clique sur la classe voulue.

    Voilà, à peine plus d'un an de retard avant une solution

    La doc sur la fonction ici

  7. #7
    Membre éclairé Avatar de sboyer
    Homme Profil pro
    Développeur PHP chez OpenWide
    Inscrit en
    Février 2010
    Messages
    348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur PHP chez OpenWide
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2010
    Messages : 348
    Points : 683
    Points
    683
    Par défaut
    Salut,

    Simple précision complémentaire, il est possible de récupérer l'ID d'un attribut de classe en créant un opérateur appelant la fonction PHP eZContentObjectTreeNode::classAttributeIDByIdentifier()

    Exemple :
    Dans l'autoload :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $operatorValue=eZContentObjectTreeNode::classAttributeIDByIdentifier($operatorValue);
    Dans le template :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {'candidature/categorie'|classAttributeIDByIdentifier()}
    Ce qui donne au final :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    {def $secteur=ezhttp( 'secteur_activite_recherche', 'get' )
     
        $results=fetch(content, search, hash(
    					'text', $secteur,
    					'subtree_array', ezini( 'Noeuds', 'Candidature', 'specifique.ini'),
    					'class_id', array('candidature'),
    					'class_attribute_id', 'candidature/categorie'|classAttributeIDByIdentifier(),
    					'sort_by', $sort_by
    				))}

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 25
    Points : 22
    Points
    22
    Par défaut
    C'est génial ça
    Je m'en vais de suite modifier mon code et le simplifier

    Merci

Discussions similaires

  1. inner join fetch sur une query refusé
    Par nestr dans le forum NHibernate
    Réponses: 0
    Dernier message: 26/06/2015, 12h08
  2. [eZ publish] Création d'un lien cliquable sur une image
    Par tamiii dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 6
    Dernier message: 23/12/2009, 14h13
  3. [eZ Publish] Customiser taille image sur une classe ?
    Par le_chomeur dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 05/11/2009, 15h23
  4. Visitor sur une énumération
    Par storm_2000 dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 09/10/2009, 02h00
  5. Effet Fade In / Fade Out sur une surface DirectDraw
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 08/09/2002, 17h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo