Seite 1 von 1

switches verschachteln

Verfasst: 12.10.2003 01:46
von Leuchte
in meiner index_body.tpl hab ich einen code, der von den switches
<!-- BEGIN tablehead -->
<!-- END tablehead -->
umgeben ist. dazwischen möchte ich einen code nur eingeloggten usern zur verfügung stellen. also müsste zwischen die switches nochmal ein
<!-- BEGIN switch_user_logged_in -->
<!-- END switch_user_logged_in -->
wo muss welcher code hin, damit die verschachtelung funktioniert? :oops:

Verfasst: 12.10.2003 01:51
von codemonkey
Na wo ist das Problem?
<!-- BEGIN tablehead -->
+++ Dein Code +++
<!-- BEGIN switch_user_logged_in -->
--- Code der nur eingeloggten Usern gezeigt werden soll ---
<!-- END switch_user_logged_in -->
+++ Dein Code +++
<!-- END tablehead -->

Verfasst: 12.10.2003 01:54
von Leuchte
nein das funktioniert ja eben nicht :D
soweit ich weiss muss eine codeänderung vorgenommen werden, damit ein switch im anderen funktioniert.. so klappts jedenfalls nicht

*edit* mir is grad aufgefallen, das die ganze page noch von einem switch umschlossen ist.. das heisst 3 switches ineinander
<!-- begin switch1 -->
code
<!-- begin switch2 -->
code
<!-- begin switch3 -->
code
<!-- end switch3 -->
code
<!-- end switch2 -->
code
<!-- end switch1 -->
vielleicht kann man sichs so besser vorstellen wie es ist... das grüne soll jetzt noch vom roten umschlossen werden :D
*edit2* hab auch grad schon hier gelesen aber das hat mich nicht wirklich weiter gebracht http://phpbb.de/viewtopic.php?t=16757

Verfasst: 12.10.2003 04:12
von R. U. Serious
AFAIK gibt es nur
$template->assign_vars(array())
für einfache Variablen und
$template->assign_block_vars('blockname', array())
für blöcke/blockvariablen.

So wie du es dir vorstellst wird es also nicht laufen. Allerdings kannst du es auf nem Umweg machen, nämlich indem du dir anschaust, wie bspw. die Votings aufgebaut sind: Da sind die relevanten Teile nämlich in andere Dateien ausgelagert.

Der Schlüssel ist
$template->set_filenames(array(
'sidebarxy' => 'sidebar_body.tpl')
);

Dann wie gehabt
$template->assign_vars(array())
$template->assign_block_vars('blockname', array())

aber dann wieder neu:
$template->assign_var_from_handle('SIDEBAR_DISPLAY', 'sidebarxy');

und ein einfaches
{SIDEBAR_DISPLAY}
in deinem eigentlichen .tpl file. Den Rest, also das was an der Stelle erscheinen soll steckst du dann in die oben bezeichnete sidebar_body.tpl

Du würdest es also anstelle des grossen umfassenden Blocks benutzen bei deinem Problem.

Sorry wenn das etwas konfus klingt, aber ist halt schon sehr spät... :roll: Schau dir wie gesagt mal die Realisierung der Polls/Umfragen an, dann wirds klar.

Verfasst: 12.10.2003 06:51
von Leuchte
habs provisorisch hinbekommen...
aba wenns noch ne lösung gibt, hör ich mir die gern an :D

Verfasst: 12.10.2003 13:29
von R. U. Serious
Was heisst provisorisch? Wie hast du es denn anders gelöst?

Trotzdem mal die Lösung für die Zukunft, falls jemand die Frage haben sollte.

Also, aus deinem obigen Code-Snippet in der .tpl-Datei würde einfach werden:
{SIDEBAR_DISPLAY}
Dann legst du eine neue .tpl Datei an, die wir bspw. nennen sidebar_body.tpl mit dem Inhalt:
code
<!-- begin switch2 -->
code
<!-- begin switch3 -->
code
<!-- end switch3 -->
code
<!-- end switch2 -->
code
(Im Vergleich zu deinem obigen Snippet fehlt also die erste und letzte Zeile).

Was passieren soll, ist dass in der Stelle von der ersten Datei die zweite ich sag mal ganz salopp "inkludiert" werden kann, und zwar abhängig von einer Bedingung. Das müssen wir nun natürlich auch noch in der .php so reinschreiben. Daher machst du folgendes in der .php Datei:

Code: Alles auswählen

if ($Bedinung1)
{
   $template->set_filenames(array( 
      'sidebarxy' => 'sidebar_body.tpl') 
    ); 

   // An dieser Stelle könnten wir einige normale Variablen 
   //ans template liefern

   //Jetzt machen wir den switch2-Block
   If ($Bedignung2) 
       $template->assign_block_vars('switch2', array());
   
   //Jetzt den dritten switch Block
   If ($Bedignung3) 
       $template->assign_block_vars('switch2.switch3', array());

  //Die folgende Zeile ist nun dafür verantwortlich, dass die zweite 
  //.tpl datei auch wirklich eingefügt wird:

  $template->assign_var_from_handle('SIDEBAR_DISPLAY', 'sidebarxy'); 
     
}
Man kann den Code natürlich auch etwas über die Datei verteilen, und das assignen der BLöcke und Variablen unabhängig von ($Bedinung1) machen. Wichtig ist dann allerdings dass die letze Zeile assign_var_from_handle nur bei ($Bedingung1) ausgeführt wird die du bei deinem Beispiel für den ersten switch-Block genommen hättest.