Zum Inhalt springen

Daten aus einer Flexform für mehrere FE-Plugins nutzen

Erstellt am 12. Oktober 2006 · 14 Antworten · letzte Antwort am 18. Oktober 2012

Tags: FlexForms, Frage

Nick78 ·

hallo zusammen,

ich habe zwei seiten. auf beiden seiten ist jeweils ein unterschiedliches fe-plugin positioniert. für seite 1 kann ich über eine flexform einige voreinstellungen durchführen. in der pluginklasse greife ich mit

$this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'what_to_display', 'sDEF');

auf ein bestimmtes element der flexform zu.

habe ich die möglichkeit auch aus dem plugin von seite 2 auf genau diese daten zuzugreifen? ich müsste der pi_getFFvalue-methode ja lediglich nur die entsprechende flexform zuweisen. nur wie???

hat jmd eine idee?

1000 dank.
Nick

steffenk ·

$this->cObj->data['pi_flexform'] ist der Inhalt des aktuellen flexform-Feldes in der tt_content-Tabelle (aktueller Datensatz). Man braucht es nur gegen den Inhalt eines anderen Datensatzes auszutauschen.

Nick78 ·

danke,

wenn ich aus plugin eins, für das ich die flexform gebaut habe, den datensatz $this->cObj->data['pi_flexform'] angebe, kann ich sofort im plugin auf die daten zugreifen.

wenn ich in plugin 2 $this->cObj->data['pi_flexform'] als datensatz eingebe, findet sich an dieser stelle ja nichts, da ich für plugin 2 ja keine flexform gebaut habe. ich muss ja nun an dieser stelle definieren, dass ich genau auf die flexform von plugin 1 zugreifen möchte. wie muss ich dann

$this->cObj->data['pi_flexform'] umformen?

oder besser wie kann ich auf einen nicht aktuellen datensatz zugreifen? ich kenne beispielsweise uid und pid der gewünschten flexform. bringt mich das weiter?

Nick78 ·

danke, super!

der zugriff funktioniert. nur eine kleine frage habe ich noch. wenn ich folgendes eingebe:

$row=$this->pi_getRecord(tt_content,'54');   
$flexformConf=$row['pi_flexform'];

bekomme ich die entsprechende flexform zurück. gebe ich sie im frontend aus erscheinen alle vorhandenen werte der flexform. debugge ich sie, bekomme ich die xml-struktur samt inhaltswerte:

debug($flexformConf); // liefert xml struktur
$content.=$flexformConf; // liefert sämtliche werte der flexform
return $content;

ich wollte nun mit pi_getFFvalue gezielt auf bestimmte werte in der xml-struktur zugreifen. dazu ein kleiner ausschnitt aus $flexformConf:

...
<t3flexforms> 
<data> 
<sheet index="sDEF">
<language index="lDEF">
<field index="what_to_display"> 
<value index="vDEF">Basiskenndaten</value> 
</field>
...

möchte ich an die werte von vDEF gelangen, also in diesem fall an Basiskenndaten, würde ich folgendes verwenden:

$this->pi_getFFvalue($flexformConf,'what_to_display','sDEF','lDEF','vDEF');

funktioniert aber leider nicht. weißt du warum?
bis hierhin jedenfalls schonmal vielen dank für deine hilfe steffen!!!

gruß
nick

steffenk ·

ich hab mal nachgeschaut in der typo3/sysext/cms/tslib/class.tslib_pibase.php
Da sieht die Funktion so aus:

function pi_getFFvalue($T3FlexForm_array,$fieldName,$sheet='sDEF',$lang='lDEF',$value='vDEF')	{
		$sheetArray = is_array($T3FlexForm_array) ? $T3FlexForm_array['data'][$sheet][$lang] : '';
		if (is_array($sheetArray))	{
			return $this->pi_getFFvalueFromSheetArray($sheetArray,explode('/',$fieldName),$value);
		}
	}

Also ist das Problem, das er bereits ein Array erwartet. Dieses wird in der initPIflexForm gemacht, so gehts:

$this->cObj->data[$field] = t3lib_div::xml2array($this->cObj->data[$field]);

also musst Du das mit Deinem Inhalt ebenso machen 😉

Php_Diver ·

hallo steffen,

genau was du gelöst hast, brauche ich auch 🙂

allerdings steht im lösungscode:

$this->cObj->data[$field] = t3lib_div:<img src="typo3conf/ext/mm_forum//res/smilies/icon_mad.gif" alt="icon_mad.gif" />ml2array($this->cObj->data[$field]);

nach t3lib_div: steht <img src="typo3conf/ext/mm_forum//res/smilies/icon_mad.gif" alt="icon_mad.gif" /> ??

was muss da wirklich drinstehen?

ich muss die variable "bildbeschreibung" aus einer anderen seite auslesen.

danke dir

LuP ·

Hallo,

Php_Diver schrieb

hat keiner eine idee, was statt dem <img> da stehen muss?

die gesuchte Funktion müsste xml2array() heissen.

VG,
LuP

Php_Diver ·

Hallo LuP,

hmm, dann müsste es ja (ich mach mal nach : ein leerzeichen rein, damit nicht wieder ein img erscheint)

$this->cObj->data[$field] = t3lib_div: xml2array(): xml2array($this->cObj->data[$field]);

lauten, und das ist es nicht

und nur

$this->cObj->data[$field] = t3lib_div:: xml2array($this->cObj->data[$field]);

bringt "Invalid document end"

die Frage ist, wo ich mein db-feld angebe, damit ich nur diesen ausgegeben bekomme.

LuP ·

Hallo,

Php_Diver schrieb
$this->cObj->data[$field] = t3lib_div:: xml2array($this->cObj->data[$field]);

OK

Php_Diver schrieb

bringt "Invalid document end"

Lass mal $this->cObj->data[$field] ausgeben.

VG,
LuP

Php_Diver ·

Hiho

mit:

$uid = 261; // Hier die ID des Elements
$row = $this->pi_getRecord(tt_content,$uid);
$flexformConf = $row['pi_flexform'];

bekomme ich die komplette xml-flex-form

<T3FlexForms>
    <data>
        <sheet index="sDEF">
            <language index="lDEF">
                <field index="bilderliste">
                    <value index="vDEF">0,  bla, bla</value>
                </field>
                <field index="music">
                    <value index="vDEF">fileadmin/templates/musik/01.mp3,fileadmin/templates/musik/02.mp3,fileadmin/templates/musik/03.mp3</value>
                </field>
                <field index="pictures">
                    <value index="vDEF">fileadmin/templates/galerie/bild_1.png,fileadmin/templates/galerie/bild_2.png,fileadmin/templates/galerie/bild_3.png</value>
                </field>
                <field index="bildzitat">
                    <value index="vDEF">Text1
Text2
Text3</value>
                </field>
                <field index="bildbeschreibung">
                    <value index="vDEF">Inspired by Wolfsheim MIX 12/2003 ... usw.

die frage ist jetzt, wie greife ich gezielt (z.B.) auf die inhalte von <field index="bildzitat"> zu?

:-)

LuP ·
Php_Diver schrieb

die frage ist jetzt, wie greife ich gezielt (z.B.) auf die inhalte von <field index="bildzitat"> zu?

$flexformArr = t3lib_div:: xml2array($flexformConf);
$bildZitat = $this->pi_getFFvalue($flexformArr, 'bildzitat', 'sDEF', 'lDEF', 'vDEF');

VG,
LuP