Author Topic: [vlibTemplate] globalen Loop innerhalb eines anderen verwenden  (Read 1449 times)

0 Members and 1 Guest are viewing this topic.

Offline ClausVB

  • Administrator
  • Hero Member
  • *****
  • Posts: 566
    • Homepage: clausvb.de
Quote
ich benutze in meinem CMS vlibTemplate, nun wollte ich ein Template schreiben, in dem ein globales Loop innerhalb eines anderen verwendet wird - allerdings hab ich gemerkt, dass dies nicht geht. Nun hab ich mich mal in deinem Code umgesehen und versucht es selbst zu programmieren, aber so wie du das ganze angegangen bist scheint es absolut nicht zu funktionieren, da ja alles mit den namespaces gemacht wird und eben auch davon abh�ngig die Variablen in den Schleifen... Hast du dir schonmal gedanken darum gemacht, oder ist das ne ganz neue Idee f�r dich?
Sorry, ich verstehe nur Bahnhof. Und ja ... egal wovon Du schreibst, es ist komplett neu f�r mich. Irgendwie habe ich nicht das Gef�hl, dass mir dieses "globale Loop"-Feature fehlt ... :D

vLIB ist �brigens nicht von mir, sondern von Kelvin Jones.

Gru�
Claus

Guest

  • Guest
[vlibTemplate] globalen Loop innerhalb eines anderen verwenden
Reply #1 on: Sat, 22. October 2005 - 16:41:38
Hi Claus,

ich habe ein Loop "Menu" und eins "Submenu" definiert - jedoch ist "Submenu" genauso wie "Menu" global, also nicht in "Menu" enthalten. Das ist einfach n�tig, da das Submen� manchmal wie hier nicht innerhalb des Men�s, sondern nachdem im Code alle Men�elemente ausgegeben wurden, angezeigt wird.

Also in etwa so:

Men�eintrag1 Men�eintrag2 Men�eintrag3
Submen�eintrag1 Submen�eintrag2

Nun will ich aber folgendes:
Men�eintrag1
Men�eintrag2
  Submen�eintrag1
  Submen�eintrag2
Men�eintrag3

also m�ssen die Submen�eintr�ge ja direkt zwischen den Men�eintr�gen eingesetzt werden.
Da es sich um ein CMS handelt, kann ich nun nicht nur f�r diesen einen Fall etwas an der ausgabe �ndern, damit die Daten in ein Loop innerhalb des Menuloops kommen, auch wenn es kein gro�er Aufwand w�re - aber auch das o.g. muss noch funktionieren und die Daten doppelt ausgeben will ich auch nicht, da lieber w�rde ich eine �nderung an vlib machen  :D

So hatte ich mir das vorgestellt (evtl noch mit "global." hier und da davor ;))
Code: [Select]
--globales Menu-Loop--
tmpl_loop name=menu
    div class=active_menuentry
        a href={tmpl_var name=link}{tmpl_var name=name}/a
    /div
    --�berpr�fen ob dieser Men�punkt aktiv ist und Submen� enth�lt--
    tmpl_if name=opened op=== value=1
        tmpl_if name=submenu op=== value=1
            --Submen� Loop--
            tmpl_loop name=submenu
                div class=submenuentry
                    a  href={tmpl_var name=link}{tmpl_var name=name}/a
                /div
            /tmpl_loop
        /tmpl_if
    /tmpl_if
/tmpl_loop

aber wenn ich das so mach, geht vlibTemplate davon aus, dass "Submenu" ein Loop innerhalb von "Menu" ist und findet desshalb keine Daten, da "Submenu" ja global ist...

hoffentlich ist es jetzt ewas klarer, was ich meine ;)

ciao
Christian

Offline ClausVB

  • Administrator
  • Hero Member
  • *****
  • Posts: 566
    • Homepage: clausvb.de
[vlibTemplate] globalen Loop innerhalb eines anderen verwenden
Reply #2 on: Sat, 22. October 2005 - 19:01:28
Quote
Nun will ich aber folgendes:
Men�eintrag1
Men�eintrag2
� Submen�eintrag1
� Submen�eintrag2
Men�eintrag3
Wenn ich das richtig deute kann jeder Men�eintrag beliebig viele Submen�eintr�ge haben. Also eine klassische 1:N Beziehung.

Dieses Forum hat User und jeder User kann beliebig viele Posts haben, ebenfalls eine 1:N Beziehung. Das ist die klassische Struktur eines Gruppenwechsels.

Gruppenwechsel in PHP ohne Templates
Gruppenwechsel in PHP mit Templates

Damit sollte das realisierbar sein. Es ist n�mlich m�glich diese Gruppenwechsel sehr tief zu verschachteln. Unter COBOL hatte ich mal einen 5fachen Gruppenwechsel.

Wichtig zu beachten: Ein einfacher Gruppenwechsel ben�tigt 2 Arrays (im Beispiel "inner" und "outer"), ein 2facher Gruppenwechsel w�rde noch einen Array mehr ben�tigen.

Mehr Infos zu verschachtelten LOOPs und LOOP-Arrays ...

Gru�
Claus
Last Edit: Sat, 22. October 2005 - 19:04:51 by ClausVB

Christian

  • Guest
