Rendern einer Eingabe innerhalb eines Plugins

$out=$this->cObj->parseFunc($data,$this->conf['parser.']);
$out=$this->cObj->parseFunc($data,$GLOBALS['TSFE']->tmpl->setup['lib.']['parseFunc_RTE.']);

 

im Typoscript muss dazu folgendes stehen:

 

plugin.tx_<myextension>_pi1.parser < lib.parseFunc_RTE

 

 

class.tslib_pibase.php

 

/**
 * Will process the input string with the parseFunc function from tslib_cObj based on configuration set in "lib.parseFunc_RTE" in the current TypoScript template.
 * This is useful for rendering of content in RTE fields where the transformation mode is set to "ts_css" or so.
 * Notice that this requires the use of "css_styled_content" to work right.
 *
 * @param	string		The input text string to process
 * @return	string		The processed string
 * @see tslib_cObj::parseFunc()
 */
function pi_RTEcssText($str)	{
	$parseFunc = $GLOBALS['TSFE']->tmpl->setup['lib.']['parseFunc_RTE.'];
	if (is_array($parseFunc))	$str = $this->cObj->parseFunc($str, $parseFunc);
	return $str;
}

 

RESULT: you can do it like this:

 

$out=$this->pi_RTEcssText($data);

 

 

Das funktioniert aber nur wenn das Include Static "CSS Styled Content (css_styled_content)" eingebunden ist.

Nur mit "content (default)" muss man sich die parseFunc selber holen:

 

entweder nur über typoscript (irgendwo im Setup):

 

lib.parseFunc_RTE < styled.content.parseFunc

 

oder explizit im Code:

 

$parseFunc = $GLOBALS['TSFE']->tmpl->setup['styled.']['content.']['parseFunc.'];
if (is_array($parseFunc)) {
	$out = $this->cObj->parseFunc($data, $parseFunc);
} else {
	$out=$data;
}

 

 

TypoScript im PHP ausführen

manchmal hat man eine Lösung in TypoScript und möchte sie aber im PHP verwenden (zb. wenn man etwas im Typoscript konfiguriert und jetzt irgendwo einbauen möchte).

Das erste Beispiel: stdWrap:

 

$wrappedOutput = $this->cObj->stdWrap($value, $wrapConf);

oder in extbase-Extensions ($this->cObj gibt es normalerweiese nicht bei extbase):

$wrappedOutput = $GLOBALS['TSFE']->cObj->stdWrap($value, $wrapConf);

 

siehe dazu auch der Umgang bei HTML-Templates

 

Weiss man genau welches TSO man erzeugen möchte kann man es direkt aufrufen (z.B. s.u.)

$img=$this->cObj->IMAGE($ts['img.']);

 

 

Wenn man aber die Konfiguration ganz dem Admin überlassen möchte muss man hier flexibel bleiben:

// allgemein:
$output = $this->cObj->cObjGetSingle($TSO_name,$config);
// bzw. selber konfiguriert:
$ts['10'] = 'IMAGE';
$ts['10.']['file'] = 'fileadmin/bspl.jpg';
//  :
$output = $this->cObj->cObjGetSingle($ts['10'], $ts['10.']);
// oder ganz aus dem angelieferten Typoscript:
$output = $this->cObj->cObjGetSingle($conf['feld'], $conf['feld.']);

 

 

Rendern eines Content-Elmentes innerhalb einer Extension

ein oder mehrere Contentelemente (Einträge in tt_content) kann man ganz einfach wie folgt rendern:

 

$tt_content_conf = array('tables' => 'tt_content'
                        ,'source' => $uidlist
			,'dontCheckPid' => 1
			);
$content .= $this->cObj->RECORDS($tt_content_conf);

 

wobei in $uidlist die Komma-getrennte Liste der Contentelemente ist, die gerendert werden sollen.

 

ACHTUNG das Ganze funktioniert aber nicht wenn eines der zu rendernden Contentelemente ein USER_INT / COA_INT o.ä., also ungecachtes Element, ist.

 

Rendern des aktuellen Contentelementes

möchte man das im Speicher modifizierte(!) Contentlement rendern kann man natürlich nciht auf die Datenbak zugreifen, da sich die Änderungen ja nur im Speicher befinden. hier muss man das Rendern selber kontrollieren. Das ganze ist natürlich für extensions, die auf einem Std-CE aufbauen und über weitere Parameter die Daten dynamisch manipulieren und anschließend ein Original-Rendering haben möchten.

ein Beispiel mit dem Image-CE:

$data = $data = $this->cObj->data; // kopiere das aktuelle CE
// hier wird $data modifiziert
$this->cObj->start($data, '_NO_TABLE');
$renderObjName = '<tt_content.image.20';	// als was rendern? hier: als USER  (aus image (ohne header!))
$renderObjConf = $GLOBALS['TSFE']->tmpl->setup['tt_content.']['image.']['20.'];	// und die dazugehörige Konfiguration
$retval = $this->cObj->cObjGetSingle($renderObjName, $renderObjConf);

 

 

Bilder

Bilder muss man nicht selber skalieren. Das nimmt einem TYPO3 ab.

