Zum Inhalt springen

tca type flex in eigener Extension auslesen

Erstellt am 27. Januar 2011 · 10 Antworten · letzte Antwort am 5. Februar 2011

Tags: TCA, FlexForms, Frage

webcheck ·

Hi zusammen,

ich hoffe ihr könnt mir helfen. Und zwar schreibe ich gerade eine eigene Extension, die auch Flexforms benutzt.
Nun suche ich nach einer Möglichkeit diese Flexformeinträge auszulesen.
Dabei verwende ich 2 verschiedene Flexform xmls. Zum einen eine, die angezeigt wird, wenn ich mein FE Plugin einfüge. (DIE BEKOMME ICH AUSGELESEN)
Die andere Flexform ist in meiner tca konfiguration. Die bekomme ich nicht ausgelesen und weiß nicht, wie ich da ran gehen soll...

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

Das ist meine erste Flexform xml

'angebotehotel' => array (		
			'exclude' => 0,		
			'label' => 'LLL:EXT:hb_hotels/locallang_db.xml:tx_hbhotels_hotels.angebotehotel',		
			'config' => array (
				'type' => 'flex',
				'ds' => array (
					'default' => 'FILE:EXT:hb_hotels/flexform_tx_hbhotels_hotels_angebotehotel.xml',
				),
			)
		),

Meine zweite und die Werte möchte ich gerne in meiner Detailview auslesen.

Über Hilfen wäre ich euch sehr dankbar.

lg

Kevin

Toronto ·

Um den Dateinamen zu erhalten, nimm doch mal:

t3lib_div::loadTCA(DEINE_TABELLE);
$fileName = $GLOBALS['TCA'][DEINE_TABELLE]['columns']['angebotehotel']['config']['ds']['default'];

Um (dann) ein array zu erhalten:

$xmlFile= t3lib_div::getFileAbsFileName(substr($fileName,5));
if (@is_file($xmlFile)) {
 $xmlString = t3lib_div::getUrl($xmlFile);
 $xmlArr = t3lib_div::xml2array($xmlString);
}

Ok, das emoticon muss raus, das haut mir hier der parser rein. Statt dessen ein : und ein x

webcheck ·
Toronto schrieb

Um den Dateinamen zu erhalten, nimm doch mal:

t3lib_div::loadTCA(DEINE_TABELLE);
$fileName = $GLOBALS['TCA'][DEINE_TABELLE]['columns']['angebotehotel']['config']['ds']['default'];

Um (dann) ein array zu erhalten:

$xmlFile= t3lib_div::getFileAbsFileName(substr($fileName,5));
if (@is_file($xmlFile)) {
 $xmlString = t3lib_div::getUrl($xmlFile);
 $xmlArr = t3lib_div::xml2array($xmlString);
}

Ok, das emoticon muss raus, das haut mir hier der parser rein. Statt dessen ein : und ein x

Jetzt muss ich doch nochmal kurz nachhaken, steh einfach auf dem Schlauch 🙁

Habe jetzt meine exttables.php folgendermaßen erweitert

t3lib_div::loadTCA('tx_hbhotels_hotels');
$fileName = $GLOBALS['TCA']['tx_hbhotels_hotels']['columns']['angebotehotel']['config']['ds']['default'];
$xmlFile= t3lib_div::getFileAbsFileName(substr($fileName,5));
if (@is_file($xmlFile)) {
 $xmlString = t3lib_div::getUrl($xmlFile);
 $xmlArr = t3lib_div::ml2array($xmlString);
}

Nun bin ich wohl aber einfach unfähig nachher die xml in meine class.tx_hbhotels_pi1.php auszulesen....

Hättest mir vielleicht nochmal nen kleinen Tipp??

liebe Grüße

Kevin

webcheck ·
Toronto schrieb

Verwende den Code in der class.tx_hbhotels_pi1.php.

Hey Toronto,

jetzt wirst du wahrscheinlich gleich die Krise bekommen....

