---
title: "Flexform in einem \"totally new content Element\" vom Type = CType verwenden"
url: "https://www.typo3.net/d/80274-flexform-in-einem-totally-new-content-element-vom-type-ctype-verwenden"
source: "typo3.net"
tags: ["Extensions","Entwicklung","FlexForms","Frage","TCA"]
created: "2008-08-04"
last_reply: "2009-10-10"
replies: 5
solved: false
page: 1
pages: 1
lang: "de"
---

# Flexform in einem "totally new content Element" vom Type = CType verwenden

Extensions › Entwicklung · 5 Antworten · gestartet 2008-08-04

## Eröffnungsbeitrag

**m.​z.​** · 2008-08-04 · [Beitrag #1](https://www.typo3.net/d/80274-flexform-in-einem-totally-new-content-element-vom-type-ctype-verwenden/1)

Hallo liebe TYPO3 Gemeinde,

ich schlage mich seit einiger Zeit mit folgendem Problem herum.

Frage: **Kann eine Flexform in einem "totally new content Element" vom Type = CType erstellt werden?**

1) Im Kickstarter erstelle ich ein neues Contentelement (FE "totally new content Element"). Sie hat den Testnamen "YXZ".

2) Die ext_tables.php sieht so aus.

```php
<?php
if (!defined ('TYPO3_MODE')) 	die ('Access denied.');

t3lib_div::loadTCA('tt_content');
$TCA['tt_content']['types'][$_EXTKEY.'_pi1']['showitem']='CType;;4;button;1-1-1,header;;3;;2-2-2';

t3lib_extMgm::addPlugin(array('LLL:EXT:XYZ/locallang_db.xml:tt_content.CType_pi1',$_EXTKEY.'_pi1'),'CType');
?>
```

Bitte beachten: **Sie ist vom Type "CType"**!

3) Nun füge ich eine Flexform-Definition hinzu:

```php
<?php
if (!defined ('TYPO3_MODE')) 	die ('Access denied.');

t3lib_div::loadTCA('tt_content');
$TCA['tt_content']['types'][$_EXTKEY.'_pi1']['showitem']='CType;;4;button;1-1-1,header;;3;;2-2-2,';

// + NEU ======================
$TCA['tt_content']['types']['list']['subtypes_addlist'][$_EXTKEY.'_pi1']='pi_flexform';
t3lib_extMgm::addPiFlexFormValue($_EXTKEY.'_pi1','FILE:EXT:'.$_EXTKEY.'/flexform.xml');
// - NEU ======================

t3lib_extMgm::addPlugin(array('LLL:EXT:XYZ/locallang_db.xml:tt_content.CType_pi1',$_EXTKEY.'_pi1'),'CType');
?>
```

Ergebnis: **Die Flexform ist NICHT im BE zu sehen.**

4) Also habe ich die Zeile einfach mal wie folgt am Ende mit **pi_flexform** erweitert:

```php
<?php
$TCA['tt_content']['types'][$_EXTKEY.'_pi1']['showitem']='CType;;4;button;1-1-1,header;;3;;2-2-2,pi_flexform';
?>
```

Ergebnis: **Es wird ein Flexform-Formular für eine Zugängliche Tabelle angezeigt.**  :o

> Plugin Options:
> Accessibility    Table parsing
> Table caption    (<caption>)
> Table summary    ("summary" attribute in <table> tags)
> Use table-footer (<tfoot> around last table row)
> usw...

Meine Flexform-Definion aus der "/flexform.xml" wird also völlig ignoriert.

Wie kann ich das verhindern?

Ich habe schon tagelang alle Suchmaschinen rauf und runter gesucht. Und das Problem scheint wohl zu sein, dass Flexforms nicht mit Contentelementen vom Type **CType** zusammenarbeiten sondern nur mit **list_type**.

Für meinen Zweck brauche ich aber unbedingt eine Extension CType ("totally new content Element") + Flexform.

Wisst Ihr wie das zu bewerkstelligen ist?

Ich freue mich auf Euer Feedback!

Matthias

## Antworten

### [#2](https://www.typo3.net/d/80274-flexform-in-einem-totally-new-content-element-vom-type-ctype-verwenden/2) · Seppo3 · 2008-11-13

Hallo M.Z.
Hast Du inzwischen eine Lösung gefunden? Für das »new content Element« wird ja auf der Wiki Seitei <http://wiki.typo3.org/index.php/Extension_Development,_using_Flexforms> eine anderes Vorgehen aufgezeigt. Wirklich geholfen hat es mir aber auch nicht, falls Du eine Lösung gefunden hast poste sie doch bitte.

Viele Grüße Sepp

### [#3](https://www.typo3.net/d/80274-flexform-in-einem-totally-new-content-element-vom-type-ctype-verwenden/3) · Seppo3 · 2008-11-13

Hallo m.z.
…diese Tabelle von der Du sprichst, wird auch nur unter Typo3 4.1.x angezeigt unter 4.2.x wird nur noch  	 DEF:
The Title:
ausgegeben.
*Confused*
Viele Grüße Sepp

### [#4](https://www.typo3.net/d/80274-flexform-in-einem-totally-new-content-element-vom-type-ctype-verwenden/4) · Isnej · 2008-11-16

Hallo, arbeite derzeit am gleichen Problem und habe es mittlerweile wohl im Griff:

Setzt in ext_tables.php folgendes zusätzlich ein:

```php
$TCA['tt_content']['columns']['pi_flexform']['config']['ds'][','.$_EXTKEY.'_pi1'] = 'FILE:EXT:'.$_EXTKEY.'/flexform_ds.xml';
```

