Joomla! Programmierung/Programmierung/Plugins/Editoren xtd
Inhaltsverzeichnis |
[Bearbeiten] Einen vordefinierten Text in den Editor einfügen
Beispiel 1
Ziel dieses Plugins ist es einen bestimmten, vordefinierten String genau einmal in den im Editor befindlichen Text einzufügen.
In der Praxis wird dies zum Beispiel im Joomla! core Plugin "Readmore" (weiterlesen)ToDo link eingesetzt.
| Dateien im Paket | Dateien installiert |
|---|---|
[Bearbeiten] nafudemo.php
In dieser Datei befindet sich die Klasse unseres Plugins. Der Name der Klasse muss dem Joomla! Schema entsprechen.
plgButton<NAME>
- Die Funktion onDisplay() wird bei der Initialisierung des Editors von Joomla! automatisch aufgerufen. Hier wird das Button Objekt erzeugt.
- In der Funktion onDisplay() wird ebenfalls die Javascript Funktion insertHelloWorld() erzeugt und mittels der Funktion JDocument::addScriptDeclaration() zum <head> Bereich der Seite eingefügt.
Dieser Funktion insertHelloWorld() wird bei einem Klick auf den Button der im Editor befindliche Text übergeben. Die Funktion prüft dann, ob der Tet bereits ein "Hello World" enthält. Ist dies der Fall, wird eine entsprechende Meldung ausgegeben, andernfalls wird ein neues "Hello World" an der Cursorposition eingefügt.
- In der Funktion onDisplay() wird ebenfalls die Javascript Funktion insertHelloWorld() erzeugt und mittels der Funktion JDocument::addScriptDeclaration() zum <head> Bereich der Seite eingefügt.
<?php //-- No direct access defined('_JEXEC') or die('Restricted access'); jimport('joomla.event.plugin'); /** * Erzeugt einen Button der ein <h1>Hello World</h1> einfügt * Ist der String bereits vorhanden, wird eine Meldung ausgegeben */ class plgButtonNafuDemo extends JPlugin { /** * Constructor * * @param $subject * @param $config * @return void */ function __construct(& $subject, $config) { parent::__construct($subject, $config); }//function /** * NafuDEMOButton * @return object The button object to insert */ function onDisplay($name) { //-- Über die JFactory Klasse wird eine Referenz auf das globale JDocument Objekt erstellt. $doc =& JFactory::getDocument(); //-- Das Interface des Editors gibt uns den gesamten im Editor befindenlichen Text zurück. $getContent = $this->_subject->getContent($name); //-- Eine Nachricht wird definiert und übersetzt um sie säter in einer Javscript //-- Alertbox anzuzeigen, falls bereits ein "Hello World" gefunden wurde. $present = JText::_('Hello World already exists', true) ; //-- Die Javascript Funktion die unser "Hello World" ausgibt wird definiert. $js = " function insertHelloWorld(editor) { //-- Hier wird, abhängig vom Editor, die Funktion zum Einlesen des Inhaltes //-- des Editor eingefügt. Zum Beispiel lautet die Funktion im TinyMCE : //-- tinyMCE.activeEditor.getContent(); var content = $getContent if (content.match(/<h1>Hello World<\/h1>/i)) { //-- Es ist bereits ein "Hello World" vorhanden. alert('$present'); return false; } else { //-- Ein neues "Hello World" einfügen. jInsertEditorText('<h1>Hello World</h1>', editor); } }//function "; //-- Javascript dem JDocument Objekt überheben $doc->addScriptDeclaration($js); //-- Das Button Objekt definieren $button = new JObject(); //-- Für "modale" Fenster $button->set('modal', false); //-- Javascript Code der bei einem onclick() Event ausgeführt wird $button->set('onclick', 'insertHelloWorld(\''.$name.'\');return false;'); //-- Der Text welcher auf dem Button angezeigt wird $button->set('text', JText::_('Nafu DEMO')); //-- Die CSS Klasse für den Button //-- Hier kann eine eigene Klasse angegeben werden um ein eigenes Bild einzufügen $button->set('name', 'readmore'); //-- Link (href) für den Button $button->set('link', '#'); return $button; }//function }//class
[Bearbeiten] nafudemo.xml
Die XML Datei dient zur Installation des Plugins in Joomla!
Beachten Sie die Angabe des Typs und der Gruppe:
<install version="1.5" type="plugin" group="editors-xtd">
Es ist weiterhin nötig die Datei anzugeben, die beim Ansprechen des Plugins aufgerufen werden soll.
<filename plugin="nafudemo">nafudemo.php</filename>
<?xml version="1.0" encoding="utf-8"?> <install version="1.5" type="plugin" group="editors-xtd"> <name>Editors Button - Nafu DEMO </name> <author>wiki.joomla-nafu.de</author> <creationDate>2009-Dec-31</creationDate> <copyright>(C) All rights reserved.</copyright> <license>http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL</license> <authorEmail>info@example.com</authorEmail> <authorUrl>http://wiki.joomla-nafu.de</authorUrl> <version>1.0</version> <description>Nafu DEMO Plugin Editors-xtd</description> <languages /> <files> <filename plugin="nafudemo">nafudemo.php</filename> </files> <params /> </install>
[Bearbeiten] Einen Link zu einem Artikel in den Editor einfügen
Beispiel 2
In diesem Plugins wollen wir einen Link zu einem anderen Artikel im Content unserer Site einfügen. Dies geschieht mit Hilfe einer Modalbox über die der Artikel ausgewählt wird.
Wir benutzen dafür eine bereits bestehende Funktion der Komponente com_content. Da diese Funktion zum Erstellen von Menülinks gedacht ist, funktioniert unsere Methode leider nur im Backend. Sie lässt sich aber auch leicht im Frontend realisieren.
| Dateien im Paket | Dateien installiert |
|---|---|
[Bearbeiten] nafulink.php
<?php // no direct access defined( '_JEXEC' ) or die( 'Restricted access' ); jimport('joomla.event.plugin'); /** * Erzeugt einen Button zum anlegen eines Links auf einen anderen Artikel */ class plgButtonNafuDemo extends JPlugin { /** * Constructor * * @param $subject * @param $config * @return void */ function __construct(& $subject, $config) { parent::__construct($subject, $config); }//function /** * NafuLink DEMO Button * @return object The button object to insert */ function onDisplay($name) { //-- Javascript für modal boxen zum <head> Bereich der Seite hinzufügen JHTML::_('behavior.modal'); //-- Über die JFactory Klasse wird eine Referenz auf das globale JDocument Objekt erstellt. $doc =& JFactory::getDocument(); //-- Die Javascript Funktion an welche die com_content die id und den Text des ausgewählten //-- Artikels zurückgibt wird definiert. $js = "function jSelectArticle(id, title, object) { //-- Der einzufügende Link wird definiert linkText ='<a href=\"index.php?option=com_content&view=article&id='+id+'\">'+title+'</a>'; //-- Diese Funktion fügt den Text in den Editor ein jInsertEditorText(linkText, object); //-- Die Modal Box schliessen document.getElementById('sbox-window').close(); }"; //-- Die Javascript Funktion wird dem JDocument Objekt überheben $doc->addScriptDeclaration($js); //-- Mit diesem Link wird die Komponente com_content aufgerufen $link = 'index.php?option=com_content&task=element&tmpl=component&object='.$name; //-- Das Button Objekt definieren $button = new JObject(); //-- Für "modale" Fenster $button->set('modal', true); //-- Link (href) für den Button $button->set('link', $link); //-- Optionen für das modale Fenster $button->set('options', "{handler: 'iframe', size: {x: 600, y: 400}}"); //-- Der Text welcher auf dem Button angezeigt wird $button->set('text', 'NAFU Link'); //-- Die CSS Klasse für den Button //-- Hier kann eine eigene Klasse angegeben werden um ein eigenes Bild einzufügen $button->set('name', 'readmore'); //-- Das Button Objekt wird zurückgegeben return $button; }//function }//class
[Bearbeiten] nafudemo.xml
Die XML Datei ist analog zum vorherigen Beispiel, wobei sich lediglich der Name ändert.