Requête SQL pour avoir la liste des articles... avec leurs Champs Personnalisés

Réduire
X
 
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • [RÉGLÉ] Requête SQL pour avoir la liste des articles... avec leurs Champs Personnalisés

    Bonjour à tous,

    Je suis en train de travailler sur un site qui exploite pas mal les Custom Fields.
    Indépendamment du site, je voulais avoir une requête SQL qui permette de tirer la liste des Articles d'une catégorie donnée... avec leurs Champs Personnalisés (Custom Fields).
    (Le but est d'avoir une sorte de "fichier plat")

    J'ai déjà la base, càd le SQL pour tirer la liste des Articles d'une catégorie donnée, sans les Custom Fields :

    Code PHP:
     define('SQL','SELECT C.id As Article_ID, C.title As Article_Title, G.title As Category_Title, '.
       
    'U.name As Author_Name, C.Hits As Hits, C.language As Language, C.created As Writen_Date '.
       
    'FROM `#__content` C LEFT JOIN `#__categories` G ON C.catid = G.id '.
       
    'LEFT JOIN `#__users` U on C.created_by=U.id '.
       
    'WHERE (state=1 and catid = 41) '.
       
    'ORDER BY C.title ASC'); 
    Une suggestion/idée pour comment amender ce SQL de départ et y ajouter les Custom Fields ?

    Merciiii !

    Marc
    Dernière édition par woluweb à 02/10/2017, 17h55
    Présentations : slides.woluweb.be | Coordonnées complètes : www.woluweb.be

    Un message d’erreur sur votre site Joomla... ayez le reflexe de consulter la base de connaissance : https://kb.joomla.fr

    Ce forum, vous l'aimez ? Il vous a sauvé la vie ? Vous y apprenez régulièrement ? Alors adhérer à l'AFUJ, l'Association Francophone des Utilisateurs de Joomla : https://www.joomla.fr/association/adherer

  • #2
    Re : Requête SQL pour avoir la liste des articles... avec leurs Champs Personnalisés

    Envoyé par woluweb Voir le message
    Bonjour à tous,

    Je suis en train de travailler sur un site qui exploite pas mal les Custom Fields.
    Indépendamment du site, je voulais avoir une requête SQL qui permette de tirer la liste des Articles d'une catégorie donnée... avec leurs Champs Personnalisés (Custom Fields).
    (Le but est d'avoir une sorte de "fichier plat")

    J'ai déjà la base, càd le SQL pour tirer la liste des Articles d'une catégorie donnée, sans les Custom Fields :

    Code PHP:
     define('SQL','SELECT C.id As Article_ID, C.title As Article_Title, G.title As Category_Title, '.
       
    'U.name As Author_Name, C.Hits As Hits, C.language As Language, C.created As Writen_Date '.
       
    'FROM `#__content` C LEFT JOIN `#__categories` G ON C.catid = G.id '.
       
    'LEFT JOIN `#__users` U on C.created_by=U.id '.
       
    'WHERE (state=1 and catid = 41) '.
       
    'ORDER BY C.title ASC'); 
    Une suggestion/idée pour comment amender ce SQL de départ et y ajouter les Custom Fields ?

    Merciiii !

    Marc
    comment sont définis les champs personnalisés dans ta base de donnée ?
    si tu reponds a cette question, la réponse viendras d'elle même...

    Commentaire


    • #3
      Re : Requête SQL pour avoir la liste des articles... avec leurs Champs Personnalisés

      vu la structure des tables je pense qu'il faut que tu le fasse via une autre requête sql :

      Code PHP:
      $sql 'SELECT a.label,b.value 
      FROM `#__fields` AS a 
      INNER JOIN `#__fields_values` AS b ON a.id = b.field_id
      WHERE a.context = "com_content.article" AND b.item_id = '
      .$id_article
      Plus c'est simple pour l'utilisateur, et plus c'est complexe pour le développeur, et vice versa

      Commentaire


      • #4
        Re : Requête SQL pour avoir la liste des articles... avec leurs Champs Personnalisés

        Merci tout le monde !

        On tient le bon bout.
        J'ai essayé ceci (en mettant l'ID réel d'un article pour le test).
        Ca fonctionne, dans le sens où, pour cet article, j'ai bien tous les Custom Fields (labels et valeurs) listés ligne par ligne

        Code PHP:
        define('SQL''SELECT a.label,b.value FROM `#__fields` AS a INNER JOIN `#__fields_values` AS b ON a.id = b.field_id WHERE a.context = "com_content.article" AND b.item_id = 8366'); 
        Mais pour être précis, ce dont j'ai besoin, c'est d'avoir la liste des ARTICLES (un article par ligne), et que ce soit dans les colonnes qu'on ait
        - le titre de l'article
        - son ID
        - ...
        - et tous ses Custom Fields

        Bref, une sorte de mélange entre le SQL de départ que j'avais et celui-ci

        @lefabdu51 : tu demandais comment sont définis les Champs Personnalisés. Ce sont les champs natifs Joomla. En ajoutant un Custom Field pour les articles p.ex, on voit directement ce que ça donne dans la base de données
        Dernière édition par woluweb à 03/10/2017, 09h26
        Présentations : slides.woluweb.be | Coordonnées complètes : www.woluweb.be

        Un message d’erreur sur votre site Joomla... ayez le reflexe de consulter la base de connaissance : https://kb.joomla.fr

        Ce forum, vous l'aimez ? Il vous a sauvé la vie ? Vous y apprenez régulièrement ? Alors adhérer à l'AFUJ, l'Association Francophone des Utilisateurs de Joomla : https://www.joomla.fr/association/adherer

        Commentaire


        • #5
          Re : Requête SQL pour avoir la liste des articles... avec leurs Champs Personnalisés

          Bonjour

          À main levée, voici une proposition de code :

          Code:
          SELECT C.id As Article_ID, C.title As Article_Title, G.title As Category_Title,
          U.name As Author_Name, C.Hits As Hits, C.language As Language, C.created As Writen_Date, F.Label As FieldName, V.Value As FieldValue 
          FROM `#__content` C LEFT JOIN `#__categories` G ON C.catid = G.id
          LEFT JOIN `#__users` U ON (U.id=C.created_by)
          LEFT JOIN `#__fields_values` AS V ON (V.item_id = C.id)
          LEFT JOIN `#__fields` F ON (F.id = V.field_id) AND (F.context = 'com_content.article')
          WHERE (C.state=1) and (C.catid = 41)
          ORDER BY C.title ASC
          (non testée)
          Dernière édition par cavo789 à 03/10/2017, 10h11
          Christophe (cavo789)
          Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be
          Logiciel gratuit de scan antivirus : https://github.com/cavo789/aesecure_quickscan (plus de 45.000 virus détectés, 700.000 fichiers sur liste blanche)​

          Commentaire


          • #6
            Re : Requête SQL pour avoir la liste des articles... avec leurs Champs Personnalisés

            Bonjour,

            Juste pour info, j'avais commencé la gestion des fields en passant par SQL et, après quelques essais, il me manquait les valeurs par défaut (qui ne sont pas dans la table associée à un article)et, en cas d'évolution de la base de données, je n'étais plus compatible...

            Donc, j'ai trouvé une solution simple :

            JLoader::register('FieldsHelper', JPATH_ADMINISTRATOR . '/components/com_fields/helpers/fields.php');
            $test = FieldsHelper::getFields('com_content.article',$ite m);
            Cela retourne une array avec les champs associés à un article.

            Ensuite, il faut analyser le contenu pour récupérer les valeurs des fields
            foreach ($test as $field) {
            if (property_exists($field,'value')) {// on a une valeur associé au champ
            $val = $field->value;
            }
            $param = json_decode($field->fieldparams);
            if (property_exists($param,'options')) { // fields avec options
            foreach ($param->options as $option) {
            if ($option->value == $field->value) {
            $val=$option->name;
            }
            }
            }
            ......
            }
            Pascal
            If anything can go wrong, it will...If I can help, I will ..https://conseilgouz.com

            Commentaire


            • #7
              Re : Requête SQL pour avoir la liste des articles... avec leurs Champs Personnalisés

              J'ai testé la proposition de Christophe :
              on y est presque... mais comme on voit sur la capture ci-dessous, ça fait autant de lignes qu'il y a de champs complémentaires.
              Or, l'idée était d'avoir un fichier plat, du genre "Titre, Date, Image, Description, Champ 1, Champ 2, Champ 3, ..."

              Cliquez sur l'image pour l'afficher en taille normale

Nom : 2017-10-03_11h51_09.jpg 
Affichages : 1 
Taille : 17,6 Ko 
ID : 1806446

              [ edit : je vois que le forum réduit pas mal la taille de l'image. La voici en plein format : https://screenpresso.com/=L4XBc ]
              Présentations : slides.woluweb.be | Coordonnées complètes : www.woluweb.be

              Un message d’erreur sur votre site Joomla... ayez le reflexe de consulter la base de connaissance : https://kb.joomla.fr

              Ce forum, vous l'aimez ? Il vous a sauvé la vie ? Vous y apprenez régulièrement ? Alors adhérer à l'AFUJ, l'Association Francophone des Utilisateurs de Joomla : https://www.joomla.fr/association/adherer

              Commentaire


              • #8
                Re : Requête SQL pour avoir la liste des articles... avec leurs Champs Personnalisés

                Envoyé par pmleconte Voir le message
                Bonjour,

                Juste pour info, j'avais commencé la gestion des fields en passant par SQL et, après quelques essais, il me manquait les valeurs par défaut (qui ne sont pas dans la table associée à un article)et, en cas d'évolution de la base de données, je n'étais plus compatible...

                Donc, j'ai trouvé une solution simple :



                Cela retourne une array avec les champs associés à un article.

                Ensuite, il faut analyser le contenu pour récupérer les valeurs des fields


                Pascal
                Merci Pascal,

                A vrai dire, j'étais parti sur du SQL parce que le but était d'utiliser de sympathique script de notre non moins sympathique Christophe :-)
                Et qu'au départ c'est un SQL qui est dans le script :
                A set of php scripts that will probably be useful to you in your life as a webmaster, including, for example, check_db (for quickly check your Joomla's configuration), kill_db_tables for removi...

                Mais si tu vois comment combiner ton code et le script, je suis preneur aussi ;-)
                Présentations : slides.woluweb.be | Coordonnées complètes : www.woluweb.be

                Un message d’erreur sur votre site Joomla... ayez le reflexe de consulter la base de connaissance : https://kb.joomla.fr

                Ce forum, vous l'aimez ? Il vous a sauvé la vie ? Vous y apprenez régulièrement ? Alors adhérer à l'AFUJ, l'Association Francophone des Utilisateurs de Joomla : https://www.joomla.fr/association/adherer

                Commentaire


                • #9
                  Re : Requête SQL pour avoir la liste des articles... avec leurs Champs Personnalisés

                  c'est pour ça que je dit que tu dois passer par deux requêtes car d'un coté tu as une ligne et de l'autre tu as plusieurs lignes qui correspondent à la même ligne.

                  Disons que c'est possible si jamais tes champs supplémentaires ne changent pas, tu peux le faire en dur mais ça impliquera de faire autant de jointures qu'il y a de champs personnalisés...

                  Pourquoi es tu aussi réticent à l'idée de faire deux requêtes?

                  Tu fais une fonction qui construit le tableau que tu veux avec les deux requêtes tout simplement.
                  Plus c'est simple pour l'utilisateur, et plus c'est complexe pour le développeur, et vice versa

                  Commentaire


                  • #10
                    Re : Requête SQL pour avoir la liste des articles... avec leurs Champs Personnalisés

                    Envoyé par klarann18 Voir le message
                    c'est pour ça que je dit que tu dois passer par deux requêtes car d'un coté tu as une ligne et de l'autre tu as plusieurs lignes qui correspondent à la même ligne.

                    Disons que c'est possible si jamais tes champs supplémentaires ne changent pas, tu peux le faire en dur mais ça impliquera de faire autant de jointures qu'il y a de champs personnalisés...

                    Pourquoi es tu aussi réticent à l'idée de faire deux requêtes?

                    Tu fais une fonction qui construit le tableau que tu veux avec les deux requêtes tout simplement.
                    Bonjour,
                    Je ne suis pas réticent à quoi que soit.
                    C'est juste que, perso, je ne sais pas (i) rédiger le SQL (ii) ni le PHP correspondants :-D

                    Et pour moi on peut le faire en dur (les champs sont définitifs), ce qui est sans doute plus simple pcq il ne faut pas être "dynamique" sur le nombre de champs.
                    Présentations : slides.woluweb.be | Coordonnées complètes : www.woluweb.be

                    Un message d’erreur sur votre site Joomla... ayez le reflexe de consulter la base de connaissance : https://kb.joomla.fr

                    Ce forum, vous l'aimez ? Il vous a sauvé la vie ? Vous y apprenez régulièrement ? Alors adhérer à l'AFUJ, l'Association Francophone des Utilisateurs de Joomla : https://www.joomla.fr/association/adherer

                    Commentaire


                    • #11
                      Re : Requête SQL pour avoir la liste des articles... avec leurs Champs Personnalisés

                      En dynamique sous SQL Serveur il y a une instruction PIVOT en SQL. À voir si cela existe aussi en mysql.

                      Sinon le faire en dur pourrait être possible en construisant un SQL statement qui inclurait les tables fields et fields_value autant de fois qu'il y a de champs mais c'est peu propre (mais permet alors d'avoir un SQL réutilisable).
                      Christophe (cavo789)
                      Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be
                      Logiciel gratuit de scan antivirus : https://github.com/cavo789/aesecure_quickscan (plus de 45.000 virus détectés, 700.000 fichiers sur liste blanche)​

                      Commentaire


                      • #12
                        Re : Requête SQL pour avoir la liste des articles... avec leurs Champs Personnalisés

                        voila une requête qui devrai aider :

                        SELECT c.id As Article_ID, c.title As Article_Titre, g.title As Catégorie_Titre,
                        u.name As Auteur_Nom, c.Hits As Hits, c.modified As Date_modif,
                        f1.value AS Mon_champ1,f2.value AS Mon_champ2,f3.value AS Mon_champ3
                        FROM `#__content` AS c
                        LEFT JOIN `#__categories` AS g ON c.catid = g.id
                        LEFT JOIN `#__users` AS u on c.created_by = u.id
                        LEFT JOIN `#__fields_values` AS f1 ON f1.item_id = c.id AND f1.field_id = 17
                        LEFT JOIN `#__fields_values` AS f2 ON f2.item_id = c.id AND f2.field_id = 18
                        LEFT JOIN `#__fields_values` AS f3 ON f3.item_id = c.id AND f3.field_id = 19
                        WHERE c.state=1 AND c.catid = 9
                        ORDER BY c.title ASC
                        Plus c'est simple pour l'utilisateur, et plus c'est complexe pour le développeur, et vice versa

                        Commentaire


                        • #13
                          Re : Requête SQL pour avoir la liste des articles... avec leurs Champs Personnalisés

                          Merci @Klarann18 !
                          Comme déjà dit en MP, merci E-NOR-ME-MENT !
                          C'est génial : ça affiche bien tous les articles (i) publiés, (ii) pour une catégorie donnée (iii) pour tous les champs que l'on veut (que ces champs soient vides ou pas).

                          Parfait donc !
                          Merci à tous ceux qui ont participé

                          Marc
                          Présentations : slides.woluweb.be | Coordonnées complètes : www.woluweb.be

                          Un message d’erreur sur votre site Joomla... ayez le reflexe de consulter la base de connaissance : https://kb.joomla.fr

                          Ce forum, vous l'aimez ? Il vous a sauvé la vie ? Vous y apprenez régulièrement ? Alors adhérer à l'AFUJ, l'Association Francophone des Utilisateurs de Joomla : https://www.joomla.fr/association/adherer

                          Commentaire


                          • #14
                            Re : Requête SQL pour avoir la liste des articles... avec leurs Champs Personnalisés

                            Profitant de l'intérêt de Marc, j'ai pris le temps aujourd'hui d'adapter le script Show_Table pour implémenter des boutons permettant de copier les données dans le presse-papier mais aussi télécharger les données au format CSV / XLS ou encore imprimer le tableau dans un format tabulaire.

                            Rien de bien sorcier car le génial DataTables (https://datatables.net) nous donne toutes ces fonctionnalités en gratuit.

                            Voici le lien vers l'image du nouveau layout : https://github.com/cavo789/joomla_fr...w_table#images

                            Le script Show_Table est gratuit; n'hésitez pas à partager vos ajouts si vous en faites
                            Christophe (cavo789)
                            Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be
                            Logiciel gratuit de scan antivirus : https://github.com/cavo789/aesecure_quickscan (plus de 45.000 virus détectés, 700.000 fichiers sur liste blanche)​

                            Commentaire

                            Annonce

                            Réduire
                            Aucune annonce pour le moment.

                            Partenaire de l'association

                            Réduire

                            Hébergeur Web PlanetHoster
                            Travaille ...
                            X