Problem mit COA/COA_INT und optionSplit [Gelöst]

  • tech7 tech7
    T3PO
    0 x
    24 Beiträge
    0 Hilfreiche Beiträge
    27. 09. 2008, 19:47

    Hi,

    ich habe mal wieder ein Problem. Wahrscheinlich wird es wieder keiner wissen, aber die Hoffnungs stirbt zuletzt ;-)

    Ich möchte meine Content-Elemente strukturieren mit "First", "Middle" und "Last". Das habe ich mit TemplaVoila und einem ObjectPath schon hinbekommen und es klappt super!
    Aber wenn ich den Code auf meinen Hauptcontent, also tt_content, anwenden will, funktioniert es nicht so richtig. Das TS:
    [TS]temp.content = COA_INT
    temp.content {
    10 = CONTENT
    10 {
    table = tt_content
    renderObj = COA
    renderObj {
    stdWrap.outerWrap = |###SPLIT###
    10 = TEXT
    10.field = header
    10.wrap = <h1>|</h1>
    20 = TEXT
    20.field = bodytext
    20.wrap = <p>|</p>
    }
    }

    stdWrap.split {
    token = ###SPLIT###
    wrap = <div class="content_first">|</div> |*| <div class="content_middle">|</div> |*| <div class="content_last">|</div> ||
    }
    }

    tt_content < temp.content[/TS]

    Mit der ersten Zeile "COA_INT" rendert er den ganzen Inhalt doppelt (bei COA_INT wird ja gecached). Wenn ich in der ersten zeile "COA" schreibe, wird nur das letzte Content Element verarbeitet.

    Weiß jemand eine Lösung?

    Danke im Voraus.


  • 1
  • SLAng SLAng
    Flash Gordon
    0 x
    2757 Beiträge
    0 Hilfreiche Beiträge
    27. 09. 2008, 20:50

    Nein, bei COA_INT wird nicht gecached, sondern bei COA.

    ich mag mich täuschen, aber versuchs mal so:

    [TS]temp.content = COA_INT
    temp.content {
    stdWrap.split {
    token = ###SPLIT###
    wrap = <div class="content_first">|</div> |*| <div class="content_middle">|</div> |*| <div class="content_last">|</div> ||
    }
    10 = CONTENT
    10 {
    table = tt_content
    renderObj = COA
    renderObj {
    stdWrap.outerWrap = |###SPLIT###
    10 = TEXT
    10.field = header
    10.wrap = <h1>|</h1>
    20 = TEXT
    20.field = bodytext
    20.wrap = <p>|</p>
    }
    }
    }
    tt_content < temp.content[/TS]

  • steffenk steffenk
    Obi-Wan Kenobi
    0 x
    4666 Beiträge
    0 Hilfreiche Beiträge
    28. 09. 2008, 10:12

    warum das split?

    [TS]temp.content = COA
    temp.content {
    10 = CONTENT
    10 {
    table = tt_content
    stdWrap. wrap = <div class="content_first">|</div> |*| <div class="content_middle">|</div> |*| <div class="content_last">|</div>
    renderObj = COA
    renderObj {
    stdWrap.outerWrap = |###SPLIT###
    10 = TEXT
    10.field = header
    10.wrap = <h1>|</h1>
    20 = TEXT
    20.field = bodytext
    20.wrap = <p>|</p>
    }
    }
    }
    tt_content < temp.content[/TS]

  • tech7 tech7
    T3PO
    0 x
    24 Beiträge
    0 Hilfreiche Beiträge
    28. 09. 2008, 16:50

    Hmm leider funktioniert es so nicht.
    Der Split ist leider nötig, damit Typo3 überhaupt die Objekte unterscheiden kann. Mit dem "stdWrap.wrap" hatte ich es auch schon versucht.
    Anscheinend gibt es keine Möglichkeit, ContentObjekte mit first|middle|last zu strukturieren :(

    Den Post auf TYPO3Wizard hatte ich mir schon durchgelesen (http://www.typo3wizard.com/de/artikel/das-content-objekt.html) aber sie benutzen "styles.content.get", während ich mit TemplaVoila arbeite..

  • tech7 tech7
    T3PO
    0 x
    24 Beiträge
    0 Hilfreiche Beiträge
    30. 09. 2008, 13:14

    Oh ha, ich kann's noch garnicht glauben, aber ich habe es tatsächlich hinbekommen!! :o

    Also es ist ein kleiner Trick nötig, aber es lohnt sich allemal. Falls es jemand benötigt oder wissen will, wofür ich das gebraucht habe:

    [b]• das Template wird mit [u]TemplaVoila[/u] umgesetzt
    • der Benutzer/Redakteur soll das normale Inhalts-Modul im BE nutzen können, um Inhalte einpflegen zu können
    • die generierten Content-Elemente sollen mit "first|middle|last" gekennzeichnet werden[/b]

    Der Zweck des Ganzen (ein Beispiel):
    Durch die Kennzeichnung der Content-Elemente (z.B. <div class="last">...</div>) lassen sich optimale CSS-Anpassungen erstellen. Beispielsweise hat jedes Content-Element einen Abstand nach unten hin, sodass das folgende Element nicht direkt "dranklebt". Jedoch soll das letzte Content-Element der Seite diesen Abstand nach unten hin [u]nicht[/u] haben, da kein Content mehr kommt und das Design "zu Ende" ist.

    Da ich Webseiten auch gestalte, ist mir das finale Ergebnis sehr wichtig - jeder Abstand muss exakt stimmen. Daher ist meine Entwicklung hauptsächlich für CSS-Perfektionisten, die z.B. keine negativen Margins/Paddings benutzen wollen, um die Inhalte wieder zurecht zu rücken.

    Den Ansatz für OptionSplit im Content findet ihr bei Typo3 Wizard:
    [url]http://www.typo3wizard.com/de/artikel/das-content-objekt.html[/url]

    Hier die Vorgehensweise:
    [b]• Template erstellen/Mappen mit TemplaVoila[/b]
    Die Struktur könnte z.B. so aussehen:
    [HTML]<body>
    <div id="temp_content"></div>
    <div id="content">
    Content
    </div>
    </body>
    [/HTML]
    Wichtig: Es muss eine Art "Platzhalter-Container" erstellt werden - in meinem Fall "<div id="temp_content"></div>". Dieser Container wird später im Code nicht mehr sichtbar sein. Der Trick ist, dass der normale Content über das normale BE-Modul eingepflegt wird, auf einen ObjectPath übertragen und später über das DataStructure-XML gelöscht wird.
    [b]Mapping:[/b]
    [i]body:[/i] Container for elements (ROOT)
    [i]div#temp_content:[/i] Element > "Content Elements", Mapping-Action > OUTER (Include Tag)
    [i]div#content:[/i] Element > "TypoScript Object Path" (Name z.B. "lib.content"), Mapping-Action > INNER (Exclude Tag)

    Dann:
    [b]• DataStructure-XML editieren[/b]
    Wechselt nun in die "Page templates"-Ansicht (links im Menü "TemplaVoila" usw.) und klickt auf den gelben Stift rechts neben dem DataStructure-Template-Icon (DS). Das XML editiert Ihr am besten in einem Text-Editor (Copy und dann wieder Paste) und geht zur folgenden Stelle:
    [TS]<TypoScript><![CDATA[
    10= RECORDS
    10.source.current=1
    10.tables = tt_content
    10.wrap = <!--TYPO3SEARCH_begin-->|<!--TYPO3SEARCH_end-->
    ]]></TypoScript>[/TS]

    Hier fügt ihr diesen zwei Zeilen an die Zeile "10.wrap = <!--TYPO3SEARCH_begin-->|<!--TYPO3SEARCH_end-->" an:
    [TS]10.conf.tt_content = TEXT
    10.conf.tt_content.value = [/TS]
    Das XML speichern und anschließend Cache leeren.

    Zuletzt:
    [b]• TypoScript editieren[/b]
    Im TypoScript stehen z.B. oben die üblichen Zeilen und dann muss unten nur noch der TypoScript Object Path "lib.content" mit dem Inhalt gefüllt werden:
    [TS]page = PAGE
    page.typeNum = 0
    page.10 = USER
    page.10.userFunc = tx_templavoila_pi1->main_page

    [...]

    lib.content = COA_INT
    lib.content {
    10 = CONTENT
    10 {
    table = tt_content
    renderObj = COA
    renderObj {
    stdWrap.outerWrap = |###SPLIT###
    10 < tt_content
    }
    }

    stdWrap.split {
    token = ###SPLIT###
    wrap = <div class="content_first">|</div> |*| <div class="content_middle">|</div> |*| <div class="content_last">|</div> ||
    }
    }
    [/TS]

    Speichern, fertig. Von jetzt werden alle Content-Elemente mit den DIV-Klassen "content_first", "content_middle" und "content_last" gekennzeichnet. Bei vier Elementen z.B. wäre die Struktur dann
    [HTML]<div id="content">
    <div class="content_first">...</div>
    <div class="content_middle">...</div>
    <div class="content_middle">...</div>
    <div class="content_last">...</div>
    </div>
    [/HTML]

    Vielleicht ist diese Lösung für jemanden ja mal nützlich :-)

    Grüße,
    tech7

  • tech7 tech7
    T3PO
    0 x
    24 Beiträge
    0 Hilfreiche Beiträge
    30. 09. 2008, 22:20

    Nachtrag:
    Die Methode, die ich gebastelt habe, kostet doch etwas Performance, da der komplette Inhalt (tt_content) kopiert wird.
    Ich habe inzwischen einen besseren Weg gefunden.

    Quelle:
    [url]http://typo3.intervation.de/snippets/rte-ausgabe/templavoila-records-gesondert-formatieren.html[/url]

    Vorgehensweise:
    Template ganz normal erstellen, usw. und dann bei "Page templates" im [b]"Local Processing"[/b] des [b]TemplateObjects [/b]den folgenden Code eintragen:

    [TS]<T3DataStructure>
    <ROOT type="array">
    <el type="array">
    <field_content type="array">
    <tx_templavoila type="array">
    <title>Inhalt</title>
    <sample_data type="array">
    <numIndex index="0"></numIndex>
    </sample_data>
    <eType>ce</eType>
    <TypoScript><![CDATA[
    30 = COA
    30 {
    10 = RECORDS
    10 {
    source.current=1
    tables = tt_content
    conf.tt_content.stdWrap.wrap = |###SPLIT###
    }
    stdWrap.split {
    token = ###SPLIT###
    wrap = <div class="content_first">|</div> |*| <div class="content_middle">|</div> |*| <div class="content_last">|</div> ||
    }
    }
    ]]></TypoScript>
    <oldStyleColumnNumber type="integer">0</oldStyleColumnNumber>
    </tx_templavoila>
    <TCEforms type="array">
    <config type="array">
    <type>group</type>
    <internal_type>db</internal_type>
    <allowed>tt_content</allowed>
    <size>5</size>
    <maxitems>200</maxitems>
    <minitems>0</minitems>
    <multiple>1</multiple>
    <show_thumbs>1</show_thumbs>
    </config>
    <label>Inhalt</label>
    </TCEforms>
    </field_content>
    </el>
    </ROOT>
    </T3DataStructure>[/TS]

    Das war's. Viel Spaß :-)[/b][/url]

  • 1