Zum Inhalt springen

PHP Code im Template ausführen nicht möglich?

Erstellt am 21. November 2013 · 5 Antworten · letzte Antwort am 25. November 2013

Tags: Templates & Layouts, PHP, TYPO3 4.x, Frage

macmurdock77 ·

Ich habe kein passendes Forum gefunden, deswegen stelle ich meine Frage einfach mal hier, wenn nötig bitte verschieben.

Ich habe meine Template Datei (index.php), in der ich unter anderem Grafiken einbinde. Da meine Seite Mehrsprachig ist möchte ich z.b. für die englische und russische Version der Seite eine andere Grafik einbinden als auf der deutschen.
Ich habe eine Joomla Seite bei der ich genau das gleiche Problem hatte und das habe ich mit einem einfachen PHP Skript gelöst:

<?
									if($_GET['lang']==en) {
										echo "Search & find ...";
									} elseif($_GET['lang']==fr) {
										echo "Chercher &amp; Trouver";
									} else {
										echo "Suchen & finden ...";
									}
								?>

Wenn ich das mit meiner TYPO3 Seite versuche passiert allerdings nichts, der PHP Code wird anscheinend überhaupt nicht ausgeführt.
Ist es nicht möglich mit TYPO3 PHP Bereiche in meiner index.php zu erstellen und dort PHP Skripts auszuführen?
Oder gibt es noch andere Möglichkeiten die Bilder entsprechend für die Sprache auszuwählen? Inhaltselemente kommen nicht in Frage, da ich schon sehr viele auf meiner Seite habe und diese Methode generell viel zu aufwändig wäre, es geht wie gesagt um einfache Grafiken und um einfache Texte wie z.b. der Text im Suchfeld des Suchformulars.

Danke schonmal!

vince ·

Hallo,

das lässt sich am besten mit Typoscript und einem Marker lösen.

Man kann if/else Abfragen auch über Typoscript conditions machen siehe hier:
https://docs.typo3.org/m/typo3/reference-typoscript/main/en-us/Conditions/Index.html

get-parameter lassen sich z.B. so abfragen:

[globalVar = GP:lang=en]
  ...hier den marker füllen für Sprache englisch
[global]
[globalVar = GP:lang=fr]
  ...französich
[global] 
# usw.

PHP-Code direkt in die Template-Datei schreiben geht nicht, weil TYPO3 den Inhalt ausliest und die Marker einsetzt (sofern Du keine extra Template-Engine benutzt).

Gruß,
Vince

macmurdock77 ·

Danke schon mal für die Antwort, ich blicke in der Doku von dir allerdings nicht ganz durch, gibt es ein einfaches Beispiel wie man z.b. verschiedene Bilder mit if Abfragen realisiert?
Und was meinst du genau mit Markern? Ich kenne Marker eigentlich nur von Inhaltselementen, wie sieht so ein Typoscript Marker aus?

vince ·

Hier wird gezeigt, wie man per typoscript Bilder einbindet:
http://wiki.typo3.org/De:TSref/IMAGE

Mit Markern meine ich folgendes:

nehmen wir an, Du hast den Marker ###MARKER### in deinem Template.
Den kannst Du ja dann mit irgendetwas füllen, z.B. mit einem Content-Element

MARKER = CONTENT
...usw..

Es gibt auch den Typ IMAGE, damit lassen sich Bilder einbinden, z.B.

MARKER = IMAGE
MARKER.file = pfad/zum/bild.jpg
MARKER.wrap = <div class="css-klasse">|</div>

Dann könntest Du je nach Sprache (über conditions) das Bild anpassen (jeweils MARKER.file ändern)

Ich hoffe, so war es verständlicher.

Gruß,
Vince

macmurdock77 ·

Danke damit hast du mir schon mal sehr weiter geholfen, das Bild mit dem Marker einzubinden hat auch geklappt, nur die Language Condition will noch nicht so ganz.
Hier mal die Condition und die configs:

config.linkVars = L
config.htmlTag_LangKey = de_DE
config.sys_language_uid = 0
config.language = de
config.locale_all = de_DE
config.defaultLanguageISOCode = DE

config.sys_language_mode = content_fallback
config.sys_language_overlay = hideNonTranslated

[globalVar = GP:L = 1]
	config.linkVars = L
	config.sys_language_uid = 1
	config.language = en
	config.locale_all = en_GB
	config.htmlTag_langKey = en_GB
[global]

[globalVar = GP:L = 2]
	config.linkVars = L
	config.sys_language_uid = 2
	config.language = ru
	config.locale_all = ru
	config.htmlTag_langKey = ru
[global]

config {
	// Global language definitions
	language = de
	locale_all = de_DE.utf8
	htmlTag_langKey = de-DE
	metaCharset = utf-8
        #DOCType setzen auf XHTML trans
        doctype = xhtml_trans
        #erzeugten XHTML code bereinigen
        xhmtl_cleaning = all
        #internet explorer - quirks mode
        [browser = msie]
        config.doctypeSwitch = 1
        [GLOBAL]
 
} // end config

[globalVar = GP:L = 0] 
MARKER = IMAGE
MARKER.file = fileadmin/images/de.jpg
MARKER.wrap = <div class="css-klasse">|</div>
[global]

[globalVar = GP:L = 1] 
MARKER = IMAGE
MARKER.file = fileadmin/images/en.jpg
MARKER.wrap = <div class="css-klasse">|</div>
[global]

[globalVar = GP:L = 2] 
MARKER = IMAGE
MARKER.file = fileadmin/images/ru.jpg
MARKER.wrap = <div class="css-klasse">|</div>
[global]

Es ist egal ob ich [globalVar = GP:L = 0] oder [globalVar = GP:lang=de] benutze, es funktioniert beides nicht.

vince ·

hallo,

also
[globalVar = GP:L=0]

[global]
sollte eigentlich funktionieren.

Eins ist mir in deinem config-Teil aufgefallen: da steht drinn [browser=msie] usw... Conditions dürfen nicht innerhalb von geschweiften Klammern stehen.
Um "Syntax-Fehler" im Typoscript zu finden, kann es helfen in den Typoscript-Object-Browser zu schauen.