Seite 1 von 1

Template Engine

Verfasst: Fr 17. Apr 2009, 14:48
von Roland
Hallo!

Ich möchte gerade in einem Template zwei Select-Boxen eines Formulars mit Inhalten aus 2 Abfragen füllen. Aber irgendwie verhält sich das ganze nicht so wie von mir erwartet bzw. gewünscht. Befülle ich nur eine der beiden Select-Boxen funktioniert alles einwandfrei.
Wenn ich mir in den Schleifen die Werte ausgeben lasse, erhalte ich auch die richtigen Werte. Irgendwie wird jedoch nur der letzte dynamische Block ausgeführt wie man aus dem Quelltext der generierten Seite ersieht. Vielleicht kann mir ja jemand zeigen wie es richtigerweise lauten müsste.

Box 1:

Code: Alles auswählen

<label for="idPerson">Person *</label>
<select name="idPerson" id="idPerson" size="1">
  <option value="0" selected="selected" disabled="disabled">Bitte wählen</option>
  <!-- BEGIN:BLOCK -->
  <option value="{ID_PERSON}">{OPTION}</option>
  <!-- END:BLOCK -->
</select>
Box 2:

Code: Alles auswählen

<label for="idUnitType">Art der Einheit</label>
<select name="idUnitType" id="idUnitType" size="1">
  <option value="0" selected="selected">keine Auswahl</option>
  <option value="{ID_UNIT_TYPE}">{UNIT}</option>
  <option value="{ID_UNIT_TYPE}">{UNIT}</option>
  <option value="1">Circuit Training</option>
  <option value="2">Interval Training</option>
  <option value="3">Strength</option>
  <option value="4">Endurance Training</option>
</select>
Hier mal der wesentliche Teil meines Templates:

Code: Alles auswählen

<fieldset>
  <div class="type-select">
    <label for="idPerson">{PERSON} *</label>
    <select name="idPerson" id="idPerson" size="1">
      <option value="0" selected="selected" disabled="disabled">{CHOOSE_PERSON}</option>
      <!-- BEGIN:BLOCK -->
      <option value="{ID_PERSON}">{OPTION}</option>
      <!-- END:BLOCK -->
    </select>

    <label for="idUnitType">{UNIT_TYPE} *</label>
    <select name="idUnitType" id="idUnitType" size="1">
      <option value="0" selected="selected" disabled="disabled">{CHOOSE_UNIT}</option>
      <!-- BEGIN:BLOCK -->
      <option value="{ID_UNIT_TYPE}">{UNIT_NAME}</option>
      <!-- END:BLOCK -->
    </select>
  </div>
</fieldset>
Und hier der verantwortliche Modulcode zum Befüllen:

Code: Alles auswählen

if (!is_object($tpl)) {
    $tpl = new Template;
}
$tpl->reset();

if ( !is_object($db_wrk) ) {
        $db_wrk = new DB_Contenido;
}
if ( !is_object($db_wrk_unit) ) {
        $db_wrk_unit = new DB_Contenido;
}

if (!isset ($_POST['send'])) {
    #Form has not been sent yet
    cInclude('classes', 'class.article.php');
    cInclude('classes', 'class.template.php');

    #Create Input form
    $sFormAction = $sess->url("front_content.php?idcat=$idcat&idart=$idart&parentid=$parentid");
    
    $tpl->set("s", "PERSON", mi18n("Person"));
    $tpl->set("s", "CHOOSE_PERSON", mi18n("Please Choose"));
    $tpl->set("s", "UNIT_TYPE", mi18n("Unit Type"));
    $tpl->set("s", "CHOOSE_UNIT", mi18n("No Selection"));
        
    $sql_persons = "SELECT idPerson, strLastName, strFirstName FROM ".$cfg["tab"]["workout_persons"];
    $db_wrk->query($sql_persons);	    
   
    while ($db_wrk->next_record()) {
        $tpl->set("d", "ID_PERSON", $db_wrk->f("idPerson"));
        $tpl->set("d", "OPTION", $db_wrk->f("strLastName").",&nbsp;".$db_wrk->f("strFirstName"));
        $tpl->next();
    }
		
    $sql_unit_types = "SELECT idUnitType, strUnitName FROM ".$cfg["tab"]["workout_unit_types"];
    $db_wrk_unit->query($sql_unit_types);
	
    while ($db_wrk_unit->next_record()) {
        $tpl->set("d", "ID_UNIT_TYPE", $db_wrk_unit->f("idUnitType"));
        $tpl->set("d", "UNIT_NAME", $db_wrk_unit->f("strUnitName"));
        $tpl->next();
    }	
   
    $tpl->generate($cfgClient[$client]["path"]["frontend"]."templates/OnTrain.html");
P.S. Da dieses Forum die schnellste mir bekannte Response Time hat bleibt nur noch zu sagen: "Nur keinen Stress. Ich Komme sowieso erst in ein paar Stunden dazu mich weiter damit zu beschäftigen."

Gruß,
Roland

Re: Template Engine

Verfasst: Fr 17. Apr 2009, 16:07
von MichFress
Man kann pro Template nur einen Block benutzen.

Re: Template Engine

Verfasst: Fr 17. Apr 2009, 17:30
von Roland
Vielen Dank!
Dann muss ich wohl mein Formular ein wenig umgestalten oder aufteilen.

Re: Template Engine

Verfasst: Sa 18. Apr 2009, 12:57
von Oldperl
Hallo Roland,

Du solltest bei mehreren Blöcken ein Haupttemplate und pro Block ein Untertemplate machen. Die Untertemplates können über die Renderfunktion einer PHP-Variablen oder gleich dem Haupttemplate zugewiesen werden. Sinnvoll dabei sind je nach Struktur auch mehrere Templateobjekte, wobei ich lieber nur eins nehme und die gerenderten Ergebnisse über phpVariable weitergebe.

Gruß aus Franken

Ortwin

Re: Template Engine

Verfasst: Sa 18. Apr 2009, 14:17
von Roland
Hi Ortwin,

danke für den Hinweis. Kannst Du mir eventuell ein Modul nennen in dem Untertemplates verwendet werden damit ich ein Beispiel habe. Das würde mir wahrscheinlich ein wenig Herumprobieren ersparen.

Gruß,
Roland

Re: Template Engine

Verfasst: Sa 18. Apr 2009, 14:48
von Oldperl
Hallo Roland,

die Navigation_Main aus dem Demomandanten sollte das machen, zumindest in der 4.8.10er, da hab ich grad geschaut.

Gruß aus Franken

Ortwin

Re: Template Engine

Verfasst: Sa 18. Apr 2009, 15:04
von idea-tec
Lach!!! In der 4.8.11 in der Navigation_Main ist es auch sehr gut zum Abschauen integriert. Ich nehme an, es ist kein Unterschied in den beiden Modulen vorhanden.

In Zeile 54 wird ein Modul-Template im "Block" befüllt mit den Werten aus den Zeilen 48, 50, 52 und 53 befüllt.
das so "angefüllte" Modul-Template wird in Zeile 56 generiert, in Zeile 57 die Variable $tpl geleert, damit in Zeile 58 das zuvor "en-Block" erstellte Modul-Template für die Generierung des Gesamt-Modul-Templates in Zeile 59 zur Verfügung steht.

Re: Template Engine

Verfasst: Sa 18. Apr 2009, 15:56
von Roland
Super - Nochmals Dank an euch beide. :D