Template Engine

Gesperrt
Roland
Beiträge: 70
Registriert: So 16. Nov 2003, 15:13
Wohnort: Austria
Kontaktdaten:

Template Engine

Beitrag 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
der techniker ist das kamel auf dem der kaufmann zum erfolg reitet.
MichFress
Beiträge: 750
Registriert: Mo 5. Jan 2004, 22:32
Wohnort: Bochum
Kontaktdaten:

Re: Template Engine

Beitrag von MichFress »

Man kann pro Template nur einen Block benutzen.
"Es wird keine Handlung geben, keine Geschichte mit ihrer Versprechung auf einen Anfang und ihrer Hoffnung auf ein Ende." (Andrzej Stasiuk)
Roland
Beiträge: 70
Registriert: So 16. Nov 2003, 15:13
Wohnort: Austria
Kontaktdaten:

Re: Template Engine

Beitrag von Roland »

Vielen Dank!
Dann muss ich wohl mein Formular ein wenig umgestalten oder aufteilen.
der techniker ist das kamel auf dem der kaufmann zum erfolg reitet.
Oldperl
Beiträge: 4316
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Hat sich bedankt: 6 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: Template Engine

Beitrag 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
ConLite 3.0.0-dev, alternatives und stabiles Update von Contenido 4.8.x unter PHP 8.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog
Roland
Beiträge: 70
Registriert: So 16. Nov 2003, 15:13
Wohnort: Austria
Kontaktdaten:

Re: Template Engine

Beitrag 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
der techniker ist das kamel auf dem der kaufmann zum erfolg reitet.
Oldperl
Beiträge: 4316
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Hat sich bedankt: 6 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: Template Engine

Beitrag 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
ConLite 3.0.0-dev, alternatives und stabiles Update von Contenido 4.8.x unter PHP 8.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog
idea-tec
Beiträge: 1242
Registriert: Do 19. Sep 2002, 14:41
Wohnort: Dichtelbach
Kontaktdaten:

Re: Template Engine

Beitrag 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.
MfG, Karsten
Nicht Können bedeutet nicht, dass man etwas nicht beherrscht, sondern lediglich, dass man sich nicht traut es zu tun ;-)
| Internet | Ihr Logo deutschlandweit auf T-Shirts |
Diplomatie: Jemanden so in die Hölle zu schicken, dass er sich auf die Reise freut!!! ;-)
Roland
Beiträge: 70
Registriert: So 16. Nov 2003, 15:13
Wohnort: Austria
Kontaktdaten:

Re: Template Engine

Beitrag von Roland »

Super - Nochmals Dank an euch beide. :D
der techniker ist das kamel auf dem der kaufmann zum erfolg reitet.
Gesperrt