Migrationd'un module vers j4

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

  • #16
    Je suis justement sur une migration repeatable => subform sur un de mes modules.

    Au niveau du xml du module en J3, j'avais
    Code:
    <field name="slideslist" showon="cg_img_type:files"
    type="repeatable" label="CG_SLIDE_LIST" description="CG_SLIDE_LIST_DESC" select="CG_SLIDE_LIST">
    <fieldset hidden="true" name="slideslist_modal" repeat="true">
    <field name="file_name" type="media" default="" label="FILE_NAME" description="FILE_NAME_DESC" preview="tooltip" preview_width="100" preview_height="100">
    </field>
    </fieldset>
    </field>
    En J4, c'est devenu :
    Code:
    <field name="slideslist" showon="cg_img_type:files"
    type="subform" multiple ="true"
    formsource="/modules/mod_cg_parallax/mod_cg_imgs.xml" />
    avec un fichier mod_cg_imgs.xml qui contient
    Code:
    <?xml version="1.0" encoding="utf-8"?>
    <form>
    <fieldset name="slideslist_modal" >
    <field name="file_name" type="media" default="" label="FILE_NAME" description="FILE_NAME_DESC" preview="tooltip" preview_width="100" preview_height="100">
    </field>
    </fieldset>
    </form>
    Facile, non ?

    Eh bien, pas tout à fait, car les informations stockées dans la base de données ne sont plus compatibles.

    En J3 et en J4, pour récupérer les images, on n'a pas la même structure, donc, 1ere bidouille pour fonctionner dans les 2 versions :

    Code:
    if (is_object($item->slideslist)) { // joomla 4.0 : subform
    $unearray = [];
    foreach ($item->slideslist as $uneimage) {
    $unearray[] = $uneimage->file_name;
    }
    } else { // joomla 3.0 : repeatable
    $imglist = json_decode($item->slideslist);
    $unearray = $imglist->file_name;
    }
    Pour l'instant, j'ai un souci au niveau de l'interface d'admin, car, là aussi, les informations étant stockées différemment, je n'ai pas récupéré mes images J3 dans la version J4 et réciproquement.

    Autrement dit, si on veut un seul source J3/J4, il faut que je trouve au niveau du XML la version Joomla pour afficher "repeatable" ou "subform" (car repeatable plante le chargement du xml en J4).

    Mais peut-être que tout sera résolu par le PR en cours https://github.com/joomla/joomla-cms/pull/28319

    Pascal
    Dernière édition par pmleconte à 17/09/2020, 20h11
    If anything can go wrong, it will...
    If I can help, I will ..https://conseilgouz.com

    Commentaire


    • #17
      Envoyé par pmleconte Voir le message
      Je suis justement sur une migration repeatable => subform sur un de mes modules.

      ....

      Autrement dit, si on veut un seul source J3/J4, il faut que je trouve au niveau du XML la version Joomla pour afficher "repeatable" ou "subform" (car repeatable plante le chargement du xml en J4).

      Mais peut-être que tout sera résolu par le PR en cours https://github.com/joomla/joomla-cms/pull/28319

      Pascal
      Bonjour à tous.

      Juste pour info : le champ de type "repeatable" était marqué "obsolète" depuis J3.6 et il était conseillé de la remplacer par le champ "subform" de type multiple.

      Voir : https://docs.joomla.org/Repeatable_form_field_type/fr

      Je pense qu'il doit donc être possible d'avoir un même code J3.6+ et J4, mais je suis moins avancé que vous sur le portage J4 de mes composants.

      J'avais moi aussi commencé à faire quelques notes pour l'utilisation du champ subform : https://ordi-genie.com/joomla/develo...-champ-subform

      Dernière édition par roland_d_alsace à 17/09/2020, 22h19
      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


      • #18
        génial ! quel est la différence entre les deux j'ai du mal a comprendre peut on réallement charger un sous formulaire dynamiquement ?
        genre une liste déroulante qui charge les formulaires en fonction

        pour le jquery un petit bout de code ?
        Société : http://www.com3elles.com
        Bénévole : http://www.flexicontent.org

        Commentaire


        • #19
          je me bat avec le jquey le dociment.ready etc ..... il me renvoit toujours jquery not define ...
          Société : http://www.com3elles.com
          Bénévole : http://www.flexicontent.org

          Commentaire


          • #20
            Bonjour Y.,

            Comme signalé par Manu, il faut vérifier l'ordre de chargement de tes scripts. Jquery doit être dans les 1er.

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

            Commentaire


            • #21
              Bonjour,

              Je viens de me prendre un sacré mal de tête, mais, je pense qu'avec un minimum de modification, on peut rendre compatible des modules J3/J4.

              Comme évoqué plus haut, il existe la possibilité de créer 2 versions des modules, une par version Joomla, il est possible aussi de créer un fichier script d'installation qui vérifiera les versions. J'ai essayé de faire plus simple.

              J'ai créé 2 fields : joomversion et joomversionsub qui permettent de déterminer au niveau du fichier xml du module si on est en Joomla 3 ou 4 et de montrer les champs en fonction du résultat par la commande showon.

              Il y en a 2 parce que les subforms n'existent pas à la création du formulaire (voir https://docs.joomla.org/Subform_form_field_type ).

              Au niveau d'un formulaire, il faut ajouter :
              Code:
              <fieldset name="<name>" addfieldpath="/modules/<module>/models/fields">
              <field name="joomversion" type="joomversion" default="j4" class="hidden"/>
              Ensuite, il suffit d'ajouter showon="joomversion:j3" ou showon="joomversion:j4" au niveau des champs que l'on veut cacher/montrer en fonction de la version Joomla.

              Dans mon cas, en J3, j'ai des champs "repeatable" (je sais Roland, je devrais avoir honte) et, en J4, ils sont devenus des subforms.

              Mon problème est que mes subforms sont dans un subform, d'où mon 2eme field : versionjoomsub.

              Donc, j'ai dans mon xml le code suivant :
              Code:
              <fieldset name="<name>" addfieldpath="/modules/<module>/models/fields">
              <field name="joomversionsub" type="joomversionsub" default="j4" class="hidden"/>
              Ensuite, il suffit d'ajouter showon="joomversionsub:j3" ou showon="joomversionsub:j4" au niveau des champs que l'on veut cacher/montrer en fonction de la version Joomla.

              Les 2 fields sont dans le zip models.zip : models.zip

              Je viens de mettre à jour mon module CG Parallax avec ce principe : https://www.conseilgouz.com/cg-parallax

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

              Commentaire


              • #22
                Bonjour,

                Pour résoudre les problèmes jQuery absent en J4, j'ai modifié les models pour qu'ils soient en "pur javascript".

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

                Commentaire


                • #23
                  Bon génial !!! grace a ton code j'ai corrigé le chargement du css !!!
                  résultat, un icon picker !
                  Cliquez sur l'image pour l'afficher en taille normale

