Zum Inhalt springen

Aufteilung Templates und Vererbung

Erstellt am 13. Oktober 2008 · 10 Antworten · letzte Antwort am 20. Oktober 2008

Tags: Templates & Layouts, Frage

montharon ·

Hallo!

Ich habe ein Verständnisproblem mit der Vererbung von Templates!
Aufgebaut habe ich die Struktur folgendermassen:

Root (Haupt- bzw. Default-Template)
--- Startseite (spezielles Template)
--- Main01
--- Main02
...
...

Dann habe ich in einem Systemfolder weitere Templates z.B.: für die Hauptnavigation usw.
Diese habe ich dann per "Basistemplate einschliessen" eingebunden.

Die Frage ist nun folgende:
Wenn ich im Objektbrowser browse, dann sehe ich, dass alle Dinge vom Hauptemplate in das spezielle Starttemplate übernommen werden - gut so, das will ich auch.
Was aber wenn ich ich im Startseite-Template eine Variable aus dem Haupttemplate überschreiben will, oder noch besser aus dem eingeschlossenen Basis-Template??

Wie arbeitet Typo3 diese Informationen alle ab bzw. wie sieht es mit der Reihenfolge aus?

Ein Beispiel:

# --- configuring the auto-parser plugin
plugin.tx_automaketemplate_pi1 {
  # --- read the template file
  content = FILE
  content.file = uploads/tf/tmp_default.html
}
...
...
# --- main TEMPLATE cObject for the BODY
temp.mainTemplate = TEMPLATE
temp.mainTemplate {
  # --- feeding the content from the auto-parser to the TEMPLATE cObject  
  template =< plugin.tx_automaketemplate_pi1
}
...
...
page = PAGE
page.typeNum = 0
page.stylesheet = uploads/tf/styles.css
# --- copying the content from TEMPLATE for <body>-section
page.10 < temp.mainTemplate

Jetzt sage ich im Startseite-Template Folgendes:

plugin.tx_automaketemplate_pi1.content.file = uploads/tf/tmp_start.html

Dies funktioniert perfekt, allerdings frage ich mich in welcher Reihenfolge die einzelnen Dinge eingebunden werden?!

Oder wie schaut's aus mit einem eingebundenen Basis-Template?

lib.HEADER = IMG_RESOURCE
lib.HEADER {
  listNum = 0
  file.import = uploads/media/
  file.import.data = register:page_media
  file.maxW = 900
  file.maxH = 294
  file.import.override {
    required = 1
    data = levelmedia: -1, "slide"
    listNum = 0
  }
  stdWrap.wrap = <div id="imagepic" style="background-image:url( | );"><hr /></div>  
}

Jetzt will ich für das Startseite-Template die wrap überschreiben:

lib.HEADER.stdWrap.wrap = <div id="imagepic_start" style="background-image:url( | );"><hr /></div>

Geht aber nicht, da ändert sich nichts an den wraps gegenüber dem Basis-Template!?

Wie kann ich es z.B.: erreichen, dass vor der Ausgabe der inkludierten Basis-Template Teile davon ersetzt werden?

DANKE
montharon

Michaelh74 ·

Den Header überschreibst Du nicht in der lib sondern im finalen Objekt.

Also angenommen später kommt bei Dir.

page.10.subparts.HEADER < lib.HEADER

Dann überschreibst Du das so:

page.10.subparts.HEADER.stdWrap.wrap = <div id="imagepic_start" style="background-image:url( | );"><hr /></div>

Gruß
Michael

montharon ·

Hallo Michael,

noch ganz bin ich nicht dabei!?
Schau mal hier...

Sagen wir mal ich habe folgendes Szenario:
Bild: x-cursion.de/…/object_browser.gif

Jetzt möchte ich die Standardangaben der Breite und Höhe vom file innerhalb des Objekts tmp.HEADER in einem Template überschreiben
Bild: x-cursion.de/…/info_modify.gif

