switches verschachteln

Probleme bei der regulären Arbeiten mit phpBB, Fragen zu Vorgehensweisen oder Funktionsweise sowie sonstige Fragen zu phpBB im Allgemeinen.
Forumsregeln
phpBB 2.0 hat das Ende seiner Lebenszeit überschritten
phpBB 2.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 2.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf phpBB 3.1, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Antworten
Benutzeravatar
Leuchte
Ehemaliges Teammitglied
Beiträge: 9179
Registriert: 26.05.2003 14:57
Wohnort: Duisburg
Kontaktdaten:

switches verschachteln

Beitrag 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:
codemonkey
Ehemaliges Teammitglied
Beiträge: 3005
Registriert: 13.10.2002 15:15
Wohnort: Wilhelmshaven
Kontaktdaten:

Beitrag 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 -->
Benutzeravatar
Leuchte
Ehemaliges Teammitglied
Beiträge: 9179
Registriert: 26.05.2003 14:57
Wohnort: Duisburg
Kontaktdaten:

Beitrag 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
R. U. Serious
Mitglied
Beiträge: 153
Registriert: 11.10.2003 12:33
Kontaktdaten:

Beitrag 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.
Benutzeravatar
Leuchte
Ehemaliges Teammitglied
Beiträge: 9179
Registriert: 26.05.2003 14:57
Wohnort: Duisburg
Kontaktdaten:

Beitrag von Leuchte »

habs provisorisch hinbekommen...
aba wenns noch ne lösung gibt, hör ich mir die gern an :D
R. U. Serious
Mitglied
Beiträge: 153
Registriert: 11.10.2003 12:33
Kontaktdaten:

Beitrag 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.
Antworten

Zurück zu „phpBB 2.0: Administration, Benutzung und Betrieb“