This application is not used any more and exists only for history. Post new tickets on the Github account.
Cette application n'est plus utilisée, et existe uniquement pour son historique. Postez les nouveaux tickets sur le compte github.

Ticket #1243 (closed bug: wontfix)

Opened 4 years ago

Last modified 3 years ago

jForms - Impossible de charger les css et js nécessaires à jForms

Reported by: brunto Owned by:
Priority: normal Milestone: Jelix 1.4
Component: jelix:forms Version: 1.2RC3
Severity: normal Keywords:
Cc: Blocked By:
Blocking: Documentation needed: no
Hosting Provider: Php version:

Description

Lorsqu'un formulaire est assigné à une propriété de classe et que cette classe est passée directement au template, les fichiers JS et CSS ne sont pas chargés.

Exemple :

//Ne fonctionne pas
//Controller
    function test() {
        $rep = $this->getResponse('html');
        $form = jForms::create('monFormulaire');
        $a = array();
        $b = new stdClass();
        $b->form = $form;
        $a[] = $b;
        $tpl = new jTpl();
        $tpl->assign('a', $a);
        $rep->body->assign('MAIN', $tpl->fetch('testTpl'));
        return $rep;
    }

//Template
{foreach $a as $k=>$v}
    {formfull $v->form, '#~#'}
{/foreach}

--------------------------------------------------------

//Fonctionne
//Controller
    function test() {
        $rep = $this->getResponse('html');
        $form = jForms::create('monFormulaire');
        $a = array();
        $b = new stdClass();
        $b->form = $form;
        $a[] = $b;
        $tpl = new jTpl();
        foreach($a as $k=>$v)
            $form = $v->form;
        $tpl->assign('form', $form);
        $rep->body->assign('MAIN', $tpl->fetch('testTpl'));
        return $rep;
    }

//Template
{formfull $form, '#~#'}

Change History

comment:1 Changed 4 years ago by laurentj

le problème ne vient pas du fait que ce soit assigné à une classe, mais que le plugin formfull (et form), est appelé dans une boucle (ici foreach). le code généré pour les metas n'est pas bon (ces plugins génèrent du code comme les metas). en effet, la variable du foreach est temporaire, et du coup, cette variable n'est pas valide dans le code généré pour les metas (en gros, les metas "dynamiques" ne sont pas possibles dans une boucle). Pour corriger ça, il faudrait faire également un foreach dans le code généré pour les metas, mais c'est très compliqué, car il faudrait analyser le foreach du template (et verifier qu'on n'est pas dans un foreach imbriqué).

Enfin bref, pour moi, ce n'est pas resolvable "automatiquement". Ou essayer de trouver un autre moyen (peut être ne pas générer de metas quand on est dans une boucle..), mais ça attendra après la 1.2.

La seule solution, pour l'instant, c'est de mettre soit même les metas à la main dans le template, ou ne pas utiliser de foreach (ou autre boucle). Je vais compléter la doc sur ce point.

comment:2 Changed 3 years ago by laurentj

  • Milestone set to Jelix 1.4

Une solution à étudier :

  • avoir un block special blocmeta par exemple, qui permet de générer du code avec des if, foreach et cie dans le code des metas d'un template
  • avoir un plugin meta_form, qui permet de générer les metas d'un formulaire.

On pourrait alors faire :

{blocmeta}
   {foreach $listform as $form}
       {meta_form $form}
   {/foreach}
{/blocmeta}

l'implémentation de blocmeta va impliquer pas mal de modifications dans jTplCompiler je pense.

comment:3 Changed 3 years ago by laurentj

  • Status changed from new to closed
  • Resolution set to wontfix

trop de complications...

Note: See TracTickets for help on using tickets.