Wie viel Spalten dürfen es denn sein? 2 Spalten vielleicht? Dann installieren Sie bitte: fdfx_2cols. Oder doch eher 3 Spalten? Dann installieren Sie bitte: fdfx_3cols. 4 Spalten vielleicht? Sorry, aber dann muss erst eine neue Extension programmiert werden.
Wer im TER schon mal nach dem Stichwort cols gesucht hat, wird nur 5 Extensions finden. 3 davon beschäftigen sich mit 2-3 Spalten und die anderen Beiden bauen eher auf Tabellen auf.
Eine Extension mit der man x-beliebig viele Spalten (ob Sinn oder Unsinn) erzeugen kann, gibt es derzeit nicht. Einige Grafikdesigner wünschen sich von mir 3-Spaltige Contentelemente aber mal muss das Bild links sein, dann wieder rechts und mal muss Spalte 1 und 2 verbunden werden zu einer großen Spalte und Spalte 3 bleibt weiterhin für Bild oder Text in einer fest vorgegebenen Breite verfügbar.
Meine erste Idee war ein FCE aus dem Paket templavoila. Dank sogenannter Sections kann ich einen bestimmten Codebereich im HTML-Template beliebig oft anlegen.
Was wird unser FCE können?
Ihr könnt beliebig viele Spalten anlegen
Ihr könnt wählen, ob Ihr Text oder ein Bild in Eurer Spalte haben wollt.
Die Eingabefelder wechseln automatisch je nach Auswahl (Text oder Bild)
Einige Werte können global definiert werden. Können aber innerhalb jeder einzelnen Spalte überschrieben werden.
Also los geht’s
Ich erwarte hier ein System, dass bereits auf Basis von templavoila aufgebaut ist und ihr euch mit templavoila zumindest ein bisschen mit auskennt.
Erstellt im fileadmin/templates Ordner eine neue Datei mit dem Namen flex-cols.html und folgendem Inhalt:
Damit unsere Spalten nicht untereinander angezeigt werden :-)
Klick nun auf das Icon von unserer flex-cols.html und wählt im Contextmenü den Eintrag TemplaVoila. Im Mappingbereich erstellen wir nun folgende Zuordnungen:
ROOT -> BODY (inner)
Section (field_section) -> DIV.section (inner): SC:Abschnitt für Elementen
Container (field_container) -> DIV.container (inner): CO:Container für Elemente
Text (field_text) -> NOT Mapped (Textbereich für Textinhalt)
Image (field_image) -> NOT Mapped (Bildfeld mit fester B+H)
Image width (field_imagewidth) -> NOT Mapped (Ganzzahliger Wert)
Image border (field_imgborder) -> NOT Mapped (Markierungsfeld)
Dank der Section können wir nun mehrere Elemente hintereinander anlegen. Der Renderer holt sich die benötigten Daten von den anderen Elementen, die nicht gemapped sind (NOT Mapped) und baut diese zu einem großen Inhaltselement zusammen. Mit Type werden wir dem Redakteur später die Möglichkeit geben zwischen Text- oder Bild-Spalte entscheiden zu können.
Klickt nun auf Speichern und vergebt einen Namen wie Flex-Cols. Achtet darauf in der Selectbox Inhaltselement zu wählen und nicht Seitentemplate!
Wählt nun über TemplaVoila euer neu erstelltes FCE aus und editiert das XML. Ich habe euch hier mein vollständiges XML zur Verfügung gestellt und euch geänderte Bereich fett hervorgehoben:
<?xml version="1.0" encoding="utf-8" standalone="yes" ?><T3DataStructure><metatype="array"><langDisable>1</langDisable></meta><ROOTtype="array"><tx_templavoilatype="array"><title>ROOT</title><description>Wählen Sie das HTML-Element der Seite, das Sie als übergeordnetes Container-Element der Vorlage möchten.</description></tx_templavoila><type>array</type><eltype="array"><field_sectiontype="array"><type>array</type><tx_templavoilatype="array"><title>Section</title><description>Section</description><eType>input</eType><tags>div:inner</tags><preview></preview></tx_templavoila><eltype="array"><field_containertype="array"><type>array</type><tx_templavoilatype="array"><title>Container</title><description>Container</description><eType>input</eType><tags>div:inner</tags><TypoScript></TypoScript><proctype="array"><int>0</int><HSC>0</HSC><stdWrap></stdWrap></proc><preview></preview></tx_templavoila><TCEformstype="array"><label></label><configtype="array"></config></TCEforms><eltype="array"><field_rendertype="array"><tx_templavoilatype="array"><title>Render</title><description>Render</description><sample_datatype="array"><numIndexindex="0">RENDER</numIndex></sample_data><eType>TypoScriptObject</eType><tags>div:outer</tags><proctype="array"><int>0</int><HSC>0</HSC><stdWrap></stdWrap></proc><preview></preview><TypoScriptObjPath>lib.flexcols</TypoScriptObjPath></tx_templavoila></field_render><field_typetype="array"><type>no_map</type><tx_templavoilatype="array"><title>Type</title><description>Type</description><sample_datatype="array"><numIndexindex="0">TYPE</numIndex></sample_data><eType>select</eType><TypoScript></TypoScript><proctype="array"><int>0</int><HSC>0</HSC><stdWrap></stdWrap></proc><preview></preview></tx_templavoila><TCEformstype="array"><label>Inhaltstyp</label><onChange>reload</onChange><configtype="array"><type>select</type><itemstype="array"><numIndexindex="0"type="array"><numIndexindex="0"></numIndex><numIndexindex="1">0</numIndex></numIndex><numIndexindex="1"type="array"><numIndexindex="0">Text</numIndex><numIndexindex="1">1</numIndex></numIndex><numIndexindex="2"type="array"><numIndexindex="0">Bild</numIndex><numIndexindex="1">2</numIndex></numIndex></items><default>0</default></config></TCEforms></field_type><field_texttype="array"><type>no_map</type><tx_templavoilatype="array"><title>Text</title><description>Text</description><sample_datatype="array"><numIndexindex="0">TEXT</numIndex></sample_data><eType>text</eType><TypoScript></TypoScript><proctype="array"><HSCtype="integer">1</HSC><stdWrap></stdWrap></proc><preview></preview></tx_templavoila><TCEformstype="array"><label>Text</label><displayCond>FIELD:field_type:=:1</displayCond><configtype="array"><type>text</type><cols>48</cols><rows>5</rows></config></TCEforms></field_text><field_imagetype="array"><type>no_map</type><tx_templavoilatype="array"><title>Image</title><description>Image</description><sample_datatype="array"><numIndexindex="0">IMAGE</numIndex></sample_data><eType>imagefixed</eType><TypoScript>10 = TEXT
10.current = 1
</TypoScript><preview></preview></tx_templavoila><TCEformstype="array"><label>Image</label><displayCond>FIELD:field_type:=:2</displayCond><configtype="array"><type>group</type><internal_type>file</internal_type><allowed>gif,png,jpg,jpeg</allowed><max_size>1000</max_size><uploadfolder>uploads/tx_templavoila</uploadfolder><show_thumbs>1</show_thumbs><size>1</size><maxitems>1</maxitems><minitems>0</minitems></config></TCEforms></field_image><field_imagewidthtype="array"><type>no_map</type><tx_templavoilatype="array"><title>Image width</title><description>Image width</description><sample_datatype="array"><numIndexindex="0">Image width</numIndex></sample_data><eType>int</eType><TypoScript></TypoScript><proctype="array"><int>1</int><HSC>0</HSC><stdWrap></stdWrap></proc><preview></preview></tx_templavoila><TCEformstype="array"><label>Image width</label><displayCond>FIELD:field_type:=:2</displayCond><configtype="array"><type>input</type><size>4</size><max>4</max><eval>int</eval><checkbox>0</checkbox><rangetype="array"><upper>999</upper><lower>25</lower></range><defaulttype="integer">0</default></config></TCEforms></field_imagewidth><field_imgbordertype="array"><type>no_map</type><tx_templavoilatype="array"><title>Image border</title><description>Image border</description><sample_datatype="array"><numIndexindex="0">Image border</numIndex></sample_data><eType>check</eType><TypoScript></TypoScript><proctype="array"><int>0</int><HSC>0</HSC><stdWrap></stdWrap></proc><preview></preview></tx_templavoila><TCEformstype="array"><label>Image border</label><displayCond>FIELD:field_type:=:2</displayCond><configtype="array"><type>check</type><defaulttype="integer">0</default></config></TCEforms></field_imgborder></el></field_container></el><section>1</section></field_section></el></ROOT></T3DataStructure>
Mithilfe von onChange und reload schaffen wir uns eine Möglichkeit, wie im Contentelement-Wizzard von TYPO3 auch, die Eingabemaske neu zu laden und damit andere Inhaltselemente anhand der Type-Selectbox (Text oder Bild) mithilfe der displayCond Zeilen anzeigen zu lassen.
Jetzt müssen nur noch unsere Daten zusammengeführt werden zu einem Inhaltselement. Geht dazu entweder in euer Seitentemplate (Setup und Constants) oder erstellt für die gewünschte Seite ein +ext-Template.