Author Topic: Template mehrmals hintereinandern nutzen  (Read 2168 times)

0 Members and 1 Guest are viewing this topic.

Wolax

  • Guest
Template mehrmals hintereinandern nutzen
on: Thu, 20. July 2006 - 15:40:49
Hallo.

Ich bin gerade dabei meine Page auf vlibTemplate umzusetzen. Bisher bin ich ganz gut vorangekommen, aber jetzt stellt sich folgendes Problem:

Für "Boxen" möchte ich ein Template nutzen. Jede Box hat dann ja ein anderen Titel/Inhalt.
Wenn ich nun auf einer Seite mehrere dieser Boxen plaziere, werden allesamt mit dem selben Titel/Inhalt gefüllt.
Ist ja auch logisch, dass das so ist, aber gibts es irgendeine Möglichkeit vor dem Aufruf der 2./n. Box andere Werte zu bekommen?

Bsp.:

<table border="2" cellspacing="5" cellpadding="5">
	
<
tr><th>{tmpl_var name=tbl_head}</th></tr>
	
<
tr><td>{tmpl_var name=tbl_body}</td></tr>
</
table>
<
table border="2" cellspacing="5" cellpadding="5">
	
<
tr><th>{tmpl_var name=tbl_head}</th></tr>
	
<
tr><td>{tmpl_var name=tbl_body}</td></tr>
</
table>



In der 2. Tabelle sollte nun eben tbl_head und tbl_body mit anderen Variablen ersetzt werden können.

Hoffe das Problem ist nun verstanden wurden :)

LG Wolax
Last Edit: Thu, 20. July 2006 - 17:41:54 by ClausVB

Offline ClausVB

  • Administrator
  • Hero Member
  • *****
  • Posts: 566
    • Homepage: clausvb.de
Re: Template mehrmals hintereinandern nutzen
Reply #1 on: Thu, 20. July 2006 - 16:17:18
Das geht mit LOOP-Strukturen. Das ist nicht ganz einfach und ich würde empfehlen folgende Kapitel zu lesen
und danach folgende Beispiele zu verstehen und abzuändern:

Aufbau und Struktur eines LOOP-Arrays zu verstehen ist am wichtigsten. Alle LOOP-Arrays müssen richtig aufgebaut sein.

Gruß
Claus

Wolax

  • Guest
Re: Template mehrmals hintereinandern nutzen
Reply #2 on: Thu, 20. July 2006 - 16:34:36
Hallo..Danke für die schnelle Antwort.

Ich habe bereits alles Kapitel des Tutorials durchgelesen und durchdacht.
Die Loops waren mir auch schon als Lösung eingefallen, gehen aber nicht da zwischen den betroffenden Abschnitten noch anderen Inhalte vorkommen.
Mein kleines Beispiel war sicherlich etwas zu klein geraten ;)

Also es könnte so aussehen:

tmpl/box.html
Code: [Select]
<table border="2" cellspacing="5" cellpadding="5">
<tr><th>{tmpl_var name=tbl_head}</th></tr>
<tr><td>{tmpl_var name=tbl_body}</td></tr>
</table>

tmpl/home.html
Code: [Select]
<html>
<head>
   <title>{tmpl_var name=title_text}</title>
   <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
</head>
<body>
   <tmpl_inlcude file=box.html>

   <!-- ALLES MÖGLICHE AN WEITEREM INHALT -->

   <tmpl_inlcude file=box.html>
</body>
</html>

home.php
Code: [Select]
require_once tmpl_engine/vlibTemplate.php;

$tmpl = new vlibTemplate(tmpl/home.html);

$tmpl->setvar(tbl_head, $head1);
$tmpl->setvar(tbl_body, $body1);

//$head2 und $body2 für die 2. Box

$tmpl->pparse();

Offline ClausVB

  • Administrator
  • Hero Member
  • *****
  • Posts: 566
    • Homepage: clausvb.de
Re: Template mehrmals hintereinandern nutzen
Reply #3 on: Thu, 20. July 2006 - 17:38:48
Ich glaube, ich verstehe langsam, was Du machen möchtest. Eine Rückfrage habe ich allerdings noch:

