Appel aux classes Joomla! 4

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

  • starter866
    a répondu
    Code:
    Sauf que je ne sais pas où est ce script (renommer "assets/js/joaktree_admin.js" ou la "function importgedCom" qui s'y trouve ne change strictement rien) ou la fonction qui en tient lieu dans un autre fichier...
    Effectivement, ce fichier semble ignoré, puisqu'en le renommant, et en affichant les vues ou il est sensé être appelé n'engendre aucune erreur (importer ou exporter gedcom, etc)

    Laisser un commentaire:


  • RobertG
    a répondu
    Merci Marc !
    Joaktree utilisait Mootools, ce qui m'a obligé à changer un certain nombre de lignes pour passer à Bootstrap.
    Pour une des corrections (la création de la source GedCom que j'essaie maintenant d'utiliser pour y importer les données dans sa table), j'ai trouvé que c'était un fichier core de Joomla! qui traitait l'instruction, et je me demande si dans le problème actuel ce n'est pas pareil...
    J'utilise en effet les enqueueMessage pour essayer de tracer l'ordre dans lequel est lu le code.

    Ce qui est curieux, c'est que les fonctions "importGedcom" où on devrait passer ne sont pas utilisées, idem sur une version 3.9 alors que l'import y fonctionne correctement.
    Moi qui ai été habitué pendant des années avec le développement Windows à pouvoir avancer dans le code ligne par ligne pour trouver les erreurs, je suis frustré avec PHP !

    Pour revenir à ton conseil, si j'utilise :
    <script>
    // window.addEventListener('domready', function() { ... remplacer cette ligne par :
    jQuery(document).ready(function(){
    importGedcom();
    alert("Le chargement de ma page HTML est terminé dans le navigateur, jQuery me signale que le DOM est ready pour exec du JS");
    console.log("je piste plus discretement mon code dans la console javascript de mon navigateur ");
    });
    </script>
    je n'ai pas de message d'alerte, mais si je mets
    <script>
    // window.addEventListener('domready', function() { ... remplacer cette ligne par :
    jQuery(document).ready(function(){

    alert("Le chargement de ma page HTML est terminé dans le navigateur, jQuery me signale que le DOM est ready pour exec du JS");
    console.log("je piste plus discretement mon code dans la console javascript de mon navigateur ");
    importGedcom();
    });
    </script>
    j'ai bien le message avant l'affichage des infos de enqueueMessage, ce qui voudrait dire que la "function importGedcom()" qui est dans le fichier JS est ce qui plante.

    Laisser un commentaire:


  • garstud
    a répondu
    Concernant ton probleme d'appel JS, je pense qu'il y a juste un simple soucis sur l'appel de ta fonction.
    Pour info avec Joomla, on a accès au framework JS "jQuery", il est simple et pratique, donc autant l'utiliser

    Voici un code fonctionnel pour faire ce que tu veux en JS :

    Code:
    <script>
    // window.addEventListener('domready', function() { ... remplacer cette ligne par :
    [B]jQuery(document).ready(function(){[/B]
        alert("Le chargement de ma page HTML est terminé dans le navigateur, jQuery me signale que le DOM est ready pour exec du JS");
        console.log("je piste plus discretement mon code dans la console javascript de mon navigateur ;)");
    });
    </script>

    Laisser un commentaire:


  • garstud
    a répondu
    Alors,en fait le code PHP ne bloque pas le JS, c'est juste que quand le serveur transforme le PHP en code HTML il traite les enqueueMsg pour préparer le code HTML qui affichera le message.
    Les enqueueMsg c'est pratique pour afficher une info, mais cela fonctionne comme une file d'attente d'imprimante : tu en mets autant que tu veux dans ton code et ils vont etre affiché en haut de ta page, dans l'ordre d'appel, lors du prochain affichage de la page sur le navigateur.

    Cela veut dire qu'utiliser un enqueueMsg pour pister du code JS ne sert a rien, car il ne sera pas executer a l'endroit ou tu l'as placé dans le code JS.
    Par contre oui, les "alert(...)" ou les "console.log(...)", eux, sont bien executé a l'endroit ou tu les places dans le code JS ... car ce sont des instructions JS
    Donc si tes alerts JS ne s'affichent pas, Ca veut dire que ce code JS n'est jamais appelé !

    Laisser un commentaire:


  • RobertG
    a répondu
    Merci Marc !
    Si je comprends bien, l'appel de PHP dans ce code "script" empêcherait le code JS d'être interprété ? ou que l'instruction PHP serai utilisée quoi qu'il en soit ?
    Mais de toutes manières, ce code "enqueueMessage" n'était là que pour voir si ça passait par là, étant donné que je ne trouve pas la moindre trace de ce qui se passe après la récupération des données concernant la "source GedCom" afin d'y importer le contenu du fichier correspondant.
    Mais en remplaçant ces "enqueueMessage" par des "alert" suite à tes remarques, je n'ai pas d'info, ce qui voudrait donc dire que cette partie de code est ignorée et que ce n'est pas la fonction JS d'importGedcom qui est en réalité appelée... et je suis actuellement totalement incapable de savoir à quelle fonction est renvoyé ce "return $_data" qui est la dernière info récupérée.

    Laisser un commentaire:


  • garstud
    a répondu
    Bonsoir,
    Attention Robert, tu jongles dangereusement la

    Petite explication sur le monde barbare du développement Web :
    On parle de site web en PHP, HTML et JS. Le code PHP est interprété par le serveur pour générer un code HTML/JS qui sera transmis au navigateur .... et la, seulement la, le navigateur interprétera le code HTML ... et le code JS ... si il est correctement appelé dans l'HTML !

    J’espère que je ne suis pas trop confus. C'est important de bien avoir ce process toujours à l'esprit car avec Joomla, on est dans le cas d'un script PHP, qui génére du HTML, qui va permettre d’exécuter du Javascript .... Arghhhh le trio infernal !

    Petit exemple pour imager : si tu poses le script JS ci-dessous dans un fichier TMPL PHP, de ton compo, ben vous aurez bien les messages PHP, mais pas la popup JS ! (sic)

    Code:
    <script>
    function willNeverBeCalled() {
        <?php JFactory::getApplication()->enqueueMessage("msg affiché par PHP, pas par cette fonction JS"); ?>
        alert("popup jamais appelée");
        <?php JFactory::getApplication()->enqueueMessage("msg2 affiché par PHP, pas par cette fonction JS"); ?>
    });
    </script>
    P.S. en espérant que cette explication vous évitera d'aller vous pendre ou de jeter l'ordi par la fenêtre

    Laisser un commentaire:


  • starter866
    a répondu
    Rien n'y fait, même en modifiant le code comme tu dis, rien, même pas les messages.

    Laisser un commentaire:


  • RobertG
    a répondu
    Toujours bloqué sur l'import, j'ai testé ça (ajout des enqueueMessage) dans la partie script de "views/jt_import_gedcom/tmpl/default.php"
    <script>
    window.addEventListener('domready', function() {
    <?php JFactory::getApplication()->enqueueMessage("import gedcom js"); ?>
    importGedcom();
    <?php JFactory::getApplication()->enqueueMessage("fin import gedcom js"); ?>
    });
    </script>
    et j'ai bien dans le pop-up de message
    import gedcom js
    fin import gedcom js
    Donc l'appel du script aboutit, si je ne me trompe.
    Sauf que je ne sais pas où est ce script (renommer "assets/js/joaktree_admin.js" ou la "function importgedCom" qui s'y trouve ne change strictement rien) ou la fonction qui en tient lieu dans un autre fichier...

    Laisser un commentaire:


  • RobertG
    a répondu
    Hier, j'ai vainement cherché où est récupéré le "return $this->_data" de la fonction getData du fichier jt_import_gedcom.php !
    Si j'ai bien compris, ces "data" étant les caractéristiques de la source (dont noms du dossier et du fichier GedCom à importer) doivent être décodés par une fonction en vue de l'import, mais on ne passe jamais par la fonction getGedcom du même fichier jt_import_gedcom.php ni celle de models/jt_applications.php !
    Impossible donc pour l'instant de savoir où le code tourne en boucle sans rien importer et sans générer d'erreur.

    Laisser un commentaire:


  • RobertG
    a répondu
    Oui, mais ce n'est utile que pour une installation neuve (il faudra voir comment gérer la modification lors d'une mise à jour), et il y aura peut-être d'autres changements à faire a niveau de la structure des tables.
    .', asset_id int(10) unsigned NOT NULL default 0'

    Laisser un commentaire:


  • starter866
    a répondu
    Ok. Ne doit on pas auusi modifier en conséquence le fichier oaktree.script.php ?

    Code:
    // Table joaktree_applications
                $update_queries[] =
                    'CREATE TABLE IF NOT EXISTS '
                   .'#__joaktree_applications '
                   .'( id               tinyint(4)  unsigned  NOT NULL auto_increment '
                   .', asset_id         int(10)      unsigned NOT NULL '

    Laisser un commentaire:


  • RobertG
    a répondu
    Dans la structure de la table #__joaktree_applications champ "asset_id"

    Laisser un commentaire:


  • starter866
    a répondu
    Ce que j'ai trouvé ce matin

    Code:
    Apparently store() inserts a row [I]only[/I] if the primary key is not set (e.g parent_id is NULL).
    tu dis:

    Code:
    En mettant une valeur 0 par défaut à ce champ dans la structure de la table #__joaktree_applications,
    Dans quel fichier se fait cette modification ?
    Dernière édition par starter866 à 27/11/2017, 12h58

    Laisser un commentaire:


  • RobertG
    a répondu
    Trouvé ! En mettant une valeur 0 par défaut à ce champ dans la structure de la table #__joaktree_applications, l'enregistrement et la modification des "sources GedCom" fonctionnent.
    Etape suivante : l'import GedCom... L'important est d'arriver à récupérer le lieu et le code de l'erreur.

    Laisser un commentaire:


  • RobertG
    a répondu
    Je viens de trouver : le "parent" est le fichier "libraries/src/MVC/Model/AdminModel/AdminModel.php" !
    Reste à trouver où une erreur se produit pour interdire l'enregistrement.

    Bie, c'est donc vers la ligne 1180, // Store the data.
    if (!$table->store()) qui plante :
    // Store the data.
    if (!$table->store())
    et la ligne $this->setError($table->getError()); ne donne aucune info sur l'erreur;..

    Ah si ! j'ai pu récupérer l'erreur :
    Field 'asset_id' doesn't have a default value
    Dernière édition par RobertG à 27/11/2017, 12h17

    Laisser un commentaire:

Annonce

Réduire
Aucune annonce pour le moment.

Partenaire de l'association

Réduire

Hébergeur Web PlanetHoster
Travaille ...
X