Warum muss ich dann auf das page Objekt zugreifen und kann nicht über tmp.HEADER die Informationen verändern, also BEVOR das Objekt in den Subpart vom template kopiert wird?
Bild: x-cursion.de/…/info_modify2.gif

Die erste Variante funktioniert, die zweite nicht!
Kann mir das mal jemand erklären BITTE!?

DANKE
montharon

Michaelh74 ·

Das hat was mit der Reihenfolge der Abarbeitung zu tun.

Angenommen Du erstellst ein temp Objekt und weist diese dann einem subpart zu.

Später willst Du das temp Objekt ändern, aber es wurde ja bereits dem subpart zugewiesen. Somit wirken sich nachträgliche Änderungen am temp Objekt zwar auf das temp Objekt selbst aus, aber eben nicht auf das subpart.

Gruß
Michael

montharon ·

Hallo Michael,

ist mir klar, allerdings kommt das Temp-Objekt im Objekt-Browser ja VOR dem Page Objekt!
Wenn ich das Temp-Objekt also ändere BEVOR es in den subpart kopiert wird, müsste es doch greifen, oder habe ich da etwas Grundlegendes falsch verstanden!?

DANKE
montharon

Michaelh74 ·

Grundsätzlich ja, aber das überschriebene temp wird erst berücksichtigt wenn Dein ursprüngliches temp schon dem page objekt zugewiesen wurde.
Ablauf:
temp
Zuweisung temp auf page
deine temp Änderung

=> das Objekt page bekommt davon nichts mehr mit.

Gruß
Michael

montharon ·

Hallo Michael,

abermals DANKE für deine Antwort!
Das heisst also, dass grundsätlich die Dinge, die im Objekt-Browser überschreibe
erst abgearbeitet werden, NACHDEM der Setup-Code ausgeführt wurde?
Wo hast du diese Informationen her? Ich habe noch nichts darüber gefunden...

Sehe ich das nun richtig?

DANKE
montharon

Michaelh74 ·

Erfahrung aus vielen Jahren Typo3.

Du kannst Dir Reihenfolger der Abarbeitung evtl. im Admin Panel anzeigen lassen.

Das heisst also, dass grundsätlich die Dinge, die im Objekt-Browser überschreibe
erst abgearbeitet werden, NACHDEM der Setup-Code ausgeführt wurde?

Nein, nicht grundsätzlich, aber eben bei den Temp Objekten, die dann einem Page-Objekt zugewiesen werden. Änderst Du einen Constant Wert, wie z.B. max Bilbreite, dann greift das natürlich direkt.

Gruß
Michael

montharon ·

Hallo Michael once again,

Du kannst Dir Reihenfolger der Abarbeitung evtl. im Admin Panel anzeigen lassen

Was meinst du mit eventuell?

Nein, nicht grundsätzlich, aber eben bei den Temp Objekten, die dann einem Page-Objekt zugewiesen werden. Änderst Du einen Constant Wert, wie z.B. max Bilbreite, dann greift das natürlich direkt.

Kannst du mir mit oben platziertem Bild (Objekt-Browser) ein Beispiel geben, welche Variablen ich übersteuern könnte, damit ich nun ALLE Unklarheiten beseitigen kann.

Vielen Dank für deine Hilfe!
montharon

Michaelh74 ·

Was meinst du mit eventuell?

Probiers doch einfach mal aus ;-)

Du kannst grunsätzlich alle Variablen die nicht in einem temporären Objekt sind überschreiben.

Gruß
Michael

montharon ·

Hallo Michael,

vielen Dank für deine Antwort!
Werde mich jetzt wirklich einmal hinsetzen und die grundlegenden Dinge einfach ausprobieren. Aber du weisst ja, man sollte immer möglichst schnell zu einen Ergebnis kommen und da bleibt oft wenig Zeit zum "Spielen"...

DANKE
montharon