Seite 3 von 3

Verfasst: 22.07.2005 13:34
von Blutgerinsel
Pyramide hat geschrieben:Der Sinn der Sache ist, daß sich eine Block-Variable nicht mit einer Globalen oder einer aus einem anderen Block überschneidet (z.B. Titel des Forums, des Themas und des einzelnen Beitrags). Und Mode ist ja wohl beim Programmieren das unwichtigste was es gibt.
Und dafür muss ich eine derartige Zuweisung treffen?
Interessant......frage mich nur warum meine Engine so etwas gänzlich selbst ermittelt, umsetzt und ohne gefressige eval klarkommt.....Und dann irgendwie noch schneller ist aber ok......

Verfasst: 22.07.2005 21:15
von D@ve
Blutgerinsel hat geschrieben: Und dafür muss ich eine derartige Zuweisung treffen?
Interessant......frage mich nur warum meine Engine so etwas gänzlich selbst ermittelt, umsetzt und ohne gefressige eval klarkommt.....Und dann irgendwie noch schneller ist aber ok......
Das musst Du mir aber erklären, wie es Deine Engine schafft zB. zwischen einem Datum zu Unterscheiden, dass oben auf der Seite steht und mit {DATE} definiert ist und einem Datum das zB. in einer Postrow auch mit {DATE} definiert ist?
Aber selbst wenn Du eine erkennung benutzt {postrow.DATE} ist nicht nur performanter sondern auch leichter zu lesen...

Gruß, dave

Verfasst: 23.07.2005 13:04
von Blutgerinsel
D@ve hat geschrieben:Das musst Du mir aber erklären, wie es Deine Engine schafft zB. zwischen einem Datum zu Unterscheiden, dass oben auf der Seite steht und mit {DATE} definiert ist und einem Datum das zB. in einer Postrow auch mit {DATE} definiert ist?
Aber selbst wenn Du eine erkennung benutzt {postrow.DATE} ist nicht nur performanter sondern auch leichter zu lesen...
Block:

Code: Alles auswählen

<!-- BEGIN postrow -->
Dieser Beitrag wurde am {DATE} geschrieben.....
<!-- END postrow -->
Seite wurde zuletzt am {DATE} bearbeitet....
Übergabe:

Code: Alles auswählen

$template->assign_block_vars('postrow',array('DATE'=>'22.05.2001'));
$template->assign_global_vars(array('DATE'=>'29.09.2004));
assign_block_vars wird lediglich in der Rekursion bei dem Parsen eines Blockinhaltes aktiv....
assign_global_vars wird lediglich ausserhalb von Blöcken aktiv....

Folglich sieht die Engine DATE in postrow als lokale Blockvariable im Block postrow an....Und das andere DATE als global ausserhalb von Blöcken an

Verfasst: 23.07.2005 14:09
von D@ve
Das ist unsinnig
a) sparst Du damit zwar ein paar Zeichen, aber die Übersicht leidet erheblich darunter
b) was machst Du wenn Du in der postrow das globale {DATE} benutzen willst?

Gruß, Dave

Verfasst: 23.07.2005 14:59
von Blutgerinsel
D@ve hat geschrieben:Das ist unsinnig
a) sparst Du damit zwar ein paar Zeichen, aber die Übersicht leidet erheblich darunter
Meinst du...aber meinen gewiss Designer nicht.

bei 5 verschachtelten Blöcken ineinander soll:
{block_a.block_b.block_c.block_d.block_e.DATE}
übersichtlich sein?
Wenn man mal von den zahlreichen Fehlern absieht die passieren könnten wenn sich Jemand in seiner Kette verschreibt und den Platzbedarf bei X Variablen....

Finde ich das unsinnig, hochgradig Fehler anfällig und bestimmt nicht mehr User freundlich....

Aber das ist meine Meinung....
b) was machst Du wenn Du in der postrow das globale {DATE} benutzen willst?
So ein Fall existiert bei mir nicht....

Verfasst: 23.07.2005 23:57
von D@ve
bei 5 verschachtelten Blöcken ineinander soll:
{block_a.block_b.block_c.block_d.block_e.DATE}
übersichtlich sein?
Ist es, man kann direkt die semantische Zugehörigkeit eines Elements zuordnen ohne den Quelltext zu kennen. Und "globale" Elemente innerhalb von Blöcken kommen sicherlich häufiger vor als vierfach verschachtelte Blöcke...

Gruß, Dave

Verfasst: 24.07.2005 19:31
von mristau2k5
Oh je, was für ein Streit *Gg*, da ich für meine HP auch einige Template-Systeme mal getestet hab kann ichs teilweise verstehen, aber ich find die von phpbb am einfachsten zu benutzen, es ist ja nicht wirklich häufig, dass irgendjemand einen mehr als doppelt verschachtelten Code hat. Soweit ich das weiss, arbeitet aber auch z.B. smarty auf dieselbe weisse bei den Schleifen wie die engine von phpbb