Warum benutzt Du nicht
Modulares Programmieren mit REQUIRE_ONCE
damit hast Du die volle Macht von PHP, kannst für jede Box entweder eine eigene Datei inkludieren oder über GET-Parameter bestimmte Werte angeben.

Dazu gibt es hier im Forum ein Beispiel.

Wenn sich Dein Problem nicht mit modularen PHP-Skripten, die dann einzelne (oder auch die gleichen) Templates enthalten, lösen lässt, musst Du Dir etwas anderes ausdenken.

<?php
      
require_once box1.php// benutzt als Template "box.html"
      
require_once ganz_viel_anderer_inhalt.php;
      require_once 
box2.php// benutzt als Template "box.html"
?>



Das generelle Problem ist: Templates sind statisch. Du möchtest aber in Box #1 etwas anderes stehen haben als in Box #2. Das geht entweder nur mit unterschiedlichen Templatevariablen oder mit der oben genannten Variante.

Gruß
Claus

Wolax

  • Guest
Re: Template mehrmals hintereinandern nutzen
Reply #4 on: Fri, 21. July 2006 - 01:32:50
Letztendlich wird mir wohl nichts anderes als die require()-Variante übrig bleiben.

Was mich daran noch stört ist, dass es dem Prinzip der Templates ja wider spricht, wenn ich in den PHP-Scripten die Reihenfolge der Templates so stark vorgebe. Möchte der Designer also plötzlich Box2 vor Box1 stehen haben, so müsste doch wieder in den PHP-Code eingegriffen werden.

Offline ClausVB

  • Administrator
  • Hero Member
  • *****
  • Posts: 566
    • Homepage: clausvb.de
Re: Template mehrmals hintereinandern nutzen
Reply #5 on: Fri, 21. July 2006 - 10:41:16
Was mich daran noch stört ist, dass es dem Prinzip der Templates ja wider spricht, (...)
Das sehe ich etwas anders. PHP steuert die Templates, nicht umgekehrt. Das ist bei allen mir bekannten Template Engines so.

Möchte der Designer also plötzlich Box2 vor Box1 stehen haben, so müsste doch wieder in den PHP-Code eingegriffen werden.
Wenn Dein Designer auf die Idee kommt: "Hm, ich brauche neue Inhalte in Box1 ..." Dann muss er sowieso Kontakt zum Entwickler suchen. Eine Template gesteuerte Ausgabe von (neuen) Inhalten ist nicht möglich, weder mit vlibTemplate, noch Smarty, noch TinyButStrong.

Der Designer kann in Deinem Fall die Boxen ja gar nicht unterscheiden, weil sie beide "box.html" heißen. Wenn Du sie umbenennst (zwei verschiedene Namen), dann kann er sie auch wieder so anordnen, wie er möchte. Dann können die Templates auch verschiedene Template-Variablen enthalten.

Das eine solche modulare Struktur mit Templates funktioniert kann man an Papoo sehen. Dort kannst Du ganze Module (wie Styleswitcher, Login-Maske) von Spalte links nach oben oder nach rechts verschieben.

Die Lösung basiert auf PHP und Smarty und wird über eine Oberfläche im CMS,

dem sogenannten Modul-Manager gesteuert. Es ist möglich Module zu verschieben, zu löschen oder neue anzulegen.

Ich sehe keinen Grund, warum eine solche Lösung nicht auch mit vlibTemplate realisiert werden könnte. Die zugrundeliegenden IF-Strukturen beherrscht vlibTemplate auch. Variable TMPL_INCLUDES gehen auch, wie im anderen Post (siehe Hyperlink oben) dargestellt:

<tmpl_include file=doctype_header.htm>
<
tmpl_include file=body.htm>
<
tmpl_include file={var:content}>
<
tmpl_include file=footer.htm>



Das so etwas schwierig ist zu programmieren ... keine Frage. Man muss die Lösung aber in PHP finden, nicht in der Template-Technik.

