Zum Inhalt springen

Typoscript in Content-Element

Erstellt am 27. November 2006 · 4 Antworten · letzte Antwort am 28. November 2006

Tags: Frage

Jehu ·

Hallo,

folgendes habe ich vor:

Ein GMENU soll auf verschiedenen Seiten als Kategorien-Auswahl eingeblendet werden und die hierarchisch darunter liegenden Seiten in Form einer Grafik anzeigen.

Damit ich festlegen kann, wo ein solches Menü erscheinen soll (z. B. auch zwischen zwei Text-Content-Elementen) möchte ich das als FE-Plugin realisieren.

Im Plugin soll dann die aktuelle PID ausgelesen werden, sowie das GMENU generiert werden. Ich möchte im Plugin den Typoscript-Code für das Menü festlegen und nur optional im TS-Template.

- Wo bringe ich den TS-Code unter?
- Wie bekomme ich da dynamisch die PID der aktuellen Seite rein?

Danke schonmal

Grüße
Jehu

Bitbull ·

Juhuu, Jehu,

versuche mich mal einigermaßen verständlich auszudrücken. Du fragst:

- Wo bringe ich den TS-Code unter?

Also, streng genommen könntest Du den gesamten TS-Code aus Deiner Extension heraus generieren. Das funktioniert nach dem Schema:

$conf["scedule"] = "";
$conf["scedule"] = "IMAGE";
$conf["scedule."]["file"] = "GIFBUILDER";
$conf["scedule."]["file."]["XY"] = "521,20";
$conf["scedule."]["file."]["backColor"] = "#FFFFFF";

$conf["scedule."]["file."]["5"] = "IMAGE";
$conf["scedule."]["file."]["5."]["file"] = "typo3conf/ext/deine_Extension/res/irgendeinBild.gif";

$conf["scedule."]["file."]["10"] = "TEXT";
$conf["scedule."]["file."]["10."]["text"] = $this->internal['currentRow']['irgendeinFeld'];
$conf["scedule."]["file."]["10."]["fontColor"] = "#333333";
$conf["scedule."]["file."]["10."]["fontFile"] = "fileadmin/fonts/verdana.ttf";
$conf["scedule."]["file."]["10."]["fontSize"] = "9";
$conf["scedule."]["file."]["10."]["offset"] = "4,13";

Auf Deine Frage:

- Wie bekomme ich da dynamisch die PID der aktuellen Seite rein?

Diese Antwort: Wie Du siehst, ist in der Zeile:

$conf["scedule."]["file."]["10."]["text"] = $this->internal['currentRow']['irgendeinFeld'];

auch ein Feldinhalt aus einer (Extension-)Tabelle übergeben worden.

Du solltest natürlich vorher die Übgergabe der Variablen $conf in Deiner Funktion sichergestellt haben. Das geht mit:

$this->conf=$conf;

am Beginn der Funktion.

Wenn Du in Deinem Falle ein grafisches Menü aufbauen (und vielleicht an einen Marker in einem Template Deiner Extension übergeben) willst, kannst Du in das TS-Script einige Basisangaben stellen, die Dir das starre Coden in PHP auflockern. Folgendes Schema ist notwendig:

# Plugin Deine Extension
plugin.tx_deineExtension_pi1{

	# einige hilfreiche Angaben zum Tabellenlayout
	breiteTabelle=100%
	breiteBildZelle=50
	bgColourTabelle1=#EFEFEF
	bgColourTabelle2=#FAF1F1
	cssbreiteFarbTabelleSingle=33%
	cssBeschreibungSingle=artikelSingleView

	# so gehts natürlich auch, das liegt an Dir bzw.
	# Deinem Template

	cssFarbTabelle=width="100%" bgcolor="#EFEFEF"

	# So soll ein Artikelbild formatiert werden.
	# Du kannst später via PHP andere Funktionen hinzufügen
	# bzw. die bestehenden verändern.
	bild {
		file {
			maxW = 50
			maxH = 50
		}
	}

}

Auslesen kannst Du die so codierten TS-Bausteine in etwa so:

// Bild checken & ggf. verkleinern
$conf["bild."]["altText"]=$this->pi_getLL('artikelnummer','Artikelnummer')." ".$rowARTIKEL['artikelnummer'];
$conf["bild."]["file"]=$img_pfad.$rowARTIKEL["bild"];

if ($this->cObj->fileResource($img_pfad.$rowARTIKEL["bild"])) {
	$smallPic = $this->cObj->cImage($img_pfad.$rowARTIKEL['bild'], $conf['bild.']);
} else {
	$smallPic = $this->cObj->cObjGetSingle($conf["bild_default"], $conf["bild_default."]);
}

Solltest Du jetzt aber versuchen, aus Deiner Extension heraus Marker in einem Haupttemplate anzusprechen, wünsche ich Dir viel Glück mit der Bitte verbunden, mich zu informieren, wie Dein Lösungsweg aussieht. Siehe auch:

#46853

Hoffe, ich hab ansatzweise den Punkt getroffen.

Grüßle

Bitbull

Jehu ·

Wow, danke. Sehr ausführlich. Und den Punkt genauestens getroffen. 🙂
Hab im "Handbuch für Entwickler" nix dazu gefunden, ob und wie man TS-Code in einer Extension "generiert", also sowas:

$conf["scedule"] = "";
$conf["scedule"] = "IMAGE";
$conf["scedule."]["file"] = "GIFBUILDER";
$conf["scedule."]["file."]["XY"] = "521,20";

Eigentlich will ich keine Marker des Haupttemplates ansprechen.
Werde mein Ergebnis aber trotzdem hier posten, bzw ins TER stellen.

Jehu ·

o.O

Leider bekomme ich das nicht hin. Aber mittlerweile glaube ich auch, dass die Idee der Falsche Weg war.
Werde lieber die Konfiguration über das TS-Setup machen und dann das Kategorien-Menü aus der DB zusammenbasteln, statt GMENU zu verwenden.

Gruß
Jehu

Jehu ·

Sooooo.

Habe es nun mit der Extension "tscobj" gelöst. Damit kann man TS-Objekte als Content-Elemente einfügen.

Also in meinem Template das GMENU definiert:

lib.katMenu = HMENU
lib.katMenu {
    
  special = directory
  1 = GMENU
  1 {
    
....

      }
    }

Und dann mit dem Plugin "tscobj" an beliebiger Stelle als Content eingefügt. Schon werden die Unterseiten ausgelesen und als grafisches Menü angezeigt.

🙂

Grüße
Jehu