[vlibTemplate] globalen Loop innerhalb eines anderen verwenden
Reply #3 on: Sun, 23. October 2005 - 13:42:45
Quote
Wenn ich das richtig deute kann jeder Men�eintrag beliebig viele Submen�eintr�ge haben. Also eine klassische 1:N Beziehung.
Nicht ganz:
Es gibt nur ein einziges Submen� je Seite Ein Submen� wird nicht angezeigt, wenn der �bergeordnete Men�eintrag oder einer der Submen�einr�ge nicht aktiv ist.
Das mehrere Submen�s offen sind wird auch nie m�glich sein, denn das w�rde den Administrationsaufwand im CMS letztendlich zu gro� machen.

Nur zur Info ein Teil der Philosophie meines CMS:
Das CMS soll es dem "Redakteur" der Seite einfachst m�glich machen die Seite zu administrieren, ohne �berfl�ssige Features, da viele nicht-Profis mit dem Funktionsumfang in Mambo/Joomla u.�. v�llig �berfordert sind (ist meine Erfahrung) und diese daher so gut wie nie genutz werden - erst wenn es brennt wird der Admin angerufen, damit er �nderungen macht
Damit ich nicht st�ndig angerufen werde hab ich mich entschlossen das CMS zu schreiben

Ich k�nnte es nat�rlich so machen, wie du vorgeschlagen hast, da man ja nicht unbedingt zu jedem Eintrag im Outer-Loop etwas im Inner-Loop haben m�sste - allerding m�sste ich dazu das CMS etwas umschreiben (W�re wohl ein Arbeitsaufwand von ca. 20Stunden, also nicht das Problem) Aber ich f�nd die L�sung mit einem globalen Array etwas sinnvoller, denn es k�nnte ja mal jemanden geben, der es auch wieder braucht, was bei der Gruppenwechsel-L�sung nicht so w�re
Also kam ich auf die Idee, den PHP Teil so zu lassen und es im Template zu machen... Es ist also nur die Frage, wo meine Zeit sinnvoller eingesetzt ist ;) IMHO eben darin, globale Loops m�glich zu machen

Wenn du immer noch keinen Sinn darin siehst, dann lass ich das eben und mach das mit Gruppenwechseln

ciao
Christian

Offline ClausVB

  • Administrator
  • Hero Member
  • *****
  • Posts: 566
    • Homepage: clausvb.de
[vlibTemplate] globalen Loop innerhalb eines anderen verwenden
Reply #4 on: Sun, 23. October 2005 - 19:34:09
Quote
Wenn du immer noch keinen Sinn darin siehst, dann lass ich das eben und mach das mit Gruppenwechseln
Ich sehe wirklich keinen Sinn darin, Programmierlogik in das Template zu verlagern. Denn in meinen Augen ist es kein Problem, wenn immer 2 Arrays generiert werden, auch wenn einer davon leer sein sollte
ODER du generierst nur einen Array, der direkt alle 4 Dimensionen enth�lt, die vLIB braucht.

Ich glaube, selbst mit Smarty (in punkto Template-Programmierung) w�re das nicht machbar, was Du haben m�chtest und ich w�rde solche Strukturen wirklich in PHP l�sen. 20 Stunden Arbeit sind nat�rlich schon einiges, aber ich halte gar nichts davon, die Strukturen der LOOPs von vLIB zu �ndern. Immerhin werden von Smarty und TBS �hnliche Strukturen verwendet.

Gru�
Claus

Christian

  • Guest
[vlibTemplate] globalen Loop innerhalb eines anderen verwenden
Reply #5 on: Fri, 28. October 2005 - 05:44:36
Nun gut... ich hab es mittlerweile wie oben beschrieben gel�st...

Meiner Meinung nach ist es trotzdem ein sinnvolles Feature... aber gut, ich brauche es im Moment nicht mehr

Noch was bez�glich Smarty etc. - man muss sich ja nicht an vermeintlichen Vorbildern orientieren, wenn man etwas besser machen k�nnte ;) In vlib ist imho schon einiges besser als in Smarty

ciao
Christian

Offline ClausVB

  • Administrator
  • Hero Member
  • *****
  • Posts: 566
    • Homepage: clausvb.de
[vlibTemplate] globalen Loop innerhalb eines anderen verwenden
Reply #6 on: Fri, 28. October 2005 - 10:18:10
Quote
Noch was bez�glich Smarty etc. - man muss sich ja nicht an vermeintlichen Vorbildern orientieren, wenn man etwas besser machen k�nnte ;) In vlib ist imho schon einiges besser als in Smarty

Dem kann ich mich generell anschlie�en. :D

Um meine Meinung noch einmal darzulegen: Ich halte einen Eingriff in die LOOP-Strukturen von vLIB nicht f�r eine Verbesserung, sondern f�r eine Verschlechterung. Und ich bin nach wie vor der Meinung, dass ein Men�eintrag der mehrere Sub-Men�eintr�ge hat (nichts anderes zeigt Dein Beispiel), eine 1:N Beziehung ist. Das ist und bleibt ein klassisches Gruppenwechsel Problem, das f�r mich in PHP gel�st werden sollte, nicht in vLIB.

Selbst im m�chten SQL (mit LEFT JOIN und INNER JOIN) ist es nicht m�glich einen 3-stufigen Gruppenwechsel mit Summenfunktionen zu realisieren. Dazu braucht man eine Programmiersprache.

Ich mache den vLIB-Moderater Job jetzt seit 2002 und kann ganz klar sagen, dass au�er Dir dieses Feature niemand braucht, denn es wurde noch nie angefragt.

Gru�
Claus
Last Edit: Fri, 28. October 2005 - 12:02:42 by ClausVB