Siechfred: HTML::Template und "option selected"

Beitrag lesen

Tag opi.

Ich möchte in einem Formular einen Eintrag vorselektieren und habe zunächst ein kleines Testskript geschrieben:

Soweit so klar, deine Abneigung gegen CGI.pm hast du aber noch nicht abgelegt, oder? ;-)

Nun habe ich ein wenig geforscht und nach einem anderen Weg gefunden, einen Eintrag als selektiert zu markieren.

Gesucht oder gefunden?

In der foreach-Schleife prüfe ich jeden Wert, ob er zuvor ausgewählt wurden ist. Gibt es hier elegantere Methoden, dies zu realisieren? Vielleicht mit HTML::Template selbst?

Nein, warum auch?

Welche Frage mich sonst noch quält ist, dass in dem Archivthread die Rede davon war, dass es eine klare Trennung von Design und Programm geben soll. Ok. Wenn nun statt des Formulars eine Tabelle mit einer Linkliste ausgegeben werden soll, dann ist doch meine Schleife hinfällig, da der Key "selected" in dem Template verwendet werden muss, da mir ansonsten eine Fehlermeldung ausgegeben wird.

Das Script liefert dem Template-Ersteller nur die Daten, nämlich die Automarken und welche vorselektiert wurde. Wie er diese Daten darstellt, ist ihm überlassen. Dazu muss er natürlich wissen, was sich hinter den Variablennamen (in diesem Fall "selected") verbirgt und entsprechend reagieren.

<select name="Marke" size="1">
      <TMPL_LOOP NAME="formular_loop">
      <option value="<TMPL_VAR NAME="value">"<TMPL_IF NAME="selected"> selected</TMPL_IF>><TMPL_VAR NAME="value"></option>
      </TMPL_LOOP>
   </select>

Wo ist hier das Problem, das Ganze in eine Liste umzumodeln:

<ul id="automarken">  
  <TMPL_LOOP NAME="formular_loop">  
    <TMPL_IF NAME="selected">  
      <li class="selektiert">  
    <TMPL_ELSE>  
      <li class="nicht_selektiert">  
    </TMPL_IF>  
    <TMPL_VAR NAME="value">  
    </li>  
  </TMPL_LOOP>  
</ul>

Du lieferst ja kein HTML aus, sondern nur einen Wert, anhand dessen der Template-Ersteller festlegen kann, wie die Darstellung der Daten erfolgen soll, in meinem obigen Beispiel eben durch Zuweisen einer anderen CSS-Klasse. Wenn du noch Verweise haben willst, dann musst du natürlich dafür sorgen, dass der Ersteller die dafür nötigen Daten geliefert bekommt.

Du schreibst z.B.:

<form action="/local/cgi/template.cgi" method="POST">

Du solltest hier besser schreiben:

<form action="<TMPL_VAR NAME='script_name'>" method="POST">

Damit hätte der User eher die Möglichkeit, aus der Auswahlliste eine Linkliste zu machen. Natürlich muss er dazu einer vernünftigen Dokumentation entnehmen können, dass er das Such(?)-Script auch via GET nach dem Schema script.pl?marke=automarke aufrufen kann.

<ul id="automarken">  
  <TMPL_LOOP NAME="formular_loop">  
    <TMPL_IF NAME="selected">  
      <li class="selektiert">  
    <TMPL_ELSE>  
      <li class="nicht_selektiert">  
    </TMPL_IF>  
    <a href="<TMPL_VAR NAME='script_name'>?marke=<TMPL_VAR NAME='value'>">  
      <TMPL_VAR NAME="value">  
    </a>  
    </li>  
  </TMPL_LOOP>  
</ul>

Ich hoffe, dich richtig verstanden zu haben :-)

Siechfred