Erreur incompréhensible après modification de classe

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

  • Erreur incompréhensible après modification de classe

    Bonjour,

    Testant le code pour passer en J5, lorsque je conserve l'activation du plugin de compatibilité, une page utilisant JApplicationSite s'affiche sans erreur.
    Code:
    $router     = JApplicationSite::getRouter(); //JSite::getRouter()
    Lorsque je remplace par SiteApplication après avoir ajouté la ligne use pour pouvoir utiliser
    Code:
    $router     = SiteApplication::getRouter(); //JSite::getRouter()
    et que je désactive le plugin, je reçois ce message :
    500 Impossible de charger le routeur : site
    Je ne vois vraiment pas où chercher ce qui pourrait interférer et déclencher cette erreur
    "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

  • #2
    Pardon d'avoir validé trop vite hier soir, je devais m'absenter.

    J'ai une autre bizarrerie qui me renvoie une erreur 0 quand le même code fonctionne dans un autre fichier. Il s'agit d'afficher un formulaire dans l'administration. L'erreur reçue (plugin de compatibilité activé ou non) est :
    0 Call to a member function getLabel() on bool
    Les lignes de code de ce type dans ce fichier renvoient toutes ce message d'erreur (il n'y a pas de "function getLabel" spécifique à l'extension) :
    Code PHP:
    <?php echo $this->form->getLabel('name'); ?>
    <?php 
    echo $this->form->getInput('name'); ?>
    Cette erreur apparaît lors de la création d'un nouveau formulaire mais aussi lors de l'édition d'un formulaire existant. Même erreur avec le même code sur un site 4.4.6 en PHP 8.0

    Je ne comprends pas cette référence à "bool" puisqu'on demande ce que contient un champ "name", si je comprends bien, quand dan sles autres formulaires, ces appels renvoient bien le label et le contenu et affichent le formulaire, vierge ou existant.

    Merci de vos conseils !
    "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
      Envoyé par RobertG Voir le message
      Pardon d'avoir validé trop vite hier soir, je devais m'absenter.

      J'ai une autre bizarrerie qui me renvoie une erreur 0 quand le même code fonctionne dans un autre fichier. Il s'agit d'afficher un formulaire dans l'administration. L'erreur reçue (plugin de compatibilité activé ou non) est :

      Les lignes de code de ce type dans ce fichier renvoient toutes ce message d'erreur (il n'y a pas de "function getLabel" spécifique à l'extension) :
      Code PHP:
      <?php echo $this->form->getLabel('name'); ?>
      <?php 
      echo $this->form->getInput('name'); ?>
      Cette erreur apparaît lors de la création d'un nouveau formulaire mais aussi lors de l'édition d'un formulaire existant. Même erreur avec le même code sur un site 4.4.6 en PHP 8.0

      Je ne comprends pas cette référence à "bool" puisqu'on demande ce que contient un champ "name", si je comprends bien, quand dan sles autres formulaires, ces appels renvoient bien le label et le contenu et affichent le formulaire, vierge ou existant.

      Merci de vos conseils !
      Salut Robert.

      Cette erreur indique que $this->form n'a pas pu être instanciée.
      Donc le xml n'a pas été trouvé par le framework.

      Concernant le router, j'ai l'impression que c'est pareil, le framework ne trouve pas le fichier du router.

      PS : as-tu vu mon article... et le suivant...
      Dernière édition par roland_d_alsace à 20/07/2024, 08h05
      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


      • #4
        Merci Roland !

        J'étudierai tes articles.

        La question va être de remonter dans le code pour comprendre pourquoi ce n'est pas instancié. En comparant rapidement avec les versions pour les applications et les thèmes, je n'ai pas trouvé.

        Pour le moment, je suis surtout en train de remplacer les classes en essayant d'être systématique. C'est long !
        "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


        • #5
          J'ai repris le fichier form.php qui me pose problème en J4/J5 : remplacement par sa version 1.5.5, modification des classes et l'erreur réapparaît.
          J'ai noté que lorsque je crée ou édite un arbre, lorsque cette erreur apparait, le titre de la page n'affiche pas comme en J3 la notion d'arbre, mais de source Gedcom. C'est donc en amont que le souci se produit.
          "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
            Pour ce qui est l'erreur de mon premier message, en fait "getRouter" est déprécié.
            J'ai trouvé dans la doc Joomla! une alternative :
            Code PHP:
            $router Factory::getContainer()->get($name); 
            mais pour que l'erreur ne disparaisse pas au profit d'une autre, il me faut utiliser :
            Code PHP:
            $router Factory::getContainer(); 
            Pour ce qui est du titre en haut de page, c'était une erreur de saisie dans le fichier de vue. Mais toujours pas de solution...

            ET en remplaçant par la nouvelle méthode d'affichage des onglets dans la gestion du formulaire, j'ai de nouveau
            0 Call to a member function renderField() on bool
            sur
            Code PHP:
            <?php echo $this->form->renderField('name'); ?>
            Dernière édition par RobertG à 20/07/2024, 17h50
            "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


            • #7
              Qui pourrait m'expliquer que si $this->form renvoie
              object(stdClass)#940 (16) { ["id"]=> int(7) ["app_id"]=> int(6) ["asset_id"]=> int(75) ["holds"]=> string(3) "all" ["published"]=> int(1) ["access"]=> int(1) ["name"]=> string(7) "Exemple" ["theme_id"]=> int(2) ["indGendex"]=> int(1) ["indPersonCount"]=> int(1) ["indMarriageCount"]=> int(1) ["robots"]=> int(0) ["root_person_id"]=> string(0) "" ["catid"]=> int(2) ["appTitle"]=> string(7) "Exemple" ["rootPersonName"]=> string(0) "" }
              l'affichage est de nouveau une erreur bool
              "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


              • #8
                Je continue ma quête !

                Dans un fichier d'administration est défini un lien ouvrant un pop-up affichant une liste d'individus permettant d'en sélectionner un.
                En version J3, le code utilise
                Code PHP:
                JHTML::_('behavior.modal''a.modal'); 
                puis
                Code PHP:
                <a class='modal' title="<?php echo Text::_('JTFIELD_PERSON_BUTTONDESC_PERSON'); ?>"  href="<?php echo $linkPerson?>" rel="{handler: 'iframe', size: {x: 650, y: 375}}" >
                Cliquez sur l'image pour l'afficher en taille normale  Nom : image.png  Affichages : 0  Taille : 5,9 Ko  ID : 2063256
                L'adresse à ouvrir est :
                Code PHP:
                $linkPerson 'index.php?option=com_joaktree&amp;view=jt_persons&amp;layout=element&amp;task=element&amp;tmpl=component&amp;object=personId'

                Le clic sur le lien ouvre une fenêtre pop-up où la sélection d'un nom ferme cette fenêtre et insère les infos de l'individu dans la zone de saisie du formulaire (pas de saisie manuelle dans cette zone du formulaire).
                Cliquez sur l'image pour l'afficher en taille normale  Nom : image.png  Affichages : 0  Taille : 39,9 Ko  ID : 2063255
                Cliquez sur l'image pour l'afficher en taille normale  Nom : image.png  Affichages : 0  Taille : 9,3 Ko  ID : 2063257​​
                En passant à J5, après avoir modifié les classes, remplacé behavior par bootstrap et désactivé le plugin de compatibilité, "class='modal'" bloque l'affichage du lien. Si je supprime modal, le lien apparaît bien, mais ouvre la page dans l'intégralité de la fenêtre et le clic sur un nom est sans effet, il ne renvoie pas le nom sélectionné et ne ferme pas la fenêtre pour revenir au formulaire.

                Je n'ai pour le moment pas trouvé de moyen de corriger cela, ni comment le code de la page ouverte en pop-up peut renvoyer l'info sélectionnée.
                La première est de trouver comment arriver à ouvrir cette page en mode pop-up modal...
                Dernière édition par RobertG à 21/07/2024, 15h28
                "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


                • #9
                  Pour revenir à la question de $this->form non instanciée, la ligne renvoyant false est
                  Code PHP:
                  $this->form        $this->get('Form'); 
                  Le fichier est views/jt_tree/view.html.php et il y a bien un fichier jt_tree.xml dans models/forms, qui devrait donc être trouvé. Les autres fonctions de Joaktree ont bien leurs xml et renvoient bien une valeur pour $this->get('Form') que je peux afficher avec var_dump.
                  Dans ce xml, il y a une ligne
                  Code:
                  addfieldpath="/administrator/components/com_categories/models/fields"
                  ce dossier n'existe plus dans J4/J5, et si j'essaie de la mettre en commentaire ou que je la supprime, cela ne change pas.

                  J'aimerais donc bien savoir où chercher le fichier qu'utilise get('Form') pour essayer de comprendre la raison de cette erreur et tenter de la corriger.
                  "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
                    Bonjour,

                    Si tu regardes administrator/components/com_categories/forms/category.xml, tu trouveras la nouvelle définition qui se base sur le namespace.

                    Code:
                    <form addfieldprefix="Joomla\Component\Categories\Administrator\Field">
                    Concernant $this->form, dans quelle classe as-tu le problème ? de quelle classe hérite-t-elle ?

                    Dans mes composants, qui utilise des namespaces, j'ai mes views dans le répertoire src/view/<nom de la vue>/HtmlView.php qui hérite de BaseHtmlView et qui contient :
                    Code:
                    use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;
                    class HtmlView extends BaseHtmlView
                    {
                    protected $form;
                    protected $pagination;
                    protected $state;
                    protected $item;
                        /**
                         * Display the view
                         */
                        public function display($tpl = null)
                        {
                            $this->form        = $this->get('Form');
                            $this->item        = $this->get('Item');
                            parent::display($tpl);
                        }​
                    ...
                    ​


                    Je n'ai pas tout suivi dans les conversations joaktree, donc, utilises tu bien les syntaxes Joomla 4/5 avec la notion de "services provider" et les notions de router dans le répertoire src/Extension ?

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

                    Commentaire


                    • #11
                      Merci Pascal,

                      En fait, j'avais d'abord remplacé un jour la fonction loadForm() par loadFormdata(), cause de l'erreur citée.
                      En revenant à getForm() une erreur de lecture du fichier xml est apparue, liée à la ligne citée que j'avais mise en commentaire (entre <!-- et -->)et qui n'était pas acceptée.
                      Une fois cette ligne supprimée, l'erreur a disparu pour l'édition de données déjà présentes, mais une autre erreur est déclenchée par l'ouverture du formulaire vide pour une création.
                      Une de réglée, dix de retrouvées !
                      "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

                      Annonce

                      Réduire
                      Aucune annonce pour le moment.

                      Partenaire de l'association

                      Réduire

                      Hébergeur Web PlanetHoster
                      Travaille ...
                      X