(hier werden die Daten direkt aus dem Contentelement ausgelesen (zb. für FE-Plugin des Typs "(x) Add as a totally new Content Element type")

 

$imgpath='uploads/pics/';
$ts['img']='IMAGE';
$ts['img.']['file']=$imgpath.$this->cObj->data['image'];
$ts['img.']['format']='jpg';
$ts['img.']['altText']=$this->cObj->data['altText'];
$ts['img.']['titleText']=$this->cObj->data['titleText'];
if ($this->cObj->data['imagewidth']) {
	$ts['img.']['file.']['maxW']=$this->cObj->data['imagewidth'];
}
$img=$this->cObj->IMAGE($ts['img.']);

Bilder II

Etwas komplizierter ist es wenn man Bilder hat und dort Text einblenden möchte, zb. der Submit-Button, der in jeder Sprache anders beschriftet ist:

 

//get individual text for button:
$buttontext=$this->pi_getLL('submit');

$buttonimage='fileadmin/images/blank_button.gif';
$size=getimagesize($buttonimage);	// get size of background-image

// define the whole Image
$ts['img']='IMAGE';	//optional
$ts['img.']['file']='GIFBUILDER';		
$ts['img.']['file.']['format']='gif';
$ts['img.']['file.']['XY']=$size[0].','.$size[1];	// use original size
$ts['img.']['file.']['altText']=$buttontext;
$ts['img.']['file.']['titleText']=$buttontext;

// insert background-image
$ts['img.']['file.']['1']='IMAGE';
$ts['img.']['file.']['1.']['file']=$buttonimage;

// insert text
$ts['img.']['file.']['10']='TEXT';
$ts['img.']['file.']['10.']['text']=$buttontext;
// style textappearance
$ts['img.']['file.']['10.']['fontSize']='12';
$ts['img.']['file.']['10.']['fontFile']='fileadmin/fonts/arial.ttf';
$ts['img.']['file.']['10.']['fontColor']='#666666';
$ts['img.']['file.']['10.']['offset']='22,14';

//render to img-tag:
$img=$this->cObj->IMAGE($ts['img.']);

Bei den letzten Beispielen ist es auch wichtig den Zusammenhang zwischen Typoscript und PHP-Arrays zu kennen. Dann erkennt man auch das zugrunde liegende TypoScript zu den PHP-Konfigurationen, die eben nichts anderes sind als ein Nachbau des Typoscripts. Hier nochmal als Beispiel:

 

Typoscript:

img = IMAGE
img.file = GIFBUILDER
img.file.format = png
img.file.XY = 300,200
img.file.altText = mypic
img.file.1 = IMAGE
img.file.1.file = fileadmin/images/mypic.jpg
img.file.10 = TEXT
img.file.10.text = watermark
img.file.10.fontSize = 12
img.file.10.fontFile = fileadmin/fonts/arial.ttf
img.file.10.fontColor = #666666
img.file.10.offset = 22,14

 

PHP:

$ts['img']='IMAGE';
$ts['img.']['file']='GIFBUILDER';		
$ts['img.']['file.']['format']='png';
$ts['img.']['file.']['XY']='300,200';
$ts['img.']['file.']['altText']='mypic';
$ts['img.']['file.']['1']='IMAGE';
$ts['img.']['file.']['1.']['file']='fileadmin/images/mypic.jpg';
$ts['img.']['file.']['10']='TEXT';
$ts['img.']['file.']['10.']['text']='watermark';
$ts['img.']['file.']['10.']['fontSize']='12';
$ts['img.']['file.']['10.']['fontFile']='fileadmin/fonts/arial.ttf';
$ts['img.']['file.']['10.']['fontColor']='#666666';
$ts['img.']['file.']['10.']['offset']='22,14';

 

Oder nochmal jeweils komprimierter geschrieben:

 

Typoscript:

img = IMAGE
img {
	file = GIFBUILDER
	file {
		format = png
		XY = 300,200
		altText = mypic
		1 = IMAGE
		1.file = fileadmin/images/mypic.jpg
		10 = TEXT
		10 {
			text = watermark
			fontSize = 12
			fontFile = fileadmin/fonts/arial.ttf
			fontColor = #666666
			offset = 22,14
		}
	}
}

 

PHP:

$ts = array(
	'img' => 'IMAGE',
	'img.' => array(
		'file' => 'GIFBUILDER',
		'file.' => array(
			'format' => 'png',
			'XY' => '300,200',
			'altText' => 'mypic',
			'1' => 'IMAGE',
			'1.' => array(
				'file' => 'fileadmin/images/mypic.jpg',
			),
			'10' => 'TEXT',
			'10.' => array(
				'text' => 'watermark',
				'fontSize' => '12',
				'fontFile' => 'fileadmin/fonts/arial.ttf',
				'fontColor' => '#666666',
				'offset' => '22,14',
			)
		)
	)

 

Gerade im letzten Beispiel sollte besonders der Unterschied von Objekt und Objekt-Eigenschaften klar werden.

'img.file.10' bzw. '$ts['img.']['file.']['10']' ist ein ganz anderes Array-Element als

'img.file.10.' bzw. '$ts['img.']['file.']['10.']'. Der kleine Punkt macht einen Unterschied!

 

Weitere Informationen zum Rendering innerhalb von PHP finden sich (in englisch) im TYPO3-Wiki.

 
Ihre aktuelle Seitenauswahl:  
>>>