Direkt analog zur Erweiterung bestehender Content Elemente mit neuen Feldern funktioniert das Erstellen eigener Content Elemente. Man hängt sich nur in andere (bzw. weitere) Arrays. Ich orientiere mich im Folgenden an diesem Tutorial, sowie an dieser Erweiterung.
Also, gegeben sei dieselbe Dateistruktur wie für neue Felder, in einem eigenen Modul. In /config/config.php deklariert man sein neues Content-Element:
1 |
array_insert($GLOBALS['TL_CTE']['includes'], 0, array('iFrame' => 'IframeCustom')); |
In /config/database.sql fügt man die gewünschten Datenbank-Felder hinzu:
1 2 3 4 5 |
CREATE TABLE `tl_content` ( `iframe_width` varchar(255) NOT NULL default '', `iframe_height` varchar(255) NOT NULL default '', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; |
In /dca/tl_content.php ergänzt man die neuen Felder und deklariert die Palette:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
// Ergänzen der Palette um iFrames: $GLOBALS['TL_DCA']['tl_content']['palettes']['iFrame'] = 'type,singleSRC,iframe_width,iframe_height;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID,space'; // Hinzufügen der Feld-Konfiguration für iFrames $GLOBALS['TL_DCA']['tl_content']['fields'] = array_merge($GLOBALS['TL_DCA']['tl_content']['fields'], array ( // Source selector; Auswahl aus der Dateiverwaltung; erlaubt nur Dateien, keine Ordner: 'singleSRC' => array ( 'label' => &$GLOBALS['TL_LANG']['tl_content']['singleSRC'], 'exclude' => true, 'inputType' => 'fileTree', 'eval' => array('fieldType'=>'radio', 'files'=>true, 'filesOnly'=>true, 'mandatory'=>true) ), 'iframe_width' => array ( 'label' => &$GLOBALS['TL_LANG']['tl_content']['iframe_width'], 'exclude' => true, 'inputType' => 'inputUnit', 'options' => array('px', '%'), 'eval' => array('mandatory'=>true,'rgxp'=>'alnum', 'tl_class'=>'w50') ), 'iframe_height' => array ( 'label' => &$GLOBALS['TL_LANG']['tl_content']['iframe_height'], 'exclude' => true, 'inputType' => 'inputUnit', 'options' => array('px', '%'), 'eval' => array('mandatory'=>true,'rgxp'=>'alnum', 'tl_class'=>'w50') ), )); |
In languages/de/tl_content.php und analog in languages/en/tl_content.php ergänzt man die referenzierten Texte:
1 2 3 |
$GLOBALS['TL_LANG']['CTE']['iFrame'] = array('iFrame', 'Erzeugt das HTML Element iFrame.'); $GLOBALS['TL_LANG']['tl_content']['iframe_width'] = array('Breite', 'Die Breite des iFrame. Attr.: width'); $GLOBALS['TL_LANG']['tl_content']['iframe_height'] = array('Höhe', 'Die Höhe des iFrame. Attr.: height'); |
Nun kommt die neue Klasse IframeCustom:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
class IframeCustom extends ContentElement { protected $strTemplate = 'ce_iframe_custom'; protected function compile() { $this->Template->src = $this->singleSRC; $this->Template->width = unserialize($this->iframe_width); $this->Template->height = unserialize($this->iframe_height); } public function generate() { if(!strlen($this->singleSRC)) { return '<div>[no file selected]</div>'; } if(!is_file(TL_ROOT . '/' . $this->singleSRC)) { return '<div>[file not found]</div>'; } return parent::generate(); } } |
Und schließlich das Template ce_iframe_custom.tpl:
1 2 3 4 |
<div class="<?php echo $this->class; ?> block"<?php echo $this->cssID; ?><?php if ($this->style): ?> style="<?php echo $this->style; ?>"<?php endif; ?>> <iframe src="<?php echo $this->src ?>" width="<?php echo $this->width['value'].$this->width['unit'] ?>" height="<?php echo $this->height['value'].$this->height['unit'] ?>" title="iframe" scrolling="no"> </iframe> </div> |
Ein Selbstgänger 🙂