[TYPO3-german] TS Inhalt der Spalten beeinflusst Template

Stephan Schuler stephan.schuler at netlogix.de
Sat Aug 7 14:16:36 CEST 2010


... ich sollte mir angewöhnen, meine E-Mails vorher nochmal zu lesen
bevor ich sie losschicke. Gerade wenn "so dass man es möglichst
versteht" Ziel einer E-Mail ist stelle ich meine Sätze gerne x mal um.
Gefahr, Gefahr.

Inhaltlicher Fehler: ".layout1" im CASE ist natürlich ".col_1".



Am 7. August 2010 14:10 schrieb Schuler, Stephan <mail at g4n.de>:
> Hallo Marco.
>
>
> Das TYPO3 Content-Object TEMPLATE hat ein Attribut "template".
> Innhalt dieses "template"-Attributs kannst du Marker und Subparts
> verwenden die du dann über die entsprechenden Attribute des
> TEMPLATE-Objekts austauschst.
> Das "template"-Attribut selbst ist wieder ein Content-Objekt. Du
> kannst also TEXT, COA, USER, FILE oder wiederum TEMPLATE verwenden.
>
> Ein kleines Beispiel (ohne es auszuprobieren):
>
> lib.content = CONTENT
> lib.content {
>  table = tt_content
>  pidInList = this
>  orderBy = sorting
> }
> page = PAGE
> page.10 = TEMPLATE
> page.10 {
>  template = COA
>  template {
>    10 = TEXT
>    10 {
>      value = Ich bin die Überschrift von ###PAGETITLE###
>      wrap = <h1>|</h1>
>    }
>    20 = TEXT
>    20.value(
> Und hier kommt der Inhalt:<br />
> ###CONTENT###
> <hr />
> Ich bin der Footer.
>    )
>  }
>  marks {
>    PAGETITLE = TEXT
>    PAGETITLE.data = page:title
>    CONTENT < lib.content
>  }
> }
>
> http://typo3.org/documentation/document-library/references/doc_core_tsref/4.1.0/view/8/9/
> http://typo3.org/documentation/document-library/references/doc_core_tsref/4.1.0/view/8/26/
>
>
>
> Du kannst das TEMPLATE-Objekt natürlich an jeder beliebigen Stelle
> verwenden an der du grundsätzlich ein cObject hast. Heißt: Du kannst
> auch als Renderingmechanismus für ein tt_content ein TEMPLATE
> einspannen. Das ist zwar eine (in globaler Verwendung) eher schlechte
> Idee weil das tt_content-Objekt (das Renderingvorschrift für alle
> tt_content-Datensätze dient) ein recht ausgefeiltes Konstrukt an
> CASE-Objekten ist aber machbar ist das trotzdem.
>
>
> Zu deiner Idee, abhängig von Spalteninhalten das Layout dynamisch zu
> verändern: Ich würde hier mit Registern arbeiten und den eigentlichen
> Switch dann mit dem CASE-Objekt durchführen.
>
> page = PAGE
> page {
>  10 = LOAD_REGISTER
>  10 {
>    layoutType = COA
>    layoutType {
>      10 = TEXT
>      10.value = col
>      20 = TEXT
>      20 {
>        value = _1
>        if.isTrue.numRows < styles.content.getLeft
>      }
>      30 = TEXT
>      30 {
>        value = _2
>        if.isTrue.numRows < styles.content.get
>      }
>      40 = TEXT
>      40 {
>        value = _3
>        if.isTrue.numRows < styles.content.getRight
>      }
>    }
>  }
>  20 = CASE
>  20 {
>    key.data = register : layoutType
>
>    col_1 = TEXT
>    col_1.value = Ich bin nur die erste Spalte
>
>    col_2 < .layout1
>    col_2.value = Ich bin nur die zweite Spalte
>
>    col_3 < .layout1
>    col_3.value = Ich bin nur die dritte Spalte
>
>    col_1_2 < .layout1
>    col_1_2.value = Ich bin alles außer die dritte Spalte
>
>    col_2_3 < .layout1
>    col_2_3.value = Ich bin alles außer die erste Spalte
>
>    col_1_3 < .layout1
>    col_1_3.value = Ich bin alles außer die zweite Spalte
>
>    col_1_2_3 < .layout1
>    col_1_2_3.value = Ich bin alle Spalten
>
>  }
>  30 = RESTORE_REGISTER
> }
>
>
> Ich schiebe also zunächst einen String der inhaltsabhängig "col_1",
> "col_2", "col_3", "col_1_2", "col_2_3", "col_1_3" oder "col_1_2_3"
> lautet in das Register "layoutType" und wende abhängig vom berechneten
> String ein vollständig anderes Layout an. Das ich hier keine TEMPLATEs
> sondern TEXTe verwendet hab ... spielt ja keine Rolle.
>
> http://typo3.org/documentation/document-library/references/doc_core_tsref/4.1.0/view/8/18/
> http://typo3.org/documentation/document-library/references/doc_core_tsref/4.1.0/view/8/17/
>
>
>
> Ich glaube aber, dass du ein eher konzeptionelles Problem hast. Wenn
> du die Spalten 1-4 verwendetst dann hat jede Spalte ihren Platz. Es
> gibt Seiten auf denen du dem Redakteur in die Spalten 1 und 4 Inhalt
> eingeben lassen willst. Die Seiten sollen im Frontend genauso aussehen
> wie Seiten die der Redakteur mit den Spalten 1-4 gefüllt hat, nur dass
> in die Spalten 2 und 3 per Typoscript irgend welche Inhalte kommen. Es
> gibt also Situationen in denen eine automatische Berechnung welche
> Spalten grade verwendet werden sollen nicht das gewünschte Ergebnis
> liefern.
>
> Ich würde dir hier eher zu Templavoila raten.
> Zunächst malt dir dein Grafiker ein paar coole Layoutvarianten in
> Photoshop. Einspaltig, zweispaltig, dreispaltig, mit oder ohne Teaser,
> Teaser über Spalte eins und zwei mit danebenstehnder dritter Spalte,
> Teaser über alle drei Spalten, und so weiter. Du und dein Grafiker,
> ihr überlegt euch also vorher sehr sehr genau, welche
> unterschiedlichen Layoutvarianten ihr eigentlich haben wollt.
> Dann werden die einzelnen Layoutvarianten in ein HTML umgesetzt, jedes
> HTML in ein Templavoila-Template-Objekt gemappt.
> Der Redakteur wühlt ab jetzt im Seiten-Record, welche Layoutvariante
> er grade verwenden möchte. Im Page-Module hat er dann auch wirklich
> nur die Spalten zur Verfügung, die er auch wirklich verwenden kann.
>
> Was ich an deinem Konzept überhaupt nicht mag: Das Layout könnte sich
> von jetzt auf gleich alleine dadurch vollständig verändern dass ein
> Redakteur Inhalt in eine zusätzliche Spalte schreibt.
> Beispiel:
> Ich habe ein zunächst zweispaltiges Layout. Der Redakteur schreibt
> Texte in diese beiden Spalten und lässt die anderen leer. Weil das
> Redakteure gerne so machen (jedenfalls die die aus der Werbebranche
> Bereich "Print" kommen) passt er seinen Inhalt und seine
> Formulierungen so an, dass das Textbild als zweispaltiges Layout schön
> aussehen. Jetzt kommt nach einer Woche ein anderer Redakteur und
> schreibt in die dritte Spalte "besuchen Sie auch unser Schwimmbad"
> weil er das da gerade für notwendig hält.
> Und was passiert jetzt? Nicht nur dass jetzt aus zwei Spalten im
> Frontend plötzlich drei werden, evtl. liegt jetzt (weil dein
> Layoutkonstrukt das eben so vorgibt) die rechte Spalte des vorher
> zweispaltigen Textes unter der vorher linken Spalte und hat eine
> leicht andere Hintergrundfarbe.
>
> Oder der Redakteur will (weil er es schön findet) ein Gedicht
> dreispaltig in der mittleren Spalte linksbündig anordnen, die linke
> und rechte Spalte sollen bewusst leer bleiben. Zentrieren geht nicht
> weil zentrierter Text schwer zu lesen ist, einspaltig linksbündig ist
> Mist weil sonst rechts so ein enorm großer freier Kasten entsteht. Der
> Redakteur will hier ganz bewusst zwei von drei Spalten leer angezeigt
> bekommen. Durch deinen Automatismus kriegt er das aber nicht hin.
>
>
> Grundsätzlich: Bitte bitte bitte nichts konfigurieren, das "Magic" tut
> die der Redakteur im Zweifelsfall nicht versteht. Wenn es
> unterschiedliche Layouts gibt dann sollte der Redakteur die auch
> selbst wählen können. Ein Automatismus ist hier nur verwirrend.
>
>
> Grüße,
>
>
> Stephan Schuler
> Web-Entwickler
>
> Telefon: +49 (911) 539909 - 0
> E-Mail: Stephan.Schuler at netlogix.de
> Internet: http://media.netlogix.de
>
>
> Am 7. August 2010 09:49 schrieb Marco Brüggemann <marco at schauart.de>:
>>
>> Guten Morgen Bernd,
>>
>> Danke für deine frühe Antwort. ......
>>
>> bernd wilke schrieb:
>>>
>>> [...]
>>>  das muss an etwas anderem liegen. vermutlich hast du keine Einbindungen definiert?
>>>
>>>
>>
>> Ich habe eine Einbindung definiert ... Ich habe als Grundlage ein funktionierendes Template Mit Datei genutzt ...
>> ich hänge mal zwei Dateien an: einmal mein ausgelagertes TS mit Datei, und einmal der Versuch mit mur TS
>>
>>> [...]
>>>
>>> dein Ansatz oben (Das was ich zitiert habe) ist schon ganz gut. Natürlich gibt es dabei keine Marker/Subparts, sondern nur die Zahlen. Das was normalerweise Marker sind ist hier 20 bis 90. [...]
>>>
>>
>> ich habe damals recht viel an der Inhaltsausgabe von cssStyledContent herrumgeschraubt (unprofessionell), dabei sind mir im TS Marker aufgefallen:
>> bei tt_content.image.20.layout werden die Fälle für die Bildausrichtung unterschieden und dann eine art Template mit Markern als TEXT genutzt
>>
>> 1 = TEXT
>> 1.value = <div class="content_unit floatbox clearfix"><div class="csc-textpic csc-textpic-right csc-textpic-above###CLASSES###">###IMAGES## ####TEXT###</div><div class="csc-textpic-clear"><!-- --></div></div>
>>>
>>> Etwas unschön sind deine unübersichtlichen DIV-tags. daher würde ich folgende Struktur bevorzugen:
>>>
>>
>> Diese Vielen DIV-tags finde ich auch nicht schön und sind einer aufwendigen Schattenkonstruktion geschuldet die sich dynamisch an die visuelle Page anpasst.
>> Aber ich werde da noch was mit wraps machen.
>> Am Rande: Wraps kann ich nicht direkt hintereinander verschachteln? also
>>
>> 10 = TEXT
>> 10.value = Hallo
>> 10.wrap = <div class="box01"> | </div>
>> 10.wrap = <div class="box02"> | </div>
>> [...]
>> 10.wrap = <div class="box09"> | </div>
>>
>> die beste Lösung diese?
>> 10 = TEXT
>> 10.value = Hallo
>> 10.wrap = <div class="box01"><div class="box02">[...]<div class="box09"> | </div></div></div></div></div></div></div></div></div>
>>
>> oder verschachteln mit Objekten? (weiss nicht genau ob die Syntax stimmt)
>> 10 = TEXT
>> 10 {
>>   10 = TEXT
>>   10 {
>>       10 = TEXT
>>       10 {
>>           10 = TEXT
>>           10 {
>>               10 = TEXT
>>               10 {
>>                   10 = TEXT
>>                   10 {
>> [...]
>> 10 = TEXT
>> 10.value = Hallo
>> [...]
>>                   }
>>                   10.wrap = <div class="box04">
>>               }
>>               10.wrap = <div class="box05">
>>           }
>>           10.wrap = <div class="box06">
>>       }
>>       10.wrap = <div class="box07">
>>   }
>>   10.wrap = <div class="box08">
>> }
>> 10.wrap = <div class="box09">
>>
>> Oder was ich toll finden würde (wie bei den tt-content-markern)
>> 10 = TEXT
>> 10.value = <div class="box01"><div class="box02">[...]<div class="box09"> ###MARKER### </div></div></div></div></div></div></div></div></div>
>> [...]
>> irgendwo dann: nutze Objekt 10 als TEMPLATE und ersetze die MARKER mit Inhalten. (weiss nicht wie)
>>>
>>> mitzählen geht vermutlich mit register-Variablen, Ich würde aber eher passende wraps (spezielle CSS-Klassen) zuordnen, um einzelne 'Spalten' bzw. Bereiche auszublenden. Oder das Layout wird nicht automatisch, sondern durch den Redakteur in den Seiteneigenschaften festgelegt [2]
>>>
>>>
>>
>> Meine Vorstellungen sind ungefähr so:
>>
>> //Variablen
>> Variable COUNTER = 0
>> Variabel SPEICHER01 = leer
>> Variabel SPEICHER02 = leer
>> Variabel SPEICHER03 = leer
>> Variabel SPEICHER04 = leer
>>
>> //Funktion um die Inhalte zwischenzuspeichern
>> FUNKTION InhaltInSpeicher (INHALT, COUNTER){
>>   wenn COUNTER == 1
>>   DANN
>>   SPEICHER01 < INHALT
>>
>>   wenn COUNTER == 2
>>   DANN
>>   SPEICHER02 < INHALT
>>
>>   wenn COUNTER == 3
>>   DANN
>>   SPEICHER03 < INHALT
>>
>>   wenn COUNTER == 4
>>   DANN
>>   SPEICHER04 < INHALT
>> }
>>
>> //Prüfen ob Inhalte da sind und speichern in den Zwischenspeicher
>> if.isTrue.numRows < styles.content.getRight
>> DANN
>> COUNTER = COUNTER+1
>> InhaltInSpeicher (styles.content.getRight, COUNTER)
>>
>> if.isTrue.numRows < styles.content.get
>> DANN
>> COUNTER = COUNTER+1
>> InhaltInSpeicher (styles.content.get, COUNTER)
>>
>> if.isTrue.numRows < styles.content.getLeft
>> DANN
>> COUNTER = COUNTER+1
>> InhaltInSpeicher (styles.content.getLeft, COUNTER)
>>
>> if.isTrue.numRows < styles.content.getBorder
>> DANN
>> COUNTER = COUNTER+1
>> InhaltInSpeicher (styles.content.getBorder, COUNTER)
>>
>> //Template auswählen und Speicher in Marker eintragen
>> wenn COUNTER ==1
>> dann nutze Template1
>> füge in Marker ###SPALTE01### den Inhalt aus SPEICHER01
>>
>> wenn COUNTER ==2
>> dann nutze Template2
>> füge in Marker ###SPALTE01### den Inhalt aus SPEICHER01
>> füge in Marker ###SPALTE02### den Inhalt aus SPEICHER02
>>
>> wenn COUNTER ==3
>> dann nutze Template3
>> füge in Marker ###SPALTE01### den Inhalt aus SPEICHER01
>> füge in Marker ###SPALTE02### den Inhalt aus SPEICHER02
>> füge in Marker ###SPALTE03### den Inhalt aus SPEICHER03
>>
>> wenn COUNTER ==4
>> dann nutze Template4
>> füge in Marker ###SPALTE01### den Inhalt aus SPEICHER01
>> füge in Marker ###SPALTE02### den Inhalt aus SPEICHER02
>> füge in Marker ###SPALTE03### den Inhalt aus SPEICHER03
>> füge in Marker ###SPALTE04### den Inhalt aus SPEICHER04
>>
>>> Bernd
>>> [1] http://ug.typo3-nrw.de/mastertemplate.html
>>> [2] http://www.pi-phi.de/191.html
>>>
>>>
>>
>> Danke nochmal ... und auch Danke für die LINKS
>>
>> Marco
>>
>> _______________________________________________
>> TYPO3-german mailing list
>> TYPO3-german at lists.typo3.org
>> http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german
>


More information about the TYPO3-german mailing list