Migration Plugin vers Joomla! 4

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

  • [RÉGLÉ] Migration Plugin vers Joomla! 4

    Bonjour.
    Je vais paraitre un peu idiot, mais il faut aussi savoir admettre qu'on ne sait pas toujours tout, et c'est mon cas.
    J'utilise un plugin (Jh Splash screen) su un site Joomla! 3. J'avais travaillé mon css, et, avec un peu de php, j'ai réalisé un halo lumineux apparaissant derrière le plugin.
    Hélas, ce plugin n'est plus en ligne, et l'auteur lui aussi a "disparu des radars".
    Afin de le rendre compatible Joomla! 4, il me faut modifier (entre autres) le fichier XML, et plus particulièrement le passage ci-dessous :

    <field name="listSplashScreens"
    type="Repeatable"
    icon="list"
    description="Ouvrir cette configuration pour assigner le Splash Screen à une page."
    label="Assignation du Splash Screen"
    default=""
    filter="raw">
    <fields name="params">
    <fieldset hidden="true" name="list_splash_screens_modal" repeat="true" addfieldpath="/plugins/system/jhsplashscreen/form/fields">
    <field
    type="menuitem"
    name="targetMenuItem"
    label="Target Page"
    description="Webpage to add the Splash Screen to" />
    <field
    type="articlelist"
    name="contentArticle"
    label="Article en Contenu &#160; &#160; &#160; &#160; &#160; &#160; &#160; – OR –"
    description="Article à afficher dans le Splash Screen &#160; or">
    <option value="none">– Aucun –</option>
    </field>
    <field name="splashContent"
    type="textarea"
    label="Contenu Personnalisé"
    rows="6"
    cols="120"
    filter="raw"
    default=" Hello, Je suis un exemple de contenu à afficher dans le Splash Screen. Vous pouvez saisir du code HTML ici, ou choisir un article dans la liste de gauche."
    description="Contenu personnalisé à afficher dans le Splash Screen" />
    </fieldset>
    </fields>

    Cette partie de code xml permet d'ouvrir une fenêtre pour choisir la page à afficher dans le splashscreen, ainsi que les pages sur lesquelles il doit apparaitre.

    J'ai bien essayé d'adapter en jouant sur le type de champ (repeatable étant obsolète) et en mettant un type "subform", Un champ apparait, à la place du bouton pour ouvrir la fenêtre de choix... Et c'est là que cela dépasse mes (maigres) compétences.

    Quelqu'un pourrait-il m'aider ?
    Merci d'avance.
    Dernière édition par Anwynn56 à 24/03/2022, 23h19

  • #2
    Bonjour,

    Peux-tu mettre ici le plugin pour la version 3, ou me le transmettre en MP en vue de tests ?
    Sur cette page, "repeatable" est toujours présent et pas noté obsolète, si je vois bien : https://docs.joomla.org/Form_field/fr
    "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
    MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

    Commentaire


    • #3
      Il semble que le type repeatable doive être remplacé par le type subform.
      "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
      MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

      Commentaire


      • #4
        Ben oui, c'est ce que j'ai constaté... Sauf que, au lieu d'avoir un bouton qui ouvre une fenêtre pour faire les réglages, quant on lui donne un type subform, on a simplement un champ de saisie au lieu du bouton.
        J'ai résolu ce problème en supprimant cette partie du code :
        <field name="listSplashScreens"
        type="repeatable"
        icon="list"
        description="Ouvrir cette configuration pour assigner le Splash Screen à une page."
        label="Assignation du Splash Screen"
        default=""
        filter="raw" >
        </field>
        Ainsi, mes champs de réglage s'affichent directement sur la page (au lieu d'être dans une popup) (Voir Pj).

        Hélas, je ne suis pas au bout de mes peines, (ni assez doué, sans doute). Maintenant, c'est la ligne 150 du fichier jhsplasscreen.php qui me provoque des erreurs en cascade...
        Qu'est-ce qui peut bien clocher dans cette ligne qui fait que joomla4 n'en veut pas ?

        Ligne concernée :
        [COLOR=var(--highlight-comment)] [/COLOR][COLOR=var(--highlight-default)]$position [/COLOR][COLOR=var(--highlight-keyword)]= [/COLOR][COLOR=var(--highlight-default)]array_search[/COLOR][COLOR=var(--highlight-keyword)]([/COLOR][COLOR=var(--highlight-default)]$currentPage[/COLOR][COLOR=var(--highlight-keyword)], [/COLOR][COLOR=var(--highlight-default)]$splashScreenArray[/COLOR][COLOR=var(--highlight-keyword)][[/COLOR][COLOR=var(--highlight-string)]'targetMenuItem'[/COLOR][COLOR=var(--highlight-keyword)]]);
        Motif des erreurs : [/COLOR]
        [COLOR=var(--highlight-keyword)]array_search(101, null)
        in C:\wamp64\www\basenew\plugins\system\jhsplashscree n\jhsplashscreen.php (line 150)

        J'ai bien compris que J4 ne voulait pas du NULL retourné, mais comment faire pour qu'il l'accepte comme le faisait J3 ?[/COLOR]
        Fichiers joints

        Commentaire


        • #5
          As-tu bien précisé multiple en plus de subform ?
          Question bête, mais es-tu sûr qu'il n'y a pas d'équivalent pour J4 qui te ferait gagner du temps ?
          "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
          MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

          Commentaire


          • #6
            Bonjour.

            Eh non, pas d'équivalent à l'heure actuelle. Il y a bien 2 ou 3 modules, plus ou moins adaptables et tous payants. Pas de plugin équivalent.
            Je pense que je vais faire preuve de patience, et prendre le temps d'en développer un qui corresponde exactement à ce que je recherche. Compte tenu de ce qui me reste à apprendre pour y parvenir, j'en aurai pour plusieurs mois...

            Commentaire


            • #7
              Hello.

              La logique du champ "repeatable" et "subform" n'est pas du tout la même.

              Dans le champ "repeatable", la description des champs appelés dans la "zone" repetée est dans le même xml.

              Dans ton cas ici : <fieldset hidden="true" name="list_splash_screens_modal" repeat="true".... >

              Dans le champ subform, cette description est dans un autre xml (le sous-formulaire) rendant le code beaucoup plus lisible et permettant modifier plus facilement le comportement du sous-formulaire et de ces champs.
              De mon côté j'ai très rapidement laissé tomber le type repeatable dès l'apparition du type subform qui est bien + "puissant".

              Donc si tu te contentes de changer le type du champ repeatable en subform, il ne va pas se passer grand chose, le fieldset étant à hidden et de surcroit il n'est pas appelé pour être affiché.

              Il te faut donc créer un nouveau xml qui sera appelé par les attributs de ta balise de type subform
              formsource="path/to/exampleform.xml" multiple="true"

              Dernière édition par roland_d_alsace à 23/03/2022, 11h31
              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
                Merci beaucoup, Roland.

                J'avais raison quand je disais que cela dépassait mes connaissances.

                Donc, si j'ai bien compris, je remplace repeatable par subform,
                J'ajoute
                formsource= "Chemin vers le monformulaire.xml" multiple="true"

                puis je créée le fichier monformulaire.xml qui contiendra le code ci-dessous
                :
                <fields name="params">
                <fieldset hidden="true" name="list_splash_screens_modal" repeat="true" addfieldpath="/plugins/system/jhsplashscreen/form/fields">
                <field
                type="menuitem"
                name="targetMenuItem"
                label="Target Page"
                description="Webpage to add the Splash Screen to" />
                <field
                type="articlelist"
                name="contentArticle"
                label="Article en Contenu &#160; &#160; &#160; &#160; &#160; &#160; &#160; – OR –"
                description="Article à afficher dans le Splash Screen &#160; or">
                <option value="none">– Aucun –</option>
                </field>
                <field name="splashContent"
                type="textarea"
                label="Contenu Personnalisé"
                rows="6"
                cols="120"
                filter="raw"
                default=" Hello, Je suis un exemple de contenu à afficher dans le Splash Screen. Vous pouvez saisir du code HTML ici, ou choisir un article dans la liste de gauche."
                description="Contenu personnalisé à afficher dans le Splash Screen" />
                </fieldset>
                </fields>

                Commentaire


                • #9
                  A mon avis, non, c'est seulement la partie concernant ce que doit afficher subform à la place de repeatable qui doit être dans le "sous-XML".
                  "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
                  MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

                  Commentaire


                  • #10
                    Hello.

                    Quelque chose de ce type (pas évident de déchiffrer le xml sur le forum)

                    Dans le formulaire actuel (dans un fieldset eventuellement = en général un onglet dans la vue):
                    Code:
                    <field name="listSplashScreens"
                    type="subform"
                    description="Ouvrir cette configuration pour assigner le Splash Screen à une page."
                    label="Assignation du Splash Screen"
                    formsource="/administrator/components/com_xxxx/models/forms/xxxx.xml"
                    multiple="true"
                    min="1"
                    max="12"
                    layout="joomla.form.field.subform.repeatable"
                    >
                    min et max indiquent le nombre mini et maxi de répétition (si min="1" impossible de tout supprimer)

                    et dans /administrator/components/com_xxxx/models/forms/xxxx.xml (tu corriges comme il se doit bien sur pour avoir les 2 xml dans le même dossier).

                    Code:
                    <?xml version="1.0" encoding="utf-8"?>
                    <form>
                    <fields name="params">
                    <field
                    type="menuitem"
                    name="targetMenuItem"
                    label="Target Page"
                    description="Webpage to add the Splash Screen to" />
                    <field
                    type="articlelist"
                    name="contentArticle"
                    label="Article en Contenu &#160; &#160; &#160; &#160; &#160; &#160; &#160; – OR –"
                    description="Article à afficher dans le Splash Screen &#160; or">
                    <option value="none">– Aucun –</option>
                    </field>
                    <field name="splashContent"
                    type="textarea"
                    label="Contenu Personnalisé"
                    rows="6"
                    cols="120"
                    filter="raw"
                    default=" Hello, Je suis un exemple de contenu à afficher dans le Splash Screen. Vous pouvez saisir du code HTML ici, ou choisir un article dans la liste de gauche."
                    description="Contenu personnalisé à afficher dans le Splash Screen" />
                    </fields>
                    </form>
                    Ensuite rien ne prouve que cela va fonctionner de suite, car si dans le code le xml est modifié dynamiquement, les chemins d'accès aux groupes, aux champs, aux attributs (classe form et formfield) sont du coup gérés différemment et là il faut savoir coder.
                    Des ligne de code dans le php du type
                    Code PHP:
                    ...->setFieldAttribute(....) 
                    par exemple.

                    Voir : https://api.joomla.org/cms-3/classes...Form.Form.html

                    Je ne voudrait pas t'effrayer, mais là on ne parle que de la partie "organisation" de l'affichage.

                    Mais pour pouvoir remplir le formulaire il faudra obligatoirement structurer les variables différemment afin d'être en corrélation avec ce nouveau code xml.
                    Idem pour la récupération des données au retour du formulaire.

                    Si le plugin respecte bien le framework de joomla et sa norme de codage, cela pourrait être pas trop compliqué, il faut voir...
                    Dernière édition par roland_d_alsace à 24/03/2022, 19h17
                    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


                    • #11
                      Je te remercie ENORMEMENT.
                      Voilà le moyen pour moi de redémarrer.
                      J'ai beau être "autodidacte" (avec plein de trous dans mes connaissances), la partie adaptation du codage pour Joomla! 4 me gênera beaucoup moins, et je pense que, (en me formant encore sur cette nouvelle version), je devrais pouvoir m'en sortir et arriver au but.
                      En plus, j'aurai encore appris, et c'est bien ainsi.

                      Merci encore.

                      Commentaire

                      Annonce

                      Réduire
                      Aucune annonce pour le moment.

                      Partenaire de l'association

                      Réduire

                      Hébergeur Web PlanetHoster
                      Travaille ...
                      X