Zum Inhalt springen

Templateauswahlt über Flexform

Erstellt am 22. Februar 2010 · 6 Antworten · letzte Antwort am 25. Februar 2010

Tags: Frage

Skyhead ·

Hey Leute, was muss ich in meine Flexform schreiben, um auszuwählen, dass meine extension:

1. Inhaltselement 1 neben Inhaltselement 2 darstellt ?
2. Inhaltselement 1 über Inhaltselement 2 darstellt ?

meine HTML Datei hat zwei Bereiche, die dafür vorgesehen sind:

<!-- ###ZWEISPALTIG### begin -->
[...]
<!-- ###ZWEISPALTIG### end -->

<!-- ###EINSPALTIG### begin -->
[...]
<!-- ###EINSPALTIG### end -->

Es soll also über die Flexform ausgewählt werden, welchen Templatemarker die Extension benutzen soll. In welcher Datei muss ich noch etwas ändern und wie müsste diese Änderung aussehen?

Mfg Skyhead

Skyhead ·

Hat denn niemand eine idee?

Hier ein ausschnitt aus meiner Flexform:

<template>
  <TCEforms>
  <label>LLL:EXT:...</label>
  <config>
    <type>select</type>
    <items type="array">
      <numIndex index="0" type="array">
        <numIndex index="0">volle Breite</numIndex>
        <numIndex index="1">volle Breite</numIndex>
      </numIndex>
      <numIndex index="1" type="array">
        <numIndex index="0">zwei Spalten</numIndex>
        <numIndex index="1">zwei Spalten</numIndex>
      </numIndex>
    </items>   
    <maxitems>1</maxitems>
    <size>1</size>
  </config>
</TCEforms>
</template>

was muss ich jetzt in meiner pi1/....php datei einfügen, damit er je nachdem welches selectfeld gewählt ist, dass er dann auch die richtigen Templatemarker benutzt?

Mfg Skyhead

Skyhead ·

Vielen Dank für die Hilfe, aber bin leider immernoch nicht wirklich weiter gekommen!

habe jetzt in meiner "pi1/class.php" folgenden code drin stehen:

function main($content, $conf)	{
	
$flexformWerte = $this->pi_initPIflexForm();
$cObjData = $this->cObj->data['pi_flexform'];
	
$template = $this->pi_getFFvalue($cObjData, 'template', 'sDEF');

# Get the parts out of the template
$template = array();
$template["total"] = $this->cObj->getSubpart($this->template,"###ZWEISPALTEN###");

# create the content by replacing the marker in the template
$markerArray["###TEMPLATE###"] = $template;

Dies ist einfach nur mal um zu sehen, welchen wert mir die Selectbox liefert.

Leider liefert sie mir keinen wert! Woran kann das liegen?

Das HTML-Template dazu sieht so aus:

<h3>zwei Spalten</h3>
<!-- ###ZWEISPALTEN### begin -->
<div class="box">
Template: ###TEMPLATE###<br>
</div>
<!-- ###ZWEISPALTEN### end -->

Mfg Skyhead

ammannd ·

na, einerseits musst du halt überprüfen, welchen wert dir das flexform zurückgibt, und je nachdem das eine oder das andere template laden ($this->cObj->getSubpart(...)). also etwa so:

if (($template = $this->pi_getFFvalue($cObjData, 'template', 'sDEF')) == "volle Breite") {
  $template['total'] = $this->cObj->getSubpart($this->template,"###EINSPALTIG###");
}else {
  $template['total'] = $this->cObj->getSubpart($this->template,"###ZWEISPALTIG###");
}

anschliessend musst du die maker setzen und mit dem korrekten Befehl ersetzen. lies doch dazu einfach mal hier nach: http://wiki.typo3.org/index.php/Extension_Development,_using_HTML-Templates

Skyhead ·

hey danke für deine antwort.

aber mein Problem lag an einer anderen stelle und zwar hab ich meine Variable, in der ich den wert ausgegeben haben möchte "template" genannt und auch die funktion, in der er sich das HTML Template laden soll "template" genannt. Damit hat er immer wieder alles überschrieben. Hab jetzt einfach die Variable umgenannt und schon funktioniert alles 😉

Mfg Skyhead

ammannd ·

*lol* manchmal ist die lösung so einfach... ich muss ehrlich sein, ich habe deinen codeschnipsel nicht wirklich angeschaut und schon anhand von diesem sollte es ja klar sein! 😉

dann kann man das thema ja als gelöst markieren...!