Damit wird Eure Flexform-Definition aus der XML Datei (hier: flexform_ds.xml) dem neuen CType aus Eurer Extension zugewiesen. Das Komma in [','.$_EXTKEY.'_pi1'] trennt den ersten Wert (hier ist der Wert einfach leer!), der die XML-Datei dem Feld "list_type" zuweisen , vom zweiten Wert (hier meine Extension). Dieser zweite Wert wird dem Feld "CType" zugewiesen.

Voraussetzung ist allerdings, das im $TCA das ds_pointerField auf list_type UND CType gesetzt ist:

```php
$TCA['tt_content']['columns']['pi_flexform']['config']['ds_pointerField'] = 'list_type,CType';
```

Gruß
Isnej

### [#5](https://www.typo3.net/d/80274-flexform-in-einem-totally-new-content-element-vom-type-ctype-verwenden/5) · speedprogs · 2009-10-09

Hallo Isnej,

deine Lösung ist super, allerdings ist sie erst seit TYPO3 4.2 möglich, da in den alten Versionen nicht auf mehrere Pointer geprüft wird, sondern immer EIN Pointer erwartet wird. Im PHP sieht das vereinfacht so aus:

```php
function getFlexFormDS($conf,$row,$table,$fieldName='',$WSOL=TRUE,$newRecordPidValue=0) {
  
  ...
  
  $ds_pointerField = $conf['ds_pointerField'];
  $ds_array        = $conf['ds'];
  
  ...
  
  if ($ds_pointerField) {
    $srcPointer = $row[$ds_pointerField];
    $srcPointer = isset($ds_array[$srcPointer]) ? $srcPointer : 'default';
  } else {
    $srcPointer = 'default';
  }
  
  ...

  if (substr($ds_array[$srcPointer],0,5)=='FILE:') {
    $file = t3lib_div::getFileAbsFileName(substr($ds_array[$srcPointer],5));
    if ($file && @is_file($file)) {
      $dataStructArray = t3lib_div::xml2array(t3lib_div::getUrl($file));
    } else {
      $dataStructArray = 'The file "'.substr($ds_array[$srcPointer],5).'" in ds-array key "'.$srcPointer.'" was not found ("'.$file.'")';   // Error message.
    }
  } else {
    $dataStructArray = t3lib_div::xml2array($ds_array[$srcPointer]);
  }
  
  ...
  
}
```

Wichtig ist Zeile 11 "**$srcPointer = $row[$ds_pointerField];**". Wenn das Datenbankfeld, welches als "ds_pointerField" angegeben ist, nicht existiert, dann wird dem "$srcPointer" nicht der Name deiner Extension zugewiesen, welcher im Feld "CType" stehen würde, sondern der Wert "Default". Somit wird dein Flexform auch nicht geladen.

Man könnte diese Hürde überwinden, indem man als Pointer das Feld "CType" setzt und dem Schlüssel im DS-Array kein Komma voranstellt:

```php
$TCA['tt_content']['columns']['pi_flexform']['config']['ds'][$_EXTKEY.'_pi1'] = 'FILE:EXT:'.$_EXTKEY.'/flexform_ds.xml';
$TCA['tt_content']['columns']['pi_flexform']['config']['ds_pointerField'] = 'CType';
```

Allerdings wird von TYPO3 vorausgesetzt, dass das Feld, welches die Flexform-Daten enthält auch vom Typ "flex" ist, was für das Feld "CType" nun mal leider nicht zutrifft.

Daher vielen Dank an das TYPO3-Core Team für die Implementierung der verbesserten Handhabung des "ds_pointerField".

Die einzig funktionierende Lösung für TYPO3 vor Version 4.2 ist ein eigenes Feld in der Tabelle "tt_content". Nennt es einfach "pi_flexform_CType" und gebt ihm folgende Konfiguration:

```php
$myNewFleyField = array(
  'pi_flexform_CType' => array(
    'exclude' => 1,
    'label'   => 'LLL:EXT:cms/locallang_ttc.php:pi_flexform',
    'config'  => array(
      'type'     => 'flex',
      'ds'	 => array(
        'default'   => 'FILE:EXT:'.$_EXTKEY.'/flexform_ds.xml',
      )
    )
  )
);
```

Anschließend das neue Feld noch zum TCA hinzufügen und die Felder für eigene Datensätze konfigurieren:

```php
t3lib_div::loadTCA('tt_content');
t3lib_extMgm::addTCAcolumns('tt_content', $myNewFleyField, 1);
$TCA['tt_content']['types'][$_EXTKEY.'_pi1']['showitem'] = 'CType;;4;button,hidden,1-1-1, header;;3;;2-2-2, linkToTop;;;;3-3-3, --div--;LLL:EXT:cms/locallang_ttc.xml:tabs.plugin,pi_flexform_CType;;;;1-1-1, --div--;LLL:EXT:cms/locallang_tca.xml:pages.tabs.access,starttime, endtime, cPos';
```

Hoffe das hilft allen, die Extensions auch für ältere TYPO3-Versionen verfügbar machen wollen.

Beste Grüße

### [#6](https://www.typo3.net/d/80274-flexform-in-einem-totally-new-content-element-vom-type-ctype-verwenden/6) · m.​z.​ · 2009-10-10

Wow, nach gut einem Jahr doch noch eine Lösung.
Darum "liebe" ich dieses so aktive Forum. :D

Ich werde die Lösung von *speedprogs* mal demnächst austesten; denke aber, der Thread kann nun auf *gelößt* gesetzt werden.

Danke an die fleißigen Autoren!  8-)

Matthias

---

Quelle: „Flexform in einem "totally new content Element" vom Type = CType verwenden“, typo3.net, https://www.typo3.net/d/80274-flexform-in-einem-totally-new-content-element-vom-type-ctype-verwenden
Beiträge von Mitgliedern des Forums. Bitte mit Link auf die Diskussion zitieren.
