API editeur : Différence entre versions
(→API pour implémenter un éditeur) |
m (→API pour implémenter un éditeur) |
||
| Ligne 34 : | Ligne 34 : | ||
<pre> | <pre> | ||
| + | include_once $GLOBALS['babInstallPath']."utilit/editorincl.php"; | ||
| + | |||
$editor = new bab_contentEditor($uid); | $editor = new bab_contentEditor($uid); | ||
$editor->setRequestFieldName('textarea_name'); | $editor->setRequestFieldName('textarea_name'); | ||
Version du 12 octobre 2007 à 13:48
Sommaire
Fonctions à remplacer
bab_editor($content, $editname, $formname, $heightpx=300, $what=3)
cette fonction retourne du html
bab_editor_record(&$str)
Cette fonction est appelée au moment de la récupération des données soumises par l'éditeur
bab_replace_ref(&$str)
cette fonction est appelée au moment de l'affichage du texte enregistré par l'éditeur.
API pour implémenter un éditeur
syntaxe utilisée dans le nom des fonctions :
- Editor : le html de l'éditeur
- Content : le contenu à stoquer dans la base
- Html : le contenu translformé en html pour l'affichage
Pour le HTML nécessaire à l'éditeur, un objet sera utilisé,
Pour afficher l'éditeur au moment de la modification d'un texte :
include_once $GLOBALS['babInstallPath']."utilit/editorincl.php";
$editor = new bab_contentEditor($uid);
$editor->setRequestFieldName('textarea_name');
$editor->setContent($content);
$editor->setParameters(array('height' => 300));
$editor_html = $editor->getEditor();
setRequestFieldName est optionnel, il permet de définir le nom du champ posté, si la méthode n'est pas appelée, $uid est utilisé comme nom dans le html
Avant d'enregistrer dans la base :
$editor = new bab_contentEditor($uid);
$editor->setRequestFieldName('textarea_name');
$content = $editor->getContent();
$format = $editor->getFormat();
Pour afficher du contenu qui a été enregistré avec l'éditeur :
$editor = new bab_contentEditor($uid); $editor->setContent($content); $html = $editor->getHtml();
Pour chaque éditeur, un enregistrement doit être ajouté sur cet événement :
bab_eventEditors
include_once $GLOBALS['babInstallPath']."utilit/eventincl.php";
bab_addEventListener('bab_eventEditors', 'xxx_getEditorDetails', 'xxx.php');
Il faut prévoir une fonction qui permet d'identifier l'éditeur :
function xxx_getEditorDetails($event) {
$event->addEditor($uid, 'Editor label', 'Editor description');
}
Pour les fonctions externes qui insère du html dans l'éditeur, chaque fonction doit s'inscrire sur cet événement :
bab_eventEditorContentToHtml cet événement sera appelé au moment de l'affichage de la popup avec les liste des fonction qui permettent d'insérer du html dans l'éditeur, s'enregistrer sur cet événements permet d'ajouter des fonction comme l'insertion d'un fichier du gestionnaire de fichier ou une fiche annuaire.
API pour créer un module éditeur
Des événements serons définis pour permettre de fournir un éditeur à partir d'un module :
bab_eventEditorContentToEditor permet de créer le template HTML de l'éditeur, cet événement sera appelé par $editor->getEditor()
bab_eventEditorRequestToContent cet événement sera appelé par $editor->getContent()
bab_eventEditorContentToHtml cet événement sera appelé par $editor->getHtml()
Création d'un module ovidentia qui propose un éditeur WYSIWYG
Les modules peuvent fournir un éditeur pour les formulaire de modification du contenu du noyau et des autres modules, il faut obligatoirement traiter les 3 événements de la gestion des éditeurs afin que la gestion du html soit sécurisée.
Il est possible d'effectuer des action spécifiques en fonction du paramètre "uid" de l'éditeur. Cette fonctionnalité est optionnelle.
pré requis pour qu'un éditeur soit compatible avec ovidentia
- Ajout d'un bouton personnalisé qui appelle du javascript (ouverture d'une popup ovidentia)
- Possibilité de récupérer le html sélectionné par API au moment du click sur le bouton
- Possibilité d'insérer du html à la place de la sélection par API
- Le code récupéré doit être transformable en XHTML 1.0 transitional
- la hauteur de la textarea doit être paramétrable en pixel
Gestion des éditeur
lors de l'installation du module, il faut enregistrer les événements de notification pour que le module soit prévenu lors des actions effectuées sur les différentes implémentations de l'éditeur.
include_once $GLOBALS['babInstallPath']."utilit/eventincl.php";
bab_addEventListener('bab_eventEditorContentToHtml', 'fcke_contentToHtml', 'addon/fckeditor/events.php', 'fckeditor');
bab_addEventListener('bab_eventEditorRequestToContent', 'fcke_requestToContent', 'addon/fckeditor/events.php', 'fckeditor');
bab_addEventListener('bab_eventEditorContentToHtml', 'fcke_contentToHtml', 'addon/fckeditor/events.php', 'fckeditor');
Lors de chaque appel d'une fonction événementielle, un paramètre sera envoyé contenant les information de l'éditeur, c'est l'objet bab_editor qui sera inclu dans l'objet de l'événement déclenché. Le module aura accès à ces informations :
événement bab_eventEditorContentToHtml :
- uid : identifiant unique de l'éditeur en chaine de caractère, par exemple : "bab_article_head" pour l'introduction d'un article
- request_field_name : nom du champ html
- height : la hauteur demandée pour la case d'édition en pixel
- content : contenu à modifier
la variable output_editor devra être renseignée lors de cette action
événement bab_eventEditorRequestToContent :
- uid
- request_field_name : nom du champ html
la variable output_content devra être renseignée lors de cette action
événement bab_eventEditorContentToHtml :
- uid
- content : contenu à afficher
La variable output_html devra être renseignée lors de cette action
Récupérer la liste des instances de l'éditeur
Partout ou l'éditeur est utilisé, le nom de l'éditeur à été inscrit dans l'événement bab_eventEditors, pour récupérer la liste des éditeurs, il faut créer un object d'événement :
class bab_eventEditors extends bab_event {
function addEditor($uid, $name, $description) {
}
}
$event = new bab_eventEditors();
bab_fireEvent($event);