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
$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.
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?
ja, z.B so:
$row=$this->pi_getRecord(tt_content,$uid);
$flexformConf=$row['pi_flexform'];
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
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 😉
1000 dank steffen,
wärst du jetzt hier, würde ich dir sofort einen ausgeben!!!
es läuft!!!
gruß
nick
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
hat keiner eine idee, was statt dem <img> da stehen muss?
🙂
Hallo,
Php_Diver schrieb
hat keiner eine idee, was statt dem <img> da stehen muss?
die gesuchte Funktion müsste xml2array() heissen.
VG,
LuP
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.
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
Hallo,
das gibt leider nichts aus
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?
:-)
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