Gruß
Claus
Last Edit: Fri, 21. July 2006 - 10:59:51 by ClausVB

Wolax

  • Guest
Re: Template mehrmals hintereinandern nutzen
Reply #6 on: Fri, 28. July 2006 - 22:25:30
Hallo.
ich habe nun eine Lösung gefunden, auch wenn diese sicher nicht im Sinne von vLib ist.

Da meine Page ja nun doch etwas größer ist habe ich mir nocheinmal "Smarty" angesehen. Dort werden ja die Templates gerendert was die Geschwindigkeit bei Templatenutzung deutlich verbessern soll. Ob da nun was dran ist, kann ich nicht sagen aber es klingt zumindest so als könnte was dran sein ;)

Aber das hat ja alles nun nix mit dem "Boxen" zu tun.

Also bei Smarty besteht die Möglichkeit innerhalb des Templates Variablen zu definieren!
Auch direkt beim "Include" weiterer Templates innerhalb der Templates können Variablen+Werte übergeben werden.

Mein Aufruf einer Box sieht dort also so aus:

Code: [Select]
<!--{include file=box_header.html box_width=400 box_title=<b>Title</b>}-->
my text in a box
<!--{include file=box_footer.html}-->

Für kleine Homepages und einen einfachen Einstieg in die Welt der Templates ist vLib aber wirklich eine gute Lösung, da der Funktionsumfang nicht so erschlagend wie bei Smarty ist. In meinem Falle benötige ich allerding einige dieser Funktionen und bin so mit Smarty recht zufrieden.

LG Wolax

Offline ClausVB

  • Administrator
  • Hero Member
  • *****
  • Posts: 566
    • Homepage: clausvb.de
Re: Template mehrmals hintereinandern nutzen
Reply #7 on: Sat, 29. July 2006 - 09:09:02
Richtig, so etwas geht mit vlibTemplate nicht. Aber ich halte auch nichts von der Idee Variablen im Template zu definieren. Was passiert zum Beispiel, wenn Du die Variablen irgendwann in verschiedenen Sprachen ausgeben willst ... dann musst Du mehrere Templates anlegen oder doch wieder auf Variablen umstellen, die in PHP definiert werden.

Smarty hat in der Programmierung von Templates deutliche Stärken, aber wirklich wichtige Features, wie Unterstützung von Datenbanken ("setdbloop") fehlt Smarty. Datumsvariablen sind auch schwieriger wie dieses Beispiel beweist, da so ohne weiteres keine Daten vor 1970 ausgegeben werden können. Das ist mit vlibDate ebenfalls kein Problem.

Gruß
Claus

Wolax

  • Guest
Re: Template mehrmals hintereinandern nutzen
Reply #8 on: Sun, 30. July 2006 - 17:19:33
Hi.

wenn man mehrere Sprachen nutzen möchte (was ich auch mache) lassen sich an der Stelle auch die Template-Variablen einfügen:

PHP-Datei
Code: [Select]
$tmpl->assign(box_title, $box_title_in_your_language);

Template:
Code: [Select]
<!--{include file=box_header.html box_width=400 box_title=$box_title}-->
my text in a box
<!--{include file=box_footer.html}-->

eine direkte Funktion für Datenbankausgaben gibt es nicht...da ist vlibTemplate klar im Vorteil.
Andererseits sind es weniger als 10 Zeilen Code, die ich Smarty hinzugefügt habe um Smarty um diese Möglichkeit zu erweitern.

In vielen Fällen muss man die Datenbankausgaben aber eh noch bearbeiten und da nehmen sich beide Systeme nicht viel.

Das soll jetzt aber hier nicht in eine Diskussion um das bessere Template-System ausarten. Ich denke jedes System hat so seine Zielgruppe und Smarty wendet sich da eher an größere Homepages und professionellere Anwendungen da es sich ja auch mit Plugins erweitern läßt und so mehr individuelle Probleme gelöst werden können.
vlibTemplate dagegen ist in der Installation und Handhabung sehr viel leichter und reicht für den Durchschnittseinsatz sicherlich absolut aus.

so far
Wolax