Hab den COdeschnipsel nun in meiner class.tx_hbhotels_pi1.php verwendet.
Habe mir auch mal das komplette Array mit print_r anzeigen lassen. Wie komme ich jetzt aber an die einzelnen Werte ran?!? Gibts es ja schon irgendwelche Vorgaben um mir das Array ähnlich wie man sonst mit Flexforms umgeht auszugeben ($this->lConf['blabla'])

lg

Kevin

ÁndreMansfeld ·

Hallo,
ich hänge mich hier mal dran, denn ich habe ein Problem mit dem Auslesen unter T3 Version 4.5.

Ich habe ein ältere (eigene) Extension in mein neues System eingebunden.
Leider erhalte ich keinerlei Ausgaben aus dem TCA.
Ich verwende meine Funktion auch in älteren T3 Versionen ohne Probleme.
hat sich da bezgl. der Zugriffe vielleicht etwas geändert.
Evt. die includes o.ä.?

Ich versuche mit folgendem Code das TCA meiner Extension auszulesen.

//$GLOBALS['TSFE']->includeTCA();
t3lib_div::loadTCA('tx_pckids_eintrag');
//$hauptkategorie = $GLOBALS['TCA']['tx_pckids_eintrag']['columns']['config']['items'];;<- ist Mehrfachauswahlfeld
oder auch
$hauptkategorie = $GLOBALS['TCA']['tx_pckids_eintrag']['columns']['entryname']; <- sind nur die Namen

Auch wenn ich $GLOBALS['TSFE']->includeTCA() mit dazuschreibe, ich bekomme keinerlei Daten.
SQL Error -> nichts
Debug auf $hauptkategorie -> leer
print_r auf $hauptkategorie -> leer

Jemand eine Idee?

ÁndreMansfeld ·

Bin etwas weiter!
Habe mich Schritt für Schritt vorgearbeitet.
Wenn ich meine TCA Abfrage etwas kürze, dann erhalte ich mit dem debug darauf einige Ausgaben.

Nach $GLOBALS['TCA']['tx_pckids_eintrag']['columns'] werden mir dann alle Tabellenspalten angezeigt.
Der nächste Schritt wäre jetzt die Spalte anzugeben, also "entryname" an die TCA Abfrage zu hängen.
Die Ausgabe teilt sich dann auf exclude, label, config auf.
Die Einträge für Label wären ja jetzt meine gewünschten Ausgaben.
Leider kommt hier aber kein Array zurück, sondern nur

| debug ||LLL:EXT:pckids/locallang_db.xml:tx_pckids_eintrag.entryname|

Ab hier brauche ich einen Schubser in die richtige Richtung #paralyzed#

Vielen Dank

Toronto ·

Der abgefragte Wert ist ein String und dieser wird auch ausgegeben.
Aber wenn es um Label im FE-Plugin geht: Warum verwendest Du dafür nicht die zu Deinem plugin gehörende locallang-Datei und fragst die Werte über die entsprechende Funktion pi_getLL() ab?

webcheck ·

Dürfte ich vlt. nochmal kurz dazwischen fragen, bzgl. meiner Frage etwas weiter oben?
Ich komme einfach nicht weiter 🙁

webcheck ·
Toronto schrieb

Hallo Kevin,

im obigen Beispiel ist $xmlArr ein Array, auf dessen Werte wie bei anderen Arrays auch zugegriffen werden kann.

http://www.php-einfach.de/php-tutorial/php-array.php

Habs jetzt übrigens so gelöst, wie man das mit Flexforms macht, die beim Laden des Plugins schon vorher in der exttables.php konfiguriert werden.

Habe aus dem DB Feld die Flexform in ein Array umgewandelt

$flexangebote = t3lib_div::xml2array($hoteltabelle['angebotehotel']);

und dann einfach die init() Methode, wie man sie sonst benutzt verwendet.

function initdbflex($flex){	
	 		$this->angebote = array(); 		
		 		foreach ( $flex['data'] as $sheet => $data ){
			 		foreach ( $data as $lang => $value ){
						foreach ( $value as $key => $val ){
							$this->angebote[$key] = $this->pi_getFFvalue($flex, $key, $sheet);
						}
					}
				}	
    	}

lg

Kevin