Zum Inhalt springen

Mountpoint-Seiten und Content-Slide

Erstellt am 3. September 2009 · 1 Antwort · letzte Antwort am 4. September 2009

Tags: Seiten & Seitenbaum, Frage

lixx ·

Hallo Leute!

Das wird jetzt etwas kompliziert, aber ich hoffe ich kann es trotzdem verständlich erklären.

Wie der Titel schon sagt geht es um Mountpoint-Seiten und Content-Slide. Die Site ist soll folgende Funktion haben: Es gibt einen normalen Hierarchie-Baum und daneben einen sogenannten Kategorie-Baum.

- root
-- Seite 1
--- Seite 1.1
--- Seite 1.2
-- Seite 2
--- Seite 2.1
--- Seite 2.2
-- Kategorien
--- Seite A
---- Seite A.1 (Mountpage -> Seite 1.2)
---- Seite A.2 (Mountpage -> Seite 2.2)
--- Seite B
---- Seite B.1 (Mountpage -> Seite 2.2)
---- Seite B.2 (Mountpage -> Seite 1.2)

Der Sinn liegt darin, dass man über einem Menü eine Auswahl an Seiten aus dem normalen Hierarchie-Baum angezeigt bekommt. Daher ist auch die Option "Einstiegspunkt (diese Seite) durch eingebundene Seite ersetzen" NICHT aktiviert.

Jetzt ist das Problem dabei, dass der Content der Seite nicht angezeigt wird, sondern nur der der Mountpoint-Seite. Daher habe ich "styles.content" folgend geändert:

styles.content.get {
  select.pidInList.override.field = mount_pid
  select.pidInList.override.required = 1
}

styles.content.getLeft {
  select.pidInList.override.field = mount_pid
  select.pidInList.override.required = 1
}

styles.content.getRight {
  select.pidInList.override.field = mount_pid
  select.pidInList.override.required = 1
}

Wenn man nun über das Menü z.B. auf die Seite A.2 kommt, bekommt man das Menü des Kategorie-Baums aber sieht den Inhalt der Seite 2.2.

Soweit so gut. Das klappt wunderbar! :p

Jetzt kommt das knifflige. Im Layout der Site habe ich eine rechte und linke Spalte, die befüllt werden möchte. Damit man nicht auf jeder Seite einen rechten oder linken Content platzieren muss, soll ein Content-Slide eingesetzt werden. Dazu habe ich "styles.content" weiter ergänzt:

styles.content.get {
  select.pidInList.override.field = mount_pid
  select.pidInList.override.required = 1
}

styles.content.getLeft {
  slide = -1
  select.pidInList.override.field = mount_pid
  select.pidInList.override.required = 1
}

styles.content.getRight {
  slide = -1
  select.pidInList.override.field = mount_pid
  select.pidInList.override.required = 1
}

Theoretische sollte es dann so ablaufen:
- Man kommt per Menü auf Seite A.2
- und befindet sich auf Seite A.2
- Dort wird der Inhalt der Seite 2.2 angezeigt
- Der Inhalt der rechten und linken Spalte wird aus der übergeordneten Seite 2 per Slide geladen ...

... aber: "Fatal error: Maximum execution time of 30 seconds exceeded in /root/t3lib/class.t3lib_db.php on line 231"

Ich kann mir nicht vorstellen, dass hier eine rekursion stattfindet. Über dem cObj CONTENT wird als pid "this" eingesetzt und wenn "mount_pod" gesetzt wurde, dann wird diese verwendet. Über den Slide sollte er dann den Pfad von Seite 2.2 folgen, und nicht dem vom Mount-Point. Wenns so wäre sollte das auch kein Problem darstellen.

Kann mir dabei bitte jemand helfen? Ist das was ich vorhabe überhaupt möglich?

lg lixx

lixx ·

Da antworte ich mir wieder selbst 😉

Habe den Fehler gefunden. Eigentlich ist es ein Bug, aber man kann ihn auch umgehen. Der Workaround ist einfach:

styles.content.getLeft {
  select.pidInList = {field: mount_pid // this}
  select.pidInList.insertData = 1
  slide = -1
}

In der Zeile 1274 der "class.tslib_content.php" wird die übergeordnete Seite in $conf['select.']['pidInList'] überschrieben.

$conf['select.']['pidInList'] = $this->getSlidePids($conf['select.']['pidInList'], $conf['select.']['pidInList.']);

Da aber "pidInList" eine stdWrap-Funktion ist wird, wie in meinem Fall, die pid durch "pidInList.override.field = mount_pid" wieder ersetzt ...

$res = $this->exec_getQuery($conf['table'],$conf['select.']);

... und somit werden die Daten wieder von der selben Seite angezeigt.

Ein einfaches unset könnte dabei helfen:

$conf['select.']['pidInList'] = $this->getSlidePids($conf['select.']['pidInList'], $conf['select.']['pidInList.']);
$again = strlen($conf['select.']['pidInList'])?true:false;
if (isset($conf['select.']['pidInList.'])) unset($conf['select.']['pidInList.']);

Wenn jemand das liest, der Zugang zum Bug-Tracker hat, könnte er das bitte dort posten? Nur weil ich mal einen Fehler gefunden habe, möchte ich mich nicht gleich anmelden. Danke!

lg lixx