Zum Inhalt springen

Onepager aus Subpages erstellen

Erstellt am 2. Juli 2021 · 6 Antworten · letzte Antwort am 12. Juli 2021

Tags: TYPO3 10, Frage

goetzlisa_ ·

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!

Teisinger ·

Zum Beispiel:

### 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
            }
        }
    }
}
<f:cObject typoscriptObjectPath="lib.content" />
goetzlisa_ ·

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 ·

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:

<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>

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

goetzlisa_ ·

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:

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
            }
        }
    }
}

Im Template:

<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>
Julian.​Hofmann ·

Du setzt innerhalb des `renderObj` für `where`:

where.cObject {
  10 = TEXT
  10 {
    field = colPos
    intval = 1  
    ifEmpty = 0
    //...

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"

goetzlisa_ · · Beste Antwort

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

Falls jemand man das Problem hat, hier mein 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
        }
    }
}