Zum Inhalt springen

Inhalt auf allen Seiten führt zu PHP-Fehler

Erstellt am 2. Januar 2008 · 8 Antworten · letzte Antwort am 2. Januar 2008

Tags: PHP, TYPO3 4, Frage

modstyle ·

Hi!

Erstmal ein Frohes Neues an alle, hoffe ihr seit gut reingekommen 😉

Nun zum Ernst des Lebens *g: In Typo3 4 verwende ich TemplaVoila. Für die Rechte Spalte habe ich zwei DIV-Container gemapt, eine als Object Path und einer für Content Elements. Sinn der Sache ist, dass ich dem Object Path Inhalte zuweisen kann, die auf allen Seiten angezeigt werden sollen aber man dennoch darunter auf den unterschiedlichen Seiten Inhalte einfügen kann.

Das Ganze habe ich folgendermaßen via TypoScript realsiert:

lib.spalteRechts = CONTENT
lib.spalteRechts {
table = tt_content
select {
pidInList = 49
orderBy = sorting
}
}

Die Seite mit der ID 49 enthält die Inhalte in der rechten Spalte, die überall dargestellt werden sollen. Sowas hatte ich bei einem anderen Auftritt bereits verwendet und das hat auch wunderbar funktioniert.

Nun habe ich aber folgendes Problem: In der Spalte ist ein Teamspeak-Viewer-Plugin eingefügt und eine Shoutbox. Wenn ich das so verwende dann erhalte ich einen Fehler:
Fatal error: Cannot redeclare reverse() (previously declared in ***********/class.tx_mswshoutbox_pi1.php:153) in ***********/class.tx_mswshoutbox_pi1.php on line 153

Dieser Fehler wird normalerweise ausgegeben, wenn das Plugin für die Shoutbox zwei Mal auf einer Seite eingefügt wird. Leider kann ich nicht nachvollziehen wieso in diesem Fall dieser Fehler auftritt, da auf allen Seiten keine Inhalte in der rechten Spalte sind sondern nur auf der Seite ID 49, von wo sie übernommen werden sollen und somit folglich das Plugin nur ein Mal auf der Seite eingefügt werden und somit auch nur ein Mal aufgerufen werden sollte. Der obige Fehler besagt ja, dass eine Funktion doppelt aufgerufen oder vorhanden ist. Nehme ich obige TS-Konfiguration raus und füge das Plugin per Hand in die Spalte ein, wie es auf der Seite mit der ID 49 ist, dann läuft es anstandslos.

Steh ich auf Grund von Feiernachwirkungen auf dem Schlauch oder gibt es da etwas, dass ich nicht weiß? *g

Danke für die Hilfe!

modstyle ·

Hi!

Jo nur das Problem an der ganze Sache ist ja, dass die Extension ohne den Typoscript-Kram also wenn ich sie einfach auf einer Seite als Inhalt einfüge ohne Probleme funktioniert ... nur wenn ich versuche sie über Typoscript auf allen Seiten einzubinden kommt es zu diesem Fehler. Habe probehalber die Funktion "reverse()" aus der Extension gelöscht, dann scheint diese zu gehen aber es kommt der gleiche Fehler für die zweite Extension und da ist das Problem die gesamte Klasse, die die Hauptfunktionalität des Teamspeak-Viewers enthält aber als normales Inhaltselement funktioniert auch diese Extension.

Gibt es denn gar keine Möglichkeit die Extensions auf andere Weise auf allen Seiten einzubinden? Wenn ich sie manuell auf allen Seiten einfüge, dann läuft es aber das ist ja nicht Sinn der Sache dann brauche ich kein Typo3, wenn ich auf die Art und Weise arbeite ... das wär einfach ineffizient ...

modstyle ·

Hi!

Kannste sehr wohl was machen: Wenn man nicht die Inhalte der kompletten Seiten einbinden lässt sondern die Inhalte explizit über ihre ID anspricht dann geht es:

lib.spalteRechts = RECORDS
lib.spalteRechts {
  tables = tt_content
  source = 101,103
  dontCheckPid = 1
}

"source" erwartet eine Liste mit IDs von Inhaltselementen, es kann natürlich auch nur eine angegeben werden. Mit "dontCheckPid" klappts auch, wenn die Inhalte sich auf einer versteckten Seite befinden.

Warum diese Methode funktioniert und die andere nicht, weiß ich nicht. Die Inhalte sind auf der Seite nur ein Mal eingefügt und wenn ich die Seite für sich aufrufe geht es auch ... scheint doch eher ein Typo3- als ein Extension-Problem zu sein ...

Michaelh74 ·

Das Problem, daß ich in Deinen ersten Ansatz sehen, könnte vielleicht sein, daß Du nur die Seiten UID des Content angibst, aber nicht die Spalte! Würde mal sagen, da fehlt einfach die ColPos! Das würde auch erklären, daß es mit der Record Uid auf einmal klappt.

Gruß
Michael

modstyle ·

In dem Fall gibt es keine ColPos, weil ich mit TemplaVoila arbeite ... hierbei wird ein Typoscript-Object-Path verwendet ...

Hierbei liest er einfach sämtliche Inhaltselemente, die sich auf der Seite befinden d.h. in der content-Tabelle der Seite mit der gegebenen ID zugeordnet sind, aus und packt die in das per Object-Path angegebenen Container-Element ... das hat nichts damit zu tun, dass eine ganze Seite komplett eingebunden wird ...

Diese Methode habe ich bei zwei anderen Auftritten erfolgreich angewendet und da waren auch mehrere Extensions vorhanden und das hat wunderbar funktioniert ...