Zum Inhalt springen

Mit PHP TS-Variablen auslesen

Erstellt am 8. September 2005 · 6 Antworten · letzte Antwort am 14. September 2005

Tags: Frage

Major Tom ·

Hoffe der Titel verwirrt nicht.
Ich habe ein PHP Script was an verschiedenen Stellen des Projektes genuzt wird und mit dem PHP-Plugin als PHP-Script Inhaltselement in die Seiten engepflanzt wird. Allerdings nur einmal, die anderen Stellen wo es gebraucht werden, verweisen nur auf den Datensatz, also als Contentelement "Datensatz einfuegen". Damit ich nun fuer dieses Script Parameter uebergeben kann moechte ich den Seiten in die der Datensatz eingefuegt wird eine Typoscript-Variable / Konstante zuordnen, die dann mit PHP ausgelesen wird. Da Seiten keine Constants so wie bei Templates haben, muss ichdas also im Page TSConfiog anlegen.

Wie muss ichdas nun machen, wenn ich eine Variable "Nummer" in die Seite einfuegen und mit PHP auslesen will?

Ich dachte im Page TSConfig einfach
page.Nummer = myVal
aber, wie komme ich dann in PHP da dran?
Hoffe es ist klar was ich meine...

jenses ·

Das PHP-PlugIn kenne ich nicht, ich binde scripts per User / UserInt ein.

Da Seiten keine Constants so wie bei Templates haben, muss ichdas also im Page TSConfiog anlegen.

Daher legst du ein Extension-Template an, da hast du deine Constanten 😉

Variablenübergabe erfolgt so :

page.includeLibs.meinscript = fileadmin/scripts/meinscript.php
page.10 {
	marks.MARKER = USER_INT
	marks.MARKER {
		userFunc = user_meinscript->user_meinscript_main
		variable1 = 1281
		variable2 = {$konstante1}
	}
...

Im Script greifst du dann so auf die übergebenen Variablen zu:

class user_meinscript {
...

	function user_meinscript_main($content,$conf) {
		$variable1 = $conf['variable1'];
		$variable2 = $conf['variable1'];
		...

jenses

Major Tom ·

Okay, darein ien Extension Template zu nehmen hab ich nicht gedacht, so kriege ich meine Constants.

Aber ich fuerchte ich verstehe den Rest nicht so ganz. Zum einen muss ich das Script als Contentelement einbinden, da die Ausgabe an einer bestimmten Stelle erfolgen soll. Das habe ich so realisiert, dass ich im Template festgelegt habe, dass alle inhalte in der Spalte "Links" an Stelle eines MArkers geschrieben werden. Das PHP Script fuege ich nun auf der entsprechenden Seite als Contentelement in die linke Spalte ein.
Das verwendete Plugin ist page_php_content.

Jetzt zu deinem Code:
1. Wozu der Marker?
2. Ich verstehe Zeile 5 so, dass da die Werte der Variablen/Konstanten an eine vordefinierte PHP Funtion der dafuer angelegten Klasse uebergeben wird.
Mein Script ist aber nicht objektorientiert aufgebaut und das umstricken waere auch recht viel aufwand. (Als JAVA Entwickler sträube ich mich gegen die von PHP verwendete Objektorientierung ;-) ). Wie kann ich das dennoch machen?

Meine Idee war einfach die, dass ich in meinem Script eine PHP Variable $var anlege und die mit einem Wert belege, der eben aus TS kommt. Ich dachte ich komme mit solchen Sachen wie $GLOBALS[TSConfig]->Varname oder so irgendwie dran. Werden die Typo-Eigenschaften nicht in irgendeinem PHP Array gehalten?

Gruss,
Tom

jenses ·
Major Tom schrieb

Zum einen muss ich das Script als Contentelement einbinden, da die Ausgabe an einer bestimmten Stelle erfolgen soll.

Aber über den Marker bekommst du doch das Script an genau eine definierte Stelle #paralyzed#

Wie gesagt, php-content-plugin benutze ich nie,
ich mach das immer so wie skizziert.

Du brauchst in deinem PHP-Skript keine Klassen zu haben, du kannst auch direkt eine Funktion aufrufen:

                userFunc = user_meinscript_main

Die Zeile ist der Funktionsaufruf in Typo3,
die beiden nachfolgenden übergeben die Variablen,
die du dann im Script per $conf['variable1'] wieder ausliest.
So wirst du auch nie(oder höchst unwahrscheinlich) das Problem bekommen, zwei Variablen mit gleichem Namen irgendwo rumschwirren zu haben.
Das ist doch eine recht einfache Geschichte.

Einfach mal in die TSRef schauen, da steht alles genauestens erklärt.
Ich habs ja auch kapiert 😉

Major Tom ·

Leider klappt das nicht.
es scheitert bereits daran, dass der Marker scheinbar nicht angesprochen wird.

Ich habe nun im HTML-Template einen Marker ###LEFT### angelegt. Wenn ich mit dem nix anfange wird der auch im generierten Quelltext angezeigt.

Ich habe der entsprechenden Seite auf die das Script soll ein Extension-Template zugefuegt, mit dem o.a. Quellcode, natuerlich an meine Beduerfnisse modifiziert. Keine Veraenderung (Cache natuerlich geleert).

Danach habe ich probiert den Marker einfach nur mit Text zu belegen, auch das war noicht erfolgreich:

Mein Ext-Template sieht so aus:

page.includeLibs.meinscript = fileadmin/php_scripts/random.php
page.10 {
        marks.LEFT = TEXT
        marks.LEFT.value = Hallo 
}

keine Ausgabe, im generierten Quelltext bleibt weiterhin nur der Marker zu sehen.

Zuvor hatte ich folgenden Code, ebenfalls bloss der Marker im Quelltext:

page.includeLibs.meinscript = fileadmin/php_scripts/random.php
page.10 {
        marks.MARKER = USER_INT
        marks.MARKER {
                userFunc = main
                variable1 = 1281
                variable2 = {$konstante1}
        }

Die Funktion main() erzeugt in jedem Fall eine Ausgabe.

In meinem Haupttepmplate fuelleich ich Marker in einem workOnSubpart Block, kann das damit zusammenhaengen?

jenses ·
Major Tom schrieb

In meinem Haupttepmplate fuelleich ich Marker in einem workOnSubpart Block, kann das damit zusammenhaengen?

Vermutlich.
Baue den Marker doch testhalber da ein und rufe die Funktion auf.