Champs Personnalisés Auteur dans l'article

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

  • [RÉGLÉ] Champs Personnalisés Auteur dans l'article

    Hello tout le monde,

    Je cherche (sans trouver) comment je peux afficher les champs, personnalisés ou non, de l'auteur dans les articles en frontend. Par défaut on a bien le "créé par" qui arrive tout seul, mais je voudrais y ajouter l'email, l'adresse, et n'importe quel champs personnalisé que j'aurais créé au niveau Utilisateur de Joomla.

    J'utilise Joomla 3 et Joomla 4, mais je pense que la réponse sera la même pour les deux.

    Merci de votre aide !
    Antoine.

  • #2
    Bonjour,

    J'ai déjà bcp écrit sur les Champs Personnalisés... mais plutôt orienté Articles (et pas Contacts).
    La question est intéressante.
    Je n'ai pas la réponse directement mais je suis avec intérêt le fil
    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


    • #3
      Bon, apparemment il n'y a pas de réponse à ma question !

      En fait, après avoir un peu épluché le web sur le sujet, on doit pouvoir passer par les variables internes de Joomla, ou alors carrément développer une extension spécifique, mais là c'est un peu trop fort pour moi !

      Mais si quelqu'un a une idée...

      Commentaire


      • #4
        Un point de départ c'est les trois lignes de code suivantes qui permettent d'appeler les Champs Persos d'un article:



        Après, il faut remplacer dans la 2e des 3 lignes de code
        com_content.article
        par
        com_content.xxxxxxx

        (à voir ce que doit être xxx en faisant une recherche)
        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
          Oui, on est d'accord, il faut chercher avec le fer à souder du côté des "$my", savoir comment lier l'article aux CP du User qui en est l'auteur, mais là on est dans un monde que je ne connais absolument pas (j'aimerais bien, cela dit !), c'est du haut niveau.

          J'essaie de faire quelque chose d'équivalent avec l'extension "Fabrik", mais sans toucher aux tables Joomla.

          PS: Ceci étant dit, du temps où je programmais en Cobol et CA-Datacom/DB, on faisait ce genre de choses en trois coups de cuiller à pot, c'est quand même dommage qu'on ne puisse pas réaliser une requête aussi simple dans Joomla sans aller chercher des procédures aussi compliquées...
          Dernière édition par antoinepayen à 17/02/2022, 09h51

          Commentaire


          • #6
            Je continue à parler tout seul mais tant pis : il faudrait pouvoir récupérer les données du user created_by de l'article via un champs personnalisé de type SQL. MAis je ne trouve pas la syntaxe pour faire ça :

            SELECT `id` as 'value', `name` as 'text' FROM `xxx_users` WHERE id = '{$article->id}' ;

            Quelque chose comme ça mais le {$article->id} ne fonctionne pas tel quel, si quelqu'un sait comme on doit écrire ça...

            Merci,
            Antoine.

            Commentaire


            • #7
              Hello.

              Ta demande si je la comprend bien est plutot du ressort des surcharges.

              Le bloc supérieur intitulé détails est généré par un layout de Joomla.

              Il s’agit de info_block qui se situe en /layouts/joomla/content/info_block.php

              Concernant la partie "auteur" ce layout en appelle un autre qui est /layouts/joomla/content/info_block/author.php

              Les layout sont overridable comme je l'ai expliqué dans un autre post il n'y a pas si longtemps voir :
              https://forum.joomla.fr/forum/joomla...ie#post2037091


              Normalement tu devrais donc arriver à faire ce que tu souhaites.

              Il faut donc copier /layouts/joomla/content/info_block/author.php en /templates/nom_de_ton_template/html/layouts/joomla/content/info_block/author.php

              Ensuite il faut chercher les infos qu'il te manque (dans l'item courant on a toutes les infos de l’article, mais pas de l'auteur)

              Dans le code du layout ovveridé (donc dans ton template) ajoute après
              Code PHP:
              defined('_JEXEC') or die; 
              ceci
              Code PHP:
              $auteur Joomla\CMS\Factory::getUser($displayData['item']->created_by); 
              Ensuite tu auras accès aux champs de l'auteur pour rajouter par exemple l'email que je mets ici entre parenthèses après la mention "écrit par..."
              Code PHP:
              <dd class="createdby" itemprop="author" itemscope itemtype="https://schema.org/Person">
              <?php $author = ($displayData['item']->created_by_alias ?: $displayData['item']->author); ?>
              <?php $author 
              .= '('.$auteur->email.')';?>
              <?php $author 
              '<span itemprop="name">' $author '</span>'?>
              <?php 
              if (!empty($displayData['item']->contact_link ) && $displayData['params']->get('link_author') == true) : ?>
              <?php 
              echo JText::sprintf('COM_CONTENT_WRITTEN_BY'JHtml::_('link'$displayData['item']->contact_link$author, array('itemprop' => 'url'))); ?>
              <?php 
              else : ?>
              <?php 
              echo JText::sprintf('COM_CONTENT_WRITTEN_BY'$author); ?>
              <?php 
              endif; ?>
              </dd>
              Bon amusement.
              A tous les utilisateurs de Joomla du très Grand Est de la France et du Jura suisse
              Rejoignez le Joomla Users Groupe Alsace...
              roland_d_alsace va-t-il devenir roland_du_grand_est ?

              Commentaire


              • #8
                Pour compléter ma réponse ci dessus voici comment récupérer les custom fields dans l'overide du layout author de com_content :

                Code PHP:
                defined('_JEXEC') or die;

                $auteur Joomla\CMS\Factory::getUser($displayData['item']->created_by); // recherche de l'auteur
                JLoader::register('FieldsHelper'JPATH_ADMINISTRATOR '/components/com_fields/helpers/fields.php'); // enregistrement de la librairie nécessaire aux champs perso
                $auteurCustomFields FieldsHelper::getFields('com_users.user'$auteurtrue); // recherche des champs perso de l'auteur 
                Voici le contenu de la surcharge de author.php qui affiche l'email comme expliqué dans ma réponse précédente, puis l'adresse de l'auteur qui serait ici dans le 1er custom field défini dans com_user

                Code PHP:
                <?php
                /**
                * @package Joomla.Site
                * @subpackage Layout
                *
                * Copyright (C) 2013 Open Source Matters, Inc. <https://www.joomla.org>
                * @license GNU General Public License version 2 or later; see LICENSE.txt
                */

                defined('_JEXEC') or die;

                $auteur Joomla\CMS\Factory::getUser($displayData['item']->created_by); // recherche de l'auteur
                JLoader::register('FieldsHelper'JPATH_ADMINISTRATOR '/components/com_fields/helpers/fields.php'); // enregistrement de la librairie nécessaire aux champs perso
                $auteurCustomFields FieldsHelper::getFields('com_users.user'$auteurtrue); // recherche des champs perso de l'auteur
                ?>
                <dd class="createdby" itemprop="author" itemscope itemtype="https://schema.org/Person">
                <?php $author = ($displayData['item']->created_by_alias ?: $displayData['item']->author); ?>
                <?php $author 
                .= '('.$auteur->email.')'// affichage de l'email ?>
                <?php $author 
                '<span itemprop="name">' $author '</span>'?>
                <?php 
                if (!empty($displayData['item']->contact_link ) && $displayData['params']->get('link_author') == true) : ?>
                <?php 
                echo JText::sprintf('COM_CONTENT_WRITTEN_BY'JHtml::_('link'$displayData['item']->contact_link$author, array('itemprop' => 'url'))); ?>
                <?php 
                else : ?>
                <?php 
                echo JText::sprintf('COM_CONTENT_WRITTEN_BY'$author); ?>
                <?php 
                endif; ?>
                <?php
                if(isset($auteurCustomFields['0']->rawvalue) && $auteurCustomFields['0']->rawvalue != ''){
                   echo 
                '<div>'.$auteurCustomFields['0']->rawvalue.'</div>'// affichage du 1er champ perso si existe et non vide
                }
                ?>
                </dd>
                Je n'ai pas "travaillé" l'affichage, mais je pense que ce sera une base de travail.
                Dernière édition par roland_d_alsace à 19/02/2022, 19h34
                A tous les utilisateurs de Joomla du très Grand Est de la France et du Jura suisse
                Rejoignez le Joomla Users Groupe Alsace...
                roland_d_alsace va-t-il devenir roland_du_grand_est ?

                Commentaire


                • #9
                  Merci Roland, c'est exactement ça qu'il me fallait, je pense. Je vais m'y atteler sans tarder et je reviens te dire ce que j'arrive à faire...

                  Bon dimanche !
                  Antoine

                  ps: j'ai aussi trouvé ça sur le sujet : https://forum.joomla.org/viewtopic.php?t=952189
                  Dernière édition par antoinepayen à 20/02/2022, 09h15

                  Commentaire


                  • #10
                    Oui ça marche !

                    Donc j'ai modifié le fichier author.php du template, j'affiche maintenant l'adresse complète de l'auteur via les champs du plugin "Utilisateur - Profile".

                    Maintenant il faut trouver comment faire pour afficher tout ça n'importe où dans l'article...

                    A+
                    Antoine.

                    Commentaire


                    • #11
                      Envoyé par antoinepayen Voir le message
                      Oui ça marche !

                      Donc j'ai modifié le fichier author.php du template, j'affiche maintenant l'adresse complète de l'auteur via les champs du plugin "Utilisateur - Profile".

                      Maintenant il faut trouver comment faire pour afficher tout ça n'importe où dans l'article...

                      A+
                      Antoine.
                      Euh, ça c'est différent, tu parlais de l'utilisation de champs personnalisés (donc dans le menu utilisateurs / champs) et pas des champs du plugin user "profil utilisateur", qui enregistre les informations dans une table #__user_profile de la DB, ce n'est pas pareil.

                      En fait ce plugin "utilisateur - profil" existait bien avant l’intégration des champs perso dans Joomla.

                      Dans tous les cas pour afficher une information de ce type n'importe où dans le corps de l'article, il faudra passer par un plugin de contenu (type content).

                      Ça existe en natif pour les champs perso mais pas pour les champs du plugin utilisateur - profil

                      C'est pas trop compliqué à faire, mais je ne pense pas que quelqu'un l'ait fait jusqu'à présent.
                      Dernière édition par roland_d_alsace à 21/02/2022, 20h42
                      A tous les utilisateurs de Joomla du très Grand Est de la France et du Jura suisse
                      Rejoignez le Joomla Users Groupe Alsace...
                      roland_d_alsace va-t-il devenir roland_du_grand_est ?

                      Commentaire


                      • #12
                        Merci Roland, en fait j'y arrive presque avec du code directement dans l'article avec le plugin "sourcerer", sauf la fonction "$displayData['item']->created_by" qui ne ramène rien apparemment. C'est peut-être une question de contexte parce que cette fonction est bien opérationnelle dans l'override du template "author.php". Il faut aller chercher l'identifiant du l'auteur de l'article courant, il est pourtant bien dans le champ "created_by", mais je ne sais pas comment le lire !

                        Faut que je cherche encore !

                        Commentaire


                        • #13
                          Alors voilà ce que j'ai écrit, en utilisant le plugin sourcerer et en intégrant le code source directement dans le texte introtext de l'article :

                          {source}<?php

                          defined('JPATH_BASE') or die;

                          // $userData = JFactory::getUser($displayData['item']->created_by);
                          $userData = JFactory::getUser(76); // pour tester la suite
                          $authorId = $userData->id;

                          $authoraddress1 = JUserHelper::getProfile($authorId)->profile['address1'];
                          $authorpostalcode = JUserHelper::getProfile($authorId)->profile['postal_code'];
                          $authorcity = JUserHelper::getProfile($authorId)->profile['city'];

                          $authorName = $userData->name;
                          echo '<br>' . JText::sprintf('COM_CONTENT_WRITTEN_BY', $authorName);
                          echo '<br>' . JText::sprintf($authoraddress1);
                          echo '<br>' . JText::sprintf($authorpostalcode) . " " . JText::sprintf($authorcity);

                          ?>{/source}


                          Le problème est dans la première ligne qui fait appel à la fonction $displayData['item'] qui ne renvoie rien ici, alors que cette même formulation fonctionne dans le composant author.php du template. Il faut sûrement utiliser une autre méthode pour aller chercher le created_by de l'article en cours de visualisation, mais laquelle ?

                          Pour le reste tout fonctionne parfaitement bien, j'ai aussi utilisé les champs personnalisés du user avec succès, sur Joomla 3 comme sur Joomla 4.

                          Merci de votre aide !
                          Antoine.

                          Commentaire


                          • #14
                            Je passe ce fil en [réglé] et je pose ma question sur le forum Joomla 4...

                            Commentaire


                            • #15
                              Envoyé par antoinepayen Voir le message
                              Alors voilà ce que j'ai écrit, en utilisant le plugin sourcerer et en intégrant le code source directement dans le texte introtext de l'article :

                              {source}<?php

                              defined('JPATH_BASE') or die;

                              // $userData = JFactory::getUser($displayData['item']->created_by);
                              $userData = JFactory::getUser(76); // pour tester la suite
                              $authorId = $userData->id;

                              $authoraddress1 = JUserHelper::getProfile($authorId)->profile['address1'];
                              $authorpostalcode = JUserHelper::getProfile($authorId)->profile['postal_code'];
                              $authorcity = JUserHelper::getProfile($authorId)->profile['city'];

                              $authorName = $userData->name;
                              echo '<br>' . JText::sprintf('COM_CONTENT_WRITTEN_BY', $authorName);
                              echo '<br>' . JText::sprintf($authoraddress1);
                              echo '<br>' . JText::sprintf($authorpostalcode) . " " . JText::sprintf($authorcity);

                              ?>{/source}


                              Le problème est dans la première ligne qui fait appel à la fonction $displayData['item'] qui ne renvoie rien ici, alors que cette même formulation fonctionne dans le composant author.php du template. Il faut sûrement utiliser une autre méthode pour aller chercher le created_by de l'article en cours de visualisation, mais laquelle ?

                              Pour le reste tout fonctionne parfaitement bien, j'ai aussi utilisé les champs personnalisés du user avec succès, sur Joomla 3 comme sur Joomla 4.

                              Merci de votre aide !
                              Antoine.
                              Il est sur que sourcerer est exécuté au niveau du rendu, on est donc plus du tout dans le même contexte.
                              Tu n'as donc plus accès à la classe $displayData['item'].
                              Il n'y a guère qu'en stockant tes données dans une variable de session (qui fera alors office de "super globale") dans l'override de layout par exemple (méthodes setUserState / getUserState) qui tu arrivera à les récupérer dans ce contexte (au niveau du rendu).
                              (Voir https://docs.joomla.org/How_to_use_user_state_variables)
                              Ou éventuellement via une constante php (fonction "define" voir https://www.php.net/manual/fr/function.define.php) en faisant gaffe au namespace.
                              Dernière édition par roland_d_alsace à 24/02/2022, 22h28
                              A tous les utilisateurs de Joomla du très Grand Est de la France et du Jura suisse
                              Rejoignez le Joomla Users Groupe Alsace...
                              roland_d_alsace va-t-il devenir roland_du_grand_est ?

                              Commentaire

                              Annonce

                              Réduire
                              Aucune annonce pour le moment.

                              Partenaire de l'association

                              Réduire

                              Hébergeur Web PlanetHoster
                              Travaille ...
                              X