Zum Inhalt springen

TemplaVoila Feld als Parameter an PHP-Funktion mit Typoscript

Erstellt am 16. September 2015 · 5 Antworten · letzte Antwort am 17. September 2015

Tags: TYPO3 4.x, Frage

S4SC-4 ·

Guten Tag allerseits,
ich hoffe ich habe den Thread an der korrekten Stelle im Forum erstellt, ich denke es passt besser zu Typoscript als zu TemplaVoila.

Ich suche seit etlichen Stunden nach einer Lösung für mein Typoscript Problem aber konnte bisher nichts finden, deshalb hoffe ich hier eventuell Hilfe zu bekommen.

Zum Problem:
Ich habe mit TemplaVoila ein neues Datenelement(FCE) angelegt, in dem ein Pfad zu einem Ordner angegeben werden soll.
Dieser Pfad soll als Parameter an eine PHP-Funktion übergeben werden.

Das funktioniert mit statischen Werten (Pfad manuell eingetragen) auch super.
Sobald ich aber dynamisch den Inhalt des TemplaVoila Feldes an PHP übergeben will, funktioniert dies nicht mehr.

Folgend der Auszug des angelegten Feldes "dlfiles" aus TemplaVoila in XML:

			<dlfiles type="array">
				<tx_templavoila type="array">
					<title>Files</title>
					<sample_data type="array">
						<numIndex index="0"></numIndex>
					</sample_data>
					<eType>input</eType>
					<TypoScript>
					
10 = TEXT
10.field = dlfiles

20 = USER_INT
20 {
	userFunc = user_linkFiles
	includeLibs = fileadmin/templates/scripts/filelink.php
	a.value.data = dlfiles
}
					</TypoScript>
					<proc type="array">
						<HSC>0</HSC>
						<stdWrap></stdWrap>
						<int>0</int>
					</proc>
					<preview></preview>
				</tx_templavoila>
				<TCEforms type="array">
					<label>Files</label>
					<config type="array">
						<type>input</type>
						<size>48</size>
						<eval>trim</eval>
					</config>
				</TCEforms>
			</dlfiles>

Bei "10" funktioniert der Zugriff auf den Inhalt des Feldes "dlfiles"... Dort gibt er den Pfad korrekt auf der Webseite aus.

Bei "20" wird die Variable a aber leider nicht mit dem Inhalt des dlfiles-Feldes gefüllt, sondern es wird einfach nur der text
"dlfiles" ausgegeben.

Habe schon viele Dinge ausprobiert aber bekomme es nicht hin.
Ist dies überhaupt an der Stelle möglich?
Falls nein, wie kann ich es sonst lösen, das eine PHP-Funktion aufgerufen wird welche automatisch als Parameter den im Backend angelegten Pfad übergeben bekommt?

Vielen vielen Dank im Voraus für jegliche Hilfe.

Liebe Grüße,
Sascha

S4SC-4 ·

Zur Info:
Auch wenn ich es mit "20.field = dlfiles" versuche und in PHP per $conf['field'] darauf zugreife, erhalte ich nur den Text "dlfiles" und nicht den im Backend hinterlegten Wert.

jenses ·
S4SC-4 schrieb

Zur Info:
Auch wenn ich es mit "20.field = dlfiles" versuche und in PHP per $conf['field'] darauf zugreife, erhalte ich nur den Text "dlfiles" und nicht den im Backend hinterlegten Wert.

... in PHP müßte es dann ja auch $conf['20'] lauten

S4SC-4 ·

... in PHP müßte es dann ja auch $conf['20'] lauten

Da kommt "Null" raus.
Wenn ich das richtig verstanden habe sind wir an der Stelle im PHP in 20 "drin", weil wir PHP von 20 aus aufrufen. Auf 10 könnte ich zum Beispiel nicht zugreifen.

Deswegen kann ich mit $conf['field'] dann auf das field von 20 zugreifen.

Die Auflösung des "dlfiles"-Feldes wird so anscheinend nicht funktionieren, dazu müsste 20 = TEXT sein und nicht 20 = USER_INT.

Hat vielleicht jemand noch eine Idee?

Liebe Grüße

Edit: ÜBrigens ist es Typo 4.6.3.

Chrissli ·

Ich weiß jetzt nicht, wie DCE funktioniert, aber wenn das analog zu den anderen USER-Objecten ist, dann kann so meines wissens nach auch dlfiles nicht aufgelöst werden, ausser evtl als Text.

10 = TEXT
10.field = dlfiles
 
20 = USER_INT
20 {
	userFunc = user_linkFiles
	includeLibs = fileadmin/templates/scripts/filelink.php
	a.value.data = dlfiles
}

Zugreifen würdest du auf den Wert in diesem Fall so:

function user_linkFiles($content,$conf) {
  $dlfiles = $conf['a.']['value.']['data'];
}

Aber dann steht da in $dlfiles nur der String "dlfiles". Damit da was halbwegs sinnvolles drin steht müsste der Wert z.b. mit cObjGetSingle gerendert werden. Funktioniert denn ein Funktionsaufruf ohne Klasse aktuell noch?
Wie gesagt, mit DCE kann sich das natürlich auch anders verhalten, dann nehme ich alles zurück.

S4SC-4 · · Beste Antwort

Genau, hatte auf die Variable a in PHP zugegriffen wie du es geschrieben hast, da kam "dlfiles" wieder als Text.

Ich habe es nun doch lösen können...
Mit var_dump($this) habe ich das Klassenobjekt ausgelesen. Im data-Array war mein Feld vorhanden und korrekt gefüllt, musste dann nur noch rausfinden wie ich in PHP darauf zugreifen kann.

Habe es dann so gemacht:

$path = $this->cObj->data['dlfiles'];

Und das gibt mir den gerenderten Wert aus dem Backend.
Eigentlich total simpel, aber wenn noch die Erfahrung fehlt ist es dann doch gar nicht mal so einfach. :-)

Ich danke Dir trotzdem für deine Hilfe !

Liebe Grüße,
Sascha