RSS
 

Posts Tagged ‘typoscript’

Typo3 Backend: stdWrap in eigner Funktion nutzen

11 Apr

Um in einen Aufruf einer php-Funktion in einer eigenen Extension das “Schweizer Messer” ‘’stdWrap” nutzen zu können bedarf es einiger – nicht wirklich gut dokumentierter – Kniffe. Beispielsweise ist es sinnvoll, einen Wrap um ein eigenes Feld setzen zu können, ohne dass dies im PHP-Code hardkodiert werden muss, oder ein Template genutzt und geparst werden muss.

Und so funktioniert es.
Wir verwenden im Beispiel ein Typoscript, dass eine eine userFunc aufruft und ”apptitle” als Parameter wrappen soll.

  10 = USER_INT
  10 {
    	userFunc = tx_lpiphone_pi2->getXMLValue
    	apptitle.stdWrap.dataWrap = <apptitle updated="{field:tstamp}">|</apptitle>
  }

Zuerst sucht man sich das entsprechende Element aus dem Konfigurationsarray.

 function FUNCTIONNAME ($content, $conf)    {
		$this->conf=$conf;
		...
 }

nun muss es durch das cObj-Objekt “geschleust” werden und dort dann die stdWrap-Methode aufgerufen werden. Die stdWrap-Mehtode cObj-Objekt nimmt zwei Parameter entgegen: Der erste Parameter ist der Parameter/die Variable auf der der stdWrap angewendet werden soll. Der zweite Parameter ist ein array der die stdWrap Anweisungen enthält (was wir uns gleich aus dem $conf-igurations-Array bauen werden).

Den zweiten Parameter (also die Anweisungen) holen wir uns jetzt aus dem $conf array:

$arrayValueFromConfig = 'apptitle'; //das ist der Parametername aus dem Typoscript
$arrayValueFromConfigPlusPoint = $arrayValueFromConfig."."; //hier fügen wir einen Punkt (".") hinzu damit wir einen Array kriegen!.

$valueToWrap = "Beispielvariable"; // Wer aus dem Phpskript, der per stdWrap verarbeitet werden soll (hier ge-dataWrappt).

Diese so zusammen gebastelten Werte übergeben wir jetzt an die funktion stdWrap vom cObj-Objekt und fügen sie der Variable $content hinzu, damit sie im Frontend angezeigt wird.

 $content .= $this->cObj->stdWrap($valueToWrap, $conf[arrayValueFromConfigPlusPoint]);

Hier noch ein einfacheres Beispiel, was die Verwendung noch etwas veranschaulicht:

$valueToWrap = "hallo";
$wrapAnweisungsArray = array ('case' => 'upper', 'wrap' => '<font size="10"> | </font>');
$content .= $this->cObj->stdWrap($valueToWrap,$wrapAnweisungsArray);

// gibt folgendes aus: <font size="10">HALLO</font>

http://www.pi-phi.de/functions.html
http://www.typo3.net/tsref/functions/stdwrap/
http://wiki.typo3.org/De:TSref/stdWrap

 
 

Typo3: Backend-Felder an die richtige Stelle positionieren

06 Apr

Um im Typo3 Backend selbst erstellte Felder an die richtige Stelle zu positionieren, gibt es nachfolgende Möglichkeit.

Beispiel:

  • Aus welcher Tabelle: ”tt_content”
  • Das (Datenbank-)Feld das eingebunden werden soll ‘tx_lpiphonedisplay_color’
  • In welchen CType soll das neue Feld eingefügt werden: ”lp_iphone_pi1” (hier könnte auch so was stehen, wie ”textpic” oder ”text”).
  • Vor oder nach welchem Feld es eingefügt werden soll: ”before:tx_lpiphone_lp_aditional_items” (fügt das neue Feld vor dem Feld ”tx_lpiphone_lp_aditional_items” ein). Entsprechend ”after:” für nach dem Feld.

In der Datei ”ext_tables.php” werden folgende Zeilen hinzugefügt:


// in $tempColumns wird das Feld erzeugt (sieht bei Euch bestimmt ganz anders aus
// hier werden drei Radobuttons für die Werte 1,2,3 erzeugt
$tempColumns = Array (
	"tx_lpiphonedisplay_color" => Array (
		"exclude" => 1,
		"label" => "LLL:EXT:lp_iphone_display/locallang_db.xml:tt_content.tx_lpiphonedisplay_color",
		"config" => Array (
			"type" => "radio",
			"items" => Array (
				Array("LLL:EXT:lp_iphone_display/locallang_db.xml:tt_content.tx_lpiphonedisplay_color.I.1", "1"),
				Array("LLL:EXT:lp_iphone_display/locallang_db.xml:tt_content.tx_lpiphonedisplay_color.I.2", "2"),
				Array("LLL:EXT:lp_iphone_display/locallang_db.xml:tt_content.tx_lpiphonedisplay_color.I.3", "3"),
			),
		)
	),
);

t3lib_div::loadTCA("tt_content");
t3lib_extMgm::addTCAcolumns("tt_content",$tempColumns,1);

// ### diese Zeile fügt nun Euer neues Feld an die richtige Stelle ein: ###
t3lib_extMgm::addToAllTCAtypes('tt_content','tx_lpiphonedisplay_color','lp_iphone_pi1','before:tx_lpiphone_lp_aditional_items');