Das einzige, was ich etwas blöd fand, dass ich keine switches verschachteln kann, d.h.

Code: Alles auswählen

<!-- BEGIN switch1 -->
Text
<!-- BEGIN switch2 -->
Text
<!-- END switch2 -->
Text
<!-- END switch1 -->
führt zu keiner Ausgabe des switch2-Blocks, man muss es so schreiben

Code: Alles auswählen

<!-- BEGIN switch1 -->
Text
<!-- END switch1 -->
<!-- BEGIN switch2 -->
Text
<!-- END switch2 -->
<!-- BEGIN switch1 -->
Text
<!-- END switch1 -->

Verfasst: 25.07.2005 08:06
von D@ve
doch das verschachteln geht, normalerweise. Du musst wie gesagt
a) die subBlöcke benutzen
b) den PHP-Code auch entsprechend verschachteln.

In Olympus wird aber vieles leichter, da gibt es einfache IF-ELSE Befhele in Templates die man beliebig schachteln und wiederholen kann...

Gruß, Da ve

Verfasst: 26.07.2005 10:29
von mristau2k5
ich bin so wie es grad ist ja zufrieden, hab das komplette Templatesystem jetzt erfolgreich für meine Page adaptiert, die kleinen Problemchen stören mich nicht und ich finde das System vor allem auch für Anfänger sehr einfach zu verstehen, es kann vieles und ist dennoch nicht zu kompliziert

Indirekter Schalter des Anzeigens von Inhalten im Template

Verfasst: 29.03.2006 23:23
von jue
Habe interessiert Eure Beiträge gelesen, weil ich das gleiche Problem hatte! Etwas nur dann anzeigen, wenn, z.B. der Administrator eingeloggt ist!

Hier meine Lösung:


if ( $row = $db->sql_fetchrow($result) )
{
$i = 0;
do
{
$thema_titel = $row['thema_titel'];
$thema_untertitel = $row['thema_untertitel'];
$thema_id = $row['thema_id'];
//print "thema_titel = ".$thema_titel; // Abfrage klappt!!!


// Start Erstellung update und delete Button exklusiv fuer den Administrator !

if ( $userdata['user_level'] == ADMIN )
{
$update_uri = append_sid("update_themen.$phpEx?thema_id=$thema_id");
$delete_uri = append_sid("themen.$phpEx?thema_id=$thema_id&kategorie_id=$kategorie_id&aktion=deleteitem");

$update_img = '<a href="' . $update_uri . '"><img src="' . $images['icon_edit'] . '" alt="' . $lang['Edit_delete_post'] . '" title="' . $lang['Edit_delete_post'] . '" border="0" /></a>';
$delete_img = '<a href="' . $delete_uri . '" title="Thema löschen" onClick="return window.confirm(\'Sind Sie sicher, dass Sie dieses Thema löschen wollen?\')" ><img src="templates/subSilver/images/icon_delete.gif" alt="Thema löschen" width="16" height="18" border="0"></a>';
}
else
{
$update_img = '&nbsp;';
$delete_img = '&nbsp;';
//$email = '&nbsp;';
}

// Ende Erstellung update und delete Button fuer Administrator !

$start = 0;
$row_color = ( !($i % 2) ) ? $theme['td_color1'] : $theme['td_color2'];
$row_class = ( !($i % 2) ) ? $theme['td_class1'] : $theme['td_class2'];


$template->assign_block_vars('themarow', array(
'ROW_NUMBER' => $i + ( $start + 1 ),
'ROW_COLOR' => '#' . $row_color,
'ROW_CLASS' => $row_class,
'THEMA_TITEL' => $thema_titel,
'THEMA_UNTERTITEL' => $thema_untertitel,
'U_THEMEN' => append_sid("themen.$phpEx?thema_id=$thema_id&kategorie_id=$kategorie_id"),
'UPDATE_IMG' => $update_img,
'DELETE_IMG' => $delete_img
)
);

$i++;
}
while ( $row = $db->sql_fetchrow($result) );
$db->sql_freeresult($result);
}


Im Template dann einfach {UPDATE_IMG} und {DELETE_IMG} an die entsprechende Stelle im html-Code einfügen!

Der Trick an der Sache:

Wenn der Administrator eingeloggt ist (if ( $userdata['user_level'] == ADMIN ) ), werden die Variablen $update_img und delete_img mit allem gefüllt, was man so braucht für einen Link mit Button usw. .

Wenn der Admin nicht eingeloggt ist, kommen eben nur &nbsp; 's rein!

Ist doch auch ein Schalter, nicht wahr!? ;-)


Gruss, www.jue4you.de , jue