Ankündigung

Einklappen
Keine Ankündigung bisher.

Smarty/quickform: Variablen Namen dynamisch erzeugen ?

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Smarty/quickform: Variablen Namen dynamisch erzeugen ?

    Hallo !

    Ich versuche gerade , mir ein dynamisches Formular zusammen zubasteln,das ich mir per smarty anzeigen lassen will.

    Das Formular wie folgt erzeugt:
    Code:
    $allAreaRights=getAllAreaRights($areaID);
    for ($i=0;$i<count($allAreaRights['right_id']);$i++){
      $form->addElement('checkbox', 'right_'.$allAreaRights['right_id'][$i], $allAreaRights['right_define_name'][$i]);
    }
    $form->addElement('submit','btnsubmit',FORM_SUBMIT);
    
    $rendererDaten =& new HTML_QuickForm_Renderer_ArraySmarty($tmpl);
    $form->accept($rendererDaten);      
    $tmpl->assign('AREARIGHTS',$allAreaRights);
    $tmpl->assign('formular_rights', $rendererDaten->toArray());
    $tmpl->display('frmAllGroups.tpl');          
    }
    Jetzt wird ich gerne die einzelnen Formularelemente anzeigen lassen, in dem ich das Array allAreaRights[] durchlaufe und aus den Daten die Elementnamen wieder zusammenbastel.

    Mein Ansatz sieht wie folgt aus:
    Code:
    <form {$formular_rights.attributes}>  
        <fieldset>            	     
        <h3>{$HEADLINE_RIGHT}</h3>
        <table>
         <tr><td>{$formular_rights.area_1.label}</td><td>{$formular_rights.area_1.html}</tr>
         {section name=i loop=$AREARIGHTS.right_id|count} 
           <tr><td>&nbsp;</td><td>&nbsp;</td></tr>
           <tr><td>{$formular_rights.right_{$AREARIGHTS.right_id[i]}.label}</td><td>$formular_rights.right_{$AREARIGHTS.right_id[i]}.html</tr>
         {/section}
         <tr><td>&nbsp;</td><td>{$formular_rights.btnsubmit.html}</td></tr>
       </table>
     </fieldset>
    </form>
    Leider klappt das nicht, ich kann die den Namen für das label bzw Html-element nicht dynamisch zusammensetzen
    (siehe : {$formular_rights.right_{$AREARIGHTS.right_id[i]}.label} )

    Gibt es noch einen anderen Weg, die Elemente ohne "section .. loop" schleife zu durchlaufen bzw

    Bisherige Fehlermeldung:
    Code:
    Fatal error: Smarty error: [in frmAllGroups.tpl line 34]: syntax error: unrecognized tag: $formular_rights.right_{$AREARIGHTS.right_id[i] (Smarty_Compiler.class.php, line 446) in /libs/smarty/Smarty.class.php on line 1094
    Kann wer helfen ? vielleicht sollte ich auch einfach Schluss machen (kommen eh gleich die Simpsons )


  • #2
    Teillösung:
    Gestern vor lauter Brettern vorm Kopp übersehen, dass ich alle Elemente des Formulars mit "foreach" durchlaufen kann. Da es mir in meinem Fall nur darum ging, auf die checkboxen zuzugreifen, deren Name dynamisch erzeugt wurde, lasse ich alle Formular Elemente durchlaufen und filtere nur die checkboxen
    Code:
     {$formular_rights.area_1.label}</td><td>{$formular_rights.area_1.html}</tr>           
          {foreach outer=outer item=right from=$formular_rights}
             {if $right.type eq "checkbox"}
             <tr><td width="20" align="right">{$right.html}</td><td>{$right.label}</td></tr>    
             {/if}  
          {/foreach}
    In meinem Fall reicht das, größere Formulare müssten aber gesplittet werden.
    Wer trotzdem weiß, wie ich auf die dynamisch erzeugten Variablen zugreife (d.h. den Variablennamen "mittendrin" durch einen anderen Variableninhalt ersetze) kann ja trotzdem die Antwort posten, das würde mich sehr interessieren.

    Kommentar

    Lädt...
    X