enregistrer un champ personnalisé en bdd dans un plugin de contenu onContentAfterSave

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

  • enregistrer un champ personnalisé en bdd dans un plugin de contenu onContentAfterSave

    Bonjour,

    J'ai un champ personnalisé pour les articles.
    Je veux qu'à chaque fois qu'un admin créé ou édite un article, ce champ personnalisé soit mis automatiquement à jour.


    Pour se faire, j'ai donc créé le plugin suivant :

    Code:
    <?php
    
    use Joomla\CMS\Plugin\CMSPlugin;
    use Joomla\Component\Fields\Administrator\Helper\FieldsHelper;
    use Joomla\CMS\Helper\ContentHelper;
    
    
    class plgContentOrderaftermodule extends CMSPlugin
    {
        public function onContentAfterSave($context, $item, $isNew)
        {
            if ($context === 'com_content.article') {
    
                $articleId = $item->id;
    
                // Récupérer le champ personnalisé 'mon_champ'
                $fields = FieldsHelper::getFields('com_content.article', $item, true);
                foreach( $fields as $field){
                    if($field->name == 'date-display')
                        $field->value = date('d/m/Y');
                }
    
                FieldsHelper::save('com_content.article', $item, $fields);​
    
            }
        }
    }​
    sauf que voila, FieldsHelper::save n'existe pas.

    Ca fait deux heures que je cherche sur la doc comment faire, et je ne trouve pas:

    COMMENT FAIRE en JOOMLA 4 pour enregistrer en base un champ custom dans un plugin de contenu ?

    Ca ne me parait pourtant pas sorcier comme demande ?

    Merci !!

  • #2
    Bonjour,

    La fonction save est dans le model accessible en utilisant :
    use Joomla\Component\Fields\Administrator\Model\FieldM odel

    Pascal
    woluweb aime ceci.
    If anything can go wrong, it will...If I can help, I will ..https://conseilgouz.com

    Commentaire


    • #3
      haaaaaaaaaaaaaaaaaa ok merci

      Commentaire


      • #4
        Salut pmleconte !
        Je m'incruste dans ce fil pour une question similaire : si au lieu de vouloir enregistrer un Champ Perso on voulait ajouter un Tag, tu aurais un exemple ? (j'ai essayé de trouver par moi-même, mais difficile de trouver des exemples visiblement )
        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
          Envoyé par kaking Voir le message
          haaaaaaaaaaaaaaaaaa ok merci
          En fait, je n'utilise pas save mais model::setFieldValue($fieldId, $itemId, $value) , les valeurs étant plus simples à utiliser que le $data du save, ce $data correspondant au contenu d'un formulaire.

          Pascal
          If anything can go wrong, it will...If I can help, I will ..https://conseilgouz.com

          Commentaire


          • #6
            Envoyé par woluweb Voir le message
            Salut pmleconte !
            Je m'incruste dans ce fil pour une question similaire : si au lieu de vouloir enregistrer un Champ Perso on voulait ajouter un Tag, tu aurais un exemple ? (j'ai essayé de trouver par moi-même, mais difficile de trouver des exemples visiblement )
            Bonsoir Marc,

            Je n'ai pas encore "joué" avec les tags et leurs models. J'y ai trouvé une fonction save, mais, comme pour les fields, elle utilise le résultat d'un formulaire. Par contre, j'ai vu que TagTable semble plus prometteur avec sa fonction store. Je vais faire quelques essais.

            Sinon, un bon gros update dans les tables tags et contentitem_tag_map de la base de données peut faire l'affaire.

            Pascal
            woluweb aime ceci.
            If anything can go wrong, it will...If I can help, I will ..https://conseilgouz.com

            Commentaire


            • #7
              Bonjour
              Je m'incruste aussi
              kaking
              C'est un des points de dev que je n'ai pas pu finaliser par manque de compétence.
              Si tu as résolu cela , pourrais-tu publier le code de ton plugin ?
              Faciliter l'adoption du meilleur du Libre auprès du grand public https://clibre.eu/ - Connaissez-vous des communicants ... pour promouvoir joomla ? https://forum.joomla.fr/forum/th%C3%...mouvoir-joomla

              Commentaire


              • #8
                Envoyé par woluweb Voir le message
                Salut pmleconte !
                Je m'incruste dans ce fil pour une question similaire : si au lieu de vouloir enregistrer un Champ Perso on voulait ajouter un Tag, tu aurais un exemple ? (j'ai essayé de trouver par moi-même, mais difficile de trouver des exemples visiblement )
                Hello .

                On parle bien d'ajouter des tags existants dans un article, pas de créer des tags ?

                Si oui, pour ajouter des tags dans un article via un plugin system ou de contenu, normalement il suffit de mettre leur ids dans le champ de nom tags de l'item article (de type array, qui sera enregistré correctement dans la table #__tags par le framework à l'écriture) dans le onContentBeforeSave :

                Tu peux par exemple récupérer les id via un champ de type tag dans la config du plugin.

                Un truc du genre :

                Dans la section config du manifest du plugin :
                Code:
                        <field
                            name="info_tags"
                            type="tag"
                            mode="ajax"
                            label="COM_XXX_CONFIG_TAGS_LABEL"
                            description="COM_XXX_CONFIG_TAGS_DESC"
                            multiple="true"
                            showon="imports_auto_site:1[OR]imports_info_site:1"
                        />
                Dans le code du plugin :
                Code PHP:
                public function onContentBeforeSave($context$item$isNew$data = [])
                  {
                if((
                $context != 'com_content.form')){
                  return 
                true;
                  }



                ...
                $item->tags =  $this->params->get('info_tags',array());
                ...
                return 
                true;
                  } 
                Cela devrait fonctionner.

                Bon dev.
                Dernière édition par roland_d_alsace à 10/05/2023, 13h41
                woluweb aime ceci.
                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
                  Pour un client qui veut classer les articles recherchés avec JFilters sur base de la valeur d'un champ personnalisé, ce que JFilters ne permet pas (encore), j'ai écrit le petit plugin suivant pour utiliser une fonction peu utilisée du composant SmartSearch, le classement par "liste de prix" (!?). C'est un plugin à mettre dans les plugins "content".

                  Code:
                  <?php
                  
                  /**
                  * @package Joomla.Plugin
                  *
                  * [USER="64686"]Copyright[/USER] (C) 2021 Open Source Matters, Inc. <https://www.joomla.org>
                  * @license GNU General Public License version 2 or later; see LICENSE.txt
                  
                  * @phpcs:disable PSR1.Classes.ClassDeclaration.MissingNamespace
                  */
                  
                  use Joomla\CMS\Plugin\CMSPlugin;
                  use Joomla\CMS\Factory;
                  
                  \defined('_JEXEC') or die;
                  
                  class PlgContentUpdateordering extends CMSPlugin
                  {
                       public function onContentAfterSave($context, $article, $isNew): void
                      {
                             if($context === 'com_content.article')
                            {
                                   $db = Factory::getDBO();
                  
                                  // Get value of field
                                 $query = $db->getQuery( true );
                                 $query->select('value')
                                              ->from('#__fields_values')
                                              ->where('item_id = ' . $article->id . ' AND field_id = 3');
                                $db->setQuery( $query );
                                $value = $db->loadResult();
                  
                                // Update value
                               if($value)
                               {
                                      $query = $db->getQuery( true );
                                      $query->update('#__finder_links')
                                                   ->set('list_price = ' . $value)
                                                   ->where('url = ' .$db->quote('index.php?option=com_content&view=article& id=' . $article->id));
                                     $db->setQuery( $query );
                                    $db->execute();
                                }
                            }
                       }
                  }

                  Ce serait effectivement plus propre d'utiliser les méthodes existantes dans les modèles, mais je n'ai pas eu le temps d'explorer.
                  herve et woluweb aiment ceci.
                  Tous les services pour les sites Joomla! : sécurité, nettoyage de sites piratés, hébergement, SEO, applications Fabrik, migration, compatibilité mobiles, accessibilité, ...
                  Administrateur certifié Joomla! 3
                  https://www.betterweb.fr

                  Commentaire


                  • #10
                    Bonjour
                    J'ai un peu plus regardé mais je m'aperçois que je cherchais plutôt dans l'autre sens. a partir de l'ajout/modif d'une valeur d'un champ personnalisé, je souhaitais enregistrer son contenu dans un champ joomla.
                    Faciliter l'adoption du meilleur du Libre auprès du grand public https://clibre.eu/ - Connaissez-vous des communicants ... pour promouvoir joomla ? https://forum.joomla.fr/forum/th%C3%...mouvoir-joomla

                    Commentaire

                    Annonce

                    Réduire
                    Aucune annonce pour le moment.

                    Partenaire de l'association

                    Réduire

                    Hébergeur Web PlanetHoster
                    Travaille ...
                    X