Hallo Martin,

der aufbau der Seite nur mit TS ist eigentlich kein Problem! Die Logik von TS kann man auch in verschiedenen Leveln erlernen. Ich selbst Baue meine Webseiten seit Jahren nur mit TS auf und würde sagen, dass ich mit TS nur mittelmäßig umgehen kann.

was wichtig ist, Du musst den Code in einzelne Bausteine auslagern! Nur so kannst Du eine Modulartige Struktur bekommen, die es Dir erleichtert zukünftig Webseiten schneller aus schon vorhandenen Elementen zusammen zu setzen.

Ich mache das so, dass ich TS nur über externe Dateien einbinde. Die wichtigsten drei sind da bei mir:
a0_bezeichner_TEMP.ts
a1_bezeichner_CONST.ts
a2_bezeichner_CONF.ts

Man kann für eine Webseite mehrere Templates erstellen, daher ist das "a" im Dateinamen eine hilfe, damit zusammengehörige Tamplates im Dateiexplorer auch zusammenstehen. "1", "2" und "3" helfen mir, damit die ordnung innerhalb der Dateinen immer gleich ist.

TEMP ist das eigentliche Template und wird im Setup der Seite (dort wo der Code normalerweise eingetragen wird) so eingebunden: <INCLUDE_TYPOSCRIPT: source="FILE: fileadmin/template/inc/a0_startseite_TEMP.ts">

CONST enthält die Konstanten und wird bei mir so eingebunden:
<INCLUDE_TYPOSCRIPT: source="FILE: fileadmin/template/inc/a1_startseite_CONST.ts">

und CONF enthält konfigurationen und wird in den Seiteneigenschaften unter "Ressourcen" "TypoScript-Konfiguration" eingebunden. <INCLUDE_TYPOSCRIPT: source="FILE: fileadmin/template/inc/a2_startseite_CONF.ts">

in der TEMP-Datei steht bei mir das:

Am besten kann man die Datei TEMP (oder TS allegemein) von unten nach oben lesen, da unterhalb die gesamte Seite zusammengebaut wird. Es wird aber immer wieder auf "Bausteine" zurückgegriffen, welche schon vorher definiert sein müssen! Daher ist zum Beispiel einer der ersten Bausteine in der Datei das Menü und andere kleinere Bestandteile der Seite. Die eigentliche Seite wird durch das page-Objekt erstellt. Innerhalb dieses Page-Objektes wird dann auf verschiedene Bausteine verlinkt: in meinem Fall nur einer tmp.pagebuild

Gundaufbau:

Baustein-menü
Baustein-headerlogo
Baustein-contentelemente
Baustein-footermenü
Baustein-footerlogo

Baustein-header = Zusammenstellung aus Baustein-menü und Baustein-headerlogo
Baustein-content = Zusammenstellung aus Baustein-contentelemente
Baustein-footer = Zusammenstellung aus Baustein-footermenü und Baustein-footerlogo

Webseite (PAGE) = Zusammenstellung aus Baustein-header und Baustein-content und Baustein-footer + Pageeinstellungen

konkret:

# ----------------------------------------------------------------------------------------------------------------------------------------------- # Baustein tmp.mainmenu; .. der einfachheit halber mal nur ein Text "Das ist mein Menu" der von "<nav class="menu">[...]</nav>" umgeben wird: Ausgabe ist dann: "<nav class="menu">Das ist mein Menu</nav>"

tmp.mainmenu = COA
tmp.mainmenu {
    wrap = <nav class="menu">|</nav>
    10 = TEXT
    10.value = Das ist mein Menu
}


# ----------------------------------------------------------------------------------------------------------------------------------------------- # Baustein tmp.headerbuild; alles was darin an elementen steht, nur das Element 20, wird in die HTML-Box "<header class="siteheader scrollfix"> [hier kommt Element 20 rein; durch | gekennzeichnet]</header>" eingepackt; Element "20" ist ein Verweis auf das Element Menu, welches nur dann eingetragen wird, wenn es vorhanden ist und dann vorher in die DIV-Box <div class="grid6">[tmp.mainmenu]</div> eingepackt wird.
Ausgabe ist bis jetzt:
"<header class="siteheader scrollfix"><div class="grid6"><nav class="menu">Das ist mein Menu</nav></div></header>"

tmp.headerbuild = COA
tmp.headerbuild {
    wrap = <header class="siteheader scrollfix">|</header>

    20 < tmp.mainmenu
    20 {
        stdWrap.required = 1
        stdWrap.wrap = <div class="grid6">|</div>
    }
}

# ----------------------------------------------------------------------------------------------------------------------------------------------- # Der Baustein tmp.pagebuild welcher mit den Bausteinen tmp.headerbuild, tmp.contentbuild und tmp.footerbuild befüllt ist

tmp.pagebuild = COA
tmp.pagebuild {
    10 < tmp.headerbuild
    20 < tmp.contentbuild
    30 < tmp.footerbuild
}

-> tmp.contentbuild und tmp.footerbuild werden genauso wie tmp.headerbuild gebildet