Nom : 2020-09-21_09h07_34.png 
Affichages : 28 
Taille : 19,5 Ko 
ID : 2020777
                  Société : http://www.com3elles.com
                  Bénévole : http://www.flexicontent.org

                  Commentaire


                  • #24
                    Bon j'avance il ne reste plus qu'à remettre les quickicons ...
                    j'ai essayer de recuperer le code du module de j4
                    mis dans mon helper
                    Code:
                    public static function &getIconFromPlugins(Registry $params, CMSApplication $application = null)
                        {
                            $key     = (string) $params;
                            $context = (string) $params->get('context', 'mod_quickicon');
                            $application = Factory::getApplication();
                            PluginHelper::importPlugin('quickicon');
                            $buttons[$key] = [];
                                $arrays = (array) $application->triggerEvent(
                                    'onGetIcons',
                                    new QuickIconsEvent('onGetIcons', ['context' => $context])
                                );
                                foreach ($arrays as $response)
                                {
                                    if (!\is_array($response))
                                    {
                                        continue;
                                    }
                                    foreach ($response as $icon)
                                    {
                                        $default = array(
                                            'link'    => null,
                                            'image'   => null,
                                            'text'    => null,
                                            'name'    => null,
                                            'linkadd' => null,
                                            'access'  => true,
                                            'class'   => null,
                                            'group'   => 'MOD_QUICKICON',
                                        );
                                        $icon = array_merge($default, $icon);
                                        if (!\is_null($icon['link']) && !\is_null($icon['text']))
                                        {
                                            self::$buttons[$key][] = $icon;
                                        }
                                    }
                                }
                                return self::$buttons[$key];
                        }
                    essayer de l'adapté à ma sauce ...
                    mais voici l'erreur ...
                    Code:
                    Access to undeclared static property: modDashboardHelper::$buttons
                    dans mon entrée
                    Code:
                    $systme_buttons   = modDashboardHelper::getIconFromPlugins($params);
                    Merci pour votre future aide !
                    Société : http://www.com3elles.com
                    Bénévole : http://www.flexicontent.org

                    Commentaire


                    • #25
                      Bonjour Yannick.

                      Envoyé par y.berges Voir le message
                      Code:
                      $systme_buttons = modDashboardHelper::getIconFromPlugins($params);
                      N'aurais-tu pas une inversion de lettres là dedans ? Ne devrait-ce pas être $system_buttons = ? Disons que ça me parait juste logique…
                      Cordialement.
                      __
                      Eddy !!!
                      Tutoriels BreezingForms en Français : https://www.breezingforms.eddy-vh.com/

                      Commentaire


                      • #26
                        Bonsoir,

                        Perso, je ne pense pas que l'inversion ait un rapport avec l'erreur actuelle.

                        Cela vient de $buttons. Je ne comprends pas le self:: que tu as mis devant. $buttons est une variable (local ?) et non une fonction.

                        S'il s'agit d'une variable de classe, la syntaxe pourrait être $this->buttons. S'il s'agit d'une variable locale à ta fonction, $buttons suffira.

                        Pascal
                        Dernière édition par pmleconte à 21/09/2020, 17h36
                        If anything can go wrong, it will...
                        If I can help, I will ..https://conseilgouz.com

                        Commentaire


                        • #27
                          cool merci pour vos retours..
                          @eddy => j'ai corrigé pour etre p^lus propre
                          pmleconte => j'ai changé....
                          Code:
                                         if (!\is_null($icon['link']) && !\is_null($icon['text']))
                                              {
                                                  $buttons[$key][] = $icon;
                                              }
                                          }
                                      }
                                      return $buttons[$key];
                          plus d'erreur mais cela ne revoit plus rien
                          Code:
                          <?php var_dump($system_buttons);?>
                          ne renvoit rien ...
                          Société : http://www.com3elles.com
                          Bénévole : http://www.flexicontent.org

                          Commentaire


                          • #28
                            Que contient $key ? dans l'appel à ta fonction, params est un Registry et tu le mets tout entier dans $key ???
                            If anything can go wrong, it will...
                            If I can help, I will ..https://conseilgouz.com

                            Commentaire


                            • #29
                              D'autre part, d'après la doc php array_merge, https://www.php.net/manual/fr/function.array-merge.php , je pense qu'il est normal que tu aies link et text à null.

                              Je pense qu'il faudrait essayer array_replace : https://www.php.net/manual/fr/functi...ay-replace.php

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

                              Commentaire


                              • #30
                                en fait j'essai de m'inspiré du quick icon de joomla (ce qu j'avais reussis en j3)
                                https://github.com/joomla/joomla-cms...elper.php#L259
                                pour récuperer les quickicons
                                Société : http://www.com3elles.com
                                Bénévole : http://www.flexicontent.org

                                Commentaire

                                Annonce

                                Réduire
                                1 sur 2 < >

                                C'est [Réglé] et on n'en parle plus ?

                                A quoi ça sert ?
                                La mention [Réglé] permet aux visiteurs d'identifier rapidement les messages qui ont trouvé une solution.

                                Merci donc d'utiliser cette fonctionnalité afin de faciliter la navigation et la recherche d'informations de tous sur le forum.

                                Si vous deviez oublier de porter cette mention, nous nous permettrons de le faire à votre place... mais seulement une fois
                                Comment ajouter la mention [Réglé] à votre discussion ?
                                1 - Aller sur votre discussion et éditer votre premier message :


                                2 - Cliquer sur la liste déroulante Préfixe.

                                3 - Choisir le préfixe [Réglé].


                                4 - Et voilà… votre discussion est désormais identifiée comme réglée.

                                2 sur 2 < >

                                Assistance au forum - Outil de publication d'infos de votre site

                                Compatibilité: PHP 4.1,PHP4, 5, 6DEV MySQL 3.2 - 5.5 MySQLi from 4.1 ( @ >=PHP 4.4.9)

                                Support Version de Joomla! : | J!3.0 | J!2.5.xx | J!1.7.xx | J!1.6.xx | J1.5.xx | J!1.0.xx |

                                Version française (FR) D'autres versions sont disponibles depuis la version originale de FPA

                                UTILISER À VOS PROPRES RISQUES :
                                L'exactitude et l'exhaustivité de ce script ainsi que la documentation ne sont pas garanties et aucune responsabilité ne sera acceptée pour tout dommage, questions ou confusion provoquée par l'utilisation de ce script.

                                Problèmes connus :
                                FPA n'est actuellement pas compatible avec des sites Joomla qui ont eu leur fichier configuration.php déplacé en dehors du répertoire public_html.

                                Installation :

                                1. Téléchargez l'archive souhaitée : http://afuj.github.io/FPA/

                                Archive zip : https://github.com/AFUJ/FPA/zipball/master

                                2. Décompressez le fichier de package téléchargé sur votre propre ordinateur (à l'aide de WinZip ou d'un outil de décompression natif).

                                3. Lisez le fichier LISEZMOI inclus pour toutes les notes de versions spécifiques.

                                4. LIRE le fichier de documentation inclus pour obtenir des instructions d'utilisation détaillées.

                                5. Téléchargez le script fpa-fr.php à la racine de votre site Joomla!. C'est l'endroit que vous avez installé Joomla et ce n'est pas la racine principale de votre serveur. Voir les exemples ci-dessous.

                                6. Exécutez le script via votre navigateur en tapant: http:// www. votresite .com/ fpa-fr.php
                                et remplacer www. votresite .com par votre nom de domaine


                                Exemples:
                                Joomla! est installé dans votre répertoire web et vous avez installé la version française du fichier FPA:
                                Télécharger le script fpa-fr.php dans: /public_html/
                                Pour executer le script: http://www..com/fpa-fr.php

                                Joomla! est installé dans un sous-répertoire nommé "cms" et vous avez installé la version française du fichier FPA:
                                Télécharger le script fpa-fr.php dans: /public_html/cms/
                                Pour executer le script: http://www..com/cms/fpa-fr.php

                                En raison de la nature très sensible de l'information affichée par le script FPA, il doit être retiré immédiatement du serveur après son utilisation.

                                Pour supprimer le script de votre site, utilisez le lien de script de suppression fourni en haut de la page du script. Si le lien de suppression échoue pour supprimer le script, utilisez votre programme FTP pour le supprimer manuellement ou changer le nom une fois que le script a généré les données du site et le message publié sur le forum. Si le script est toujours présent sur le site, il peut être utilisé pour recueillir suffisamment d'informations pour pirater votre site. Le retrait du script empêche des étrangers de l'utiliser pour jeter un oeil à la façon dont votre site est structuré et de détecter les défauts qui peuvent être utilisé à vos dépends.
                                Voir plus
                                Voir moins

                                Partenaire de l'association

                                Réduire

                                Hébergeur Web PlanetHoster
                                Travaille ...
                                X