[Frage] Onepager aus Subpages erstellen [Gelöst] TYPO3-Version: 10.4.17

  • 0 x
    9 Beiträge
    0 Hilfreiche Beiträge
    02. 07. 2021, 17:06

    Hi :)

    ich habe im Backend folgende Struktur:
    - Rootpage
    - Home
    - Potfolio
    - Kundinnen
    - Presse
    - Kontakt

    Ich möchte jetzt quasi auf der Seite Home alle Subpages als Onepager ausgeben.
    Ich hab dazu schon mit diesen beiden Tutorials rumexperimentiert:
    https://typo3-4-newbies.blogspot.com/2014/03/onepage-microsite-mit-typo3.html
    https://lab.sub.uni-goettingen.de/typo3-onepager.html

    Mein Problem ist aber, das Portfolio und Presse extra Backend Layouts haben.
    Beim zweiten Tutorial hat es dann beispielsweise die ganzen Content-Elemente auch nicht in der richtigen Reihenfolge ausgegeben.

    Oder ist es klüger im Backend einfach alles auf eine Subpage zu klatschen?
    Ich wollte halt ein übersichtliches Backend für die Redakteurin haben..

    Mein Code liegt hier: https://github.com/lisagoetz/site_annaschunck

    Ich freu mich über Hilfe!

  • 0 x
    9 Beiträge
    0 Hilfreiche Beiträge
    12. 07. 2021, 13:24 - Lösung

    Vielen Dank für eure Hilfe! Den Denkanstoß hat es noch gebraucht.

    Falls jemand man das Problem hat, hier mein Code:
    [code]

    lib.content = COA
    lib.content {

    ### Content from Homepage
    10 = CONTENT
    10 {
    table = tt_content
    select {
    pidInList.data = site.rootPageId
    orderBy = sorting
    where.cObject = COA
    where.cObject {
    10 = TEXT
    10 {
    field = colPos
    intval = 1
    ifEmpty = 0
    noTrimWrap = | AND colPos=||
    }
    }
    }
    }

    ### Contents from subpages
    30 = CONTENT
    30 {
    table = pages
    select.orderBy = sorting
    select.where = doktype != 199

    renderObj = COA
    renderObj {
    10 = CONTENT
    10 {
    table = tt_content
    select {
    pidInList.field = uid
    orderBy = sorting
    where = colPos = 0
    }
    }

    stdWrap {
    if.isLessThan.field = doktype
    if.value = 3
    wrap = <section id="p{field:uid}">|</section>
    wrap.insertData = 1
    }

    20 < .10
    20.select.where = colPos = 1

    30 < .10
    30.select.where = colPos = 2

    40 < .10
    40.select.where = colPos = 3

    50 < .10
    50.select.where = colPos = 4

    60 < .10
    60.select.where = colPos = 5

    70 < .10
    70.select.where = colPos = 6
    }
    }
    }

    [/code]


  • 1
  • Teisinger Teisinger
    Jedi-Ratsmitglied
    0 x
    502 Beiträge
    37 Hilfreiche Beiträge
    05. 07. 2021, 14:59

    Zum Beispiel:

    [code]### Content
    lib.content = COA
    lib.content {

    ### Content from Homepage
    10 = CONTENT
    10 {
    table = tt_content
    select {
    pidInList.data = site.rootPageId
    orderBy = sorting
    where = colPos = 0
    }
    stdWrap {
    if.isLessThan.field = doktype
    if.value = 3
    wrap = <section id="p{field:uid}">|</section>
    wrap.insertData = 1
    innerWrap = <header><h3 class="sectionTitle">{field:nav_title // field:title}</h3><div class="description">{field:description}</div></header><div class="content">|</div>
    innerWrap.insertData = 1
    innerWrap.if.isTrue = 1
    }
    }

    ### Contents from subpages
    30 = CONTENT
    30 {
    table = pages
    select.orderBy = sorting
    select.where = doktype != 199

    renderObj = COA
    renderObj {
    10 = CONTENT
    10 {
    table = tt_content
    select {
    pidInList.field = uid
    orderBy = sorting
    where = colPos = 0
    }
    stdWrap < lib.content.10.stdWrap
    }
    }
    }
    }
    [/code]

    [code]<f:cObject typoscriptObjectPath="lib.content" />[/code]

    https://github.com/groundstack-org

  • 0 x
    9 Beiträge
    0 Hilfreiche Beiträge
    05. 07. 2021, 17:56

    Ich hab den Code mal getestet, er hat aber leider nicht den gewünschten Effekt.

    Auf der Homeseite ändert sich nichts, bis auf die zusätzlichen wraps.
    Und auf den beiden Seiten Portfolio und Presse wird in den verschiedenen colpos, die ich im Backendlayout habe, einfach immer colpos = 0 (steht ja auch so im Code) ausgegeben.

  • Teisinger Teisinger
    Jedi-Ratsmitglied
    0 x
    502 Beiträge
    37 Hilfreiche Beiträge
    06. 07. 2021, 14:44

    Tja kann ich nicht sagen was sich bei dir ändert... kanns ja nicht testen.
    Der erste Part (10) ist dafür da die Pages bzw. dessen Title aus zu geben... der zweite Part (30) dafür den content der jeweiligen Seite dar zu stellen.
    Den Code habe ich aus einer sehr gut funktionierenden Seite ;)

    Alles was im FLUID Template stehen muss ist dies hier:
    [code]<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
    data-namespace-typo3-fluid="true">

    <f:layout name="Default" />

    <f:section name="Content">
    <div id="wrapper">
    <f:cObject typoscriptObjectPath="lib.content" />
    </div>
    </f:section>

    </html>
    [/code]

    Und natürlich musst du den Code an deine Bedürfnisse anpassen - wenn du mehrere ColPos etc. hast.

    https://github.com/groundstack-org

  • 0 x
    9 Beiträge
    0 Hilfreiche Beiträge
    08. 07. 2021, 16:53

    Ich hab zumindest ein Problem gefunden: Ich hatte die Rootpage als Shortcut auf die Home-Seite umgeleitet, klar kann das dann nicht klappen...

    Aber leider bekomme ich jetzt trotzdem auf der Home-Seite nur Inhalte angezeigt, die in der colpos=0 sind. Die Unterseiten werden mir aber zumindest wieder richtig angezeigt.
    Hast du vielleicht doch nochmal einen Tipp für mich?

    Code ist jetzt folgender:
    [code]lib.content = COA
    lib.content {

    ### Content from Homepage
    10 = CONTENT
    10 {
    table = tt_content
    select {
    pidInList.data = site.rootPageId
    orderBy = sorting
    where.cObject = COA
    where.cObject {
    10 = TEXT
    10 {
    field = colPos
    intval = 1
    ifEmpty = 0
    noTrimWrap = | AND colPos=||
    }
    }
    }
    stdWrap {
    if.isLessThan.field = doktype
    if.value = 3
    wrap = <section id="p{field:uid}">|</section>
    wrap.insertData = 1
    }
    }
    ### Contents from subpages
    30 = CONTENT
    30 {
    table = pages
    select.orderBy = sorting
    select.where = doktype != 199

    renderObj = COA
    renderObj {
    10 = CONTENT
    10 {
    table = tt_content
    select {
    pidInList.field = uid
    orderBy = sorting
    where.cObject = COA
    where.cObject {
    10 = TEXT
    10 {
    field = colPos
    intval = 1
    ifEmpty = 0
    noTrimWrap = | AND colPos=||
    }
    }
    }
    stdWrap < lib.content.10.stdWrap
    }
    }
    }
    }
    [/code]

    Im Template:
    [code]<html data-namespace-typo3-fluid="true" xmlns:f="https://xsd.helhum.io/ns/typo3/cms-fluid/master/ViewHelpers">
    <!-- Nutzen des Layouts "Page/Standard" -->
    <f:layout name="Page/Standard"/>

    <!-- Rendern des Hauptinhalt -->
    <f:section name="Main">
    <f:cObject typoscriptObjectPath="lib.content"/>
    </f:section>
    </html>

    [/code]

  • 0 x
    3252 Beiträge
    152 Hilfreiche Beiträge
    09. 07. 2021, 08:45

    Du setzt innerhalb des `renderObj` für `where`:
    [code]where.cObject {
    10 = TEXT
    10 {
    field = colPos
    intval = 1
    ifEmpty = 0
    //...[/code]
    An der Stelle befindest Du Dich innerhalb eines pages-Datensatzes, den Du gerade renderst, d.h. es wird das Feld `colPos` aus diesem Datensatz verwendet. Da es in `pages` keine `colPos`gibt, fällst Du immer in den `ifEmpty`-Wert - und der ist mit '0' angegeben => immer "WHERE colPos=0"

  • 0 x
    9 Beiträge
    0 Hilfreiche Beiträge
    12. 07. 2021, 13:24

    Vielen Dank für eure Hilfe! Den Denkanstoß hat es noch gebraucht.

    Falls jemand man das Problem hat, hier mein Code:
    [code]

    lib.content = COA
    lib.content {

    ### Content from Homepage
    10 = CONTENT
    10 {
    table = tt_content
    select {
    pidInList.data = site.rootPageId
    orderBy = sorting
    where.cObject = COA
    where.cObject {
    10 = TEXT
    10 {
    field = colPos
    intval = 1
    ifEmpty = 0
    noTrimWrap = | AND colPos=||
    }
    }
    }
    }

    ### Contents from subpages
    30 = CONTENT
    30 {
    table = pages
    select.orderBy = sorting
    select.where = doktype != 199

    renderObj = COA
    renderObj {
    10 = CONTENT
    10 {
    table = tt_content
    select {
    pidInList.field = uid
    orderBy = sorting
    where = colPos = 0
    }
    }

    stdWrap {
    if.isLessThan.field = doktype
    if.value = 3
    wrap = <section id="p{field:uid}">|</section>
    wrap.insertData = 1
    }

    20 < .10
    20.select.where = colPos = 1

    30 < .10
    30.select.where = colPos = 2

    40 < .10
    40.select.where = colPos = 3

    50 < .10
    50.select.where = colPos = 4

    60 < .10
    60.select.where = colPos = 5

    70 < .10
    70.select.where = colPos = 6
    }
    }
    }

    [/code]

  • 1