# -----------------------------------------------------------------------------------------------------------------------------------------------
# Einstellung der Webseite
config {
    headerComment (
        Diese Seite wurde erstellt von:
        Marco Brüggemann
    )

    doctype=html5

    htmlTag_setParams=none

    htmlTag_stdWrap {
        setContentToCurrent = 1
        cObject = COA
        cObject {
            10 = LOAD_REGISTER
            10 {
                newLine.char = 10
                tagEnd {
                    current = 1
                    split.max = 2
                    split.token = <html
                    split.returnKey = 1
                }
            }

            20 = TEXT
20.value = <!--[if lt IE 8]> <html class="no-js ie7 oldie" {register:tagEnd} <![endif]-->
            20.wrap = |{register:newLine}
            20.insertData = 1

            30 < .20
30.value = <!--[if IE 8]> <html class="no-js ie8 oldie" {register:tagEnd} <![endif]-->

            40 < .20
40.value = <!--[if IE 9]> <html class="no-js ie9 oldie" {register:tagEnd} <![endif]-->

            50 < .20
50.value = <!--[if gt IE 9]> <!--><html class="no-js"{register:tagEnd} <!--<![endif]-->

            90 = RESTORE_REGISTER
        }
    }
}

# -----------------------------------------------------------------------------------------------------------------------------------------------
# PAGE

page = PAGE
page {
    10 < tmp.pagebuild
    meta {
        X-UA-Compatible = IE=edge,chrome=1
        X-UA-Compatible.httpEquivalent = 1
        keywords = {page:keywords}
        keywords.insertData = 1
        description = {page:description}
        description.insertData = 1
        viewport = width=device-width, initial-scale=1
        autor = {$designerPerso.srg} - {$designerFirm.srg}
        autor.insertData = 1
    }
    includeCSS {
        normalize = fileadmin/template/css/normalize.css
        main = fileadmin/template/css/main.css
        lightbox = fileadmin/template/css/lightbox.css
        slider = fileadmin/template/css/slider.css
    }
    includeJS {
#   jQuery wird durch Powermail eingebunden
#        googlejquery = {$jquery.srg}
#        googlejquery.external = 1
#        googlejqueryUI = {$jqueryUI.srg}
#        googlejqueryUI.external = 1
        modernizr = fileadmin/template/js/modernizr-2.6.2.min.js
        modernizrcustom = fileadmin/template/js/modernizr.custom.js
    }
    includeJSFooter {
        plugins = fileadmin/template/js/plugins.js
        lightbox = fileadmin/template/js/lightbox.js
        eigene = fileadmin/template/js/eigene.js
        classie = fileadmin/template/js/classie.js
        slider = fileadmin/template/js/slider.js
    }
    headerData  {
        10 = COA
        10 {
            10= TEXT
10.value = <script type="text/javascript">WebFontConfig={google:{families:[
            20= TEXT
            20.value = {$GoogleFont.srg}
            20.insertData = 1
            30= TEXT
30.value = ]}};(function(){var wf=document.createElement('script');wf.src=('https:'==document.location.protocol?'https':'http')+'://ajax.googleapis.com/ajax/libs/webfont/1/webfont.js';wf.type='text/javascript';wf.async='true';var s=document.getElementsByTagName('script')[0];s.parentNode.insertBefore(wf,s);})();</script>
        }
    }
    footerData  {
        10 = TEXT
10.value =<script>(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)})(window,document,'script','//www.google-analytics.com/analytics.js','ga');ga('create', '{$GoogleAnalyticsTrackingID.srg}', '{$GoogleAnalyticsSite.srg}');ga('send', 'pageview');</script>
    }
}

Erklärung:
in meta{} werden dann für den Header die Metadaten genannt. Dort steht auch "keywords = {page:keywords}" was bedeutet, dass er aus der Datenbank, Tabelle page, Feld "keywords" die keywords der Seite holt. autor = {$designerPerso.srg} - {$designerFirm.srg} im meiner CONST Datei habe ich doe Kontante {$designerPerso.srg} so gespeichert: "designerPerso.srg = Marco Brüggemann"

in includeCSS{} werden alle CSS-Dateien eingetragen, die eingebunden werden sollen in includeJS{} werden alle JS-Dateien eingetragen, die ! im Header ! eingebunden werden sollen in includeJSFooter{} werden alle JS-Dateien eingetragen, die ! im Footer ! eingebunden werden sollen in headerData{} steht ein Handgeschriebenes Script welches Google-Webfonts einbindet {$GoogleFont.srg} dies ist die Variable für die Webfonts welche in der CONST-Datei stehen z.B. "GoogleFont.srg = 'Roboto:400,300,300italic,400italic,700,700italic,100,100italic:latin', 'Oxygen:400,300,700:latin,latin-ext'" in footerDat{} wird GoogleAnalystics eingebungen ... auch mit Konstanten welche in der CONST-Datei stehen.

Ich hoffe dass Dir das ein bisschen weiterhilft ein Verständnis zu bekommen. Versuch erstmal einen Gundaufbau zu erstellen und frage dann zu konkreten Problemen wie "wie erstelle ich ein Menü" oder "wie binde ich Content ein".

Viel Erfolg!
Marco
_______________________________________________
TYPO3-german mailing list
TYPO3-german@lists.typo3.org
http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german

Antwort per Email an