Submitted by martin87 on
Bonjour,
Voici une petite explication pour cacher ou afficher tyniMCE au champ prêt et non se contenter d'un affichage sur TOUS les champs d'une page.
Je m'en inspire d'un tutoriel sur le site anglais :
http://drupal.org/node/179462
et de l'aide de Bes' et Webastien sur l'IRC.
La première des choses à faire est d'installer TyniMCE et de le configurer (autoriser un rôle / définir la visibilité ...). Je vous passe les étapes... voici un screencast (en anglais) : https://drupal.org/node/228270
Imaginons maintenant que vous avez un formulaire d'au moins deux champs texte créé avec CCK et TinyMCE s'affiche sur toutes les deux champs (c'est ce qui doit se passer par défaut).
Notre but est d'en enlever tinyMCE sur un des champs... et de le laisser sur autre. Pour le moment, il n'est pas possible de le faire via la configuration de TinyMCE.
Ainsi, je vous propose une solution qui consiste à retoucher la fonction thème :
-
ouvrir dans le fichier du module TinyMCE avec nodepad++ (par exemple) "tinymce.module"
-
Rechercher dans le fichier la fonction :
"function theme_tinymce_theme($init, $textarea_name, $theme_name, $is_running)" (sans les guillemets !) -
Copier la fonction en entier. Attention à bien s'arrêter au bon endroit. La fin ressemble à sa :
// Always return $init
return $init;
} -
Coller cette fonction à la fin de votre fichier template.php qui se trouve dans votre thème. N'oublier pas de la commenter pour la séparer des autres et ne pas vous perdre dans le code.
-
La partie à modifier se situe dans la première partie :
function phptemplate_tinymce_theme($init, $textarea_name, $theme_name, $is_running) {
switch ($textarea_name) {
// Disable tinymce for these textareas
case 'log': // book and page log
case 'img_assist_pages':
case 'caption': // signature
case 'pages':
case 'access_pages': //TinyMCE profile settings.
case 'user_mail_welcome_body': // user config settings
case 'user_mail_approval_body': // user config settings
case 'user_mail_pass_body': // user config settings
case 'synonyms': // taxonomy terms
case 'description': // taxonomy terms
unset($init);
break;
Vous avez du remarquer le commentaire "//Disable tinymce for these textareas" qui signifit "arrêter tinymce pour ces champs textes. Il va falloir donc ajouter nos exceptions sous "case 'description': // taxonomy terms"
Cependant pour trouver la mention qu'il y a entre les guillemets, il faut trouver l'ID du champs. Pour celà je vous invite à utiliser Firebug, un plugin de firefox quasi indispensable pour personnaliser Drupal (selon moi)...
-
avec Firebug, utiliser le mode "inspect" et survoler le formulaire choisit. Relever son ID ... et vous aurez un nom du type : "edit-field-article-0-value" qu'il faut copier.
-
collet cette mention et supprimer la partie "edit-" de l'ID comme suit à la suite des "case 'blabla' :" comme suit :
case 'field-article-0-value': // formulaire article blog
Ainsi le code final sera :
function phptemplate_tinymce_theme($init, $textarea_name, $theme_name, $is_running) {
switch ($textarea_name) {
// Disable tinymce for these textareas
case 'log': // book and page log
case 'img_assist_pages':
case 'caption': // signature
case 'pages':
case 'access_pages': //TinyMCE profile settings.
case 'user_mail_welcome_body': // user config settings
case 'user_mail_approval_body': // user config settings
case 'user_mail_pass_body': // user config settings
case 'synonyms': // taxonomy terms
case 'description': // taxonomy terms
case 'field-article-0-value': // formulaire article blog
unset($init);
break;
Notez que cette partie de code n'est qu'une partie de la fonction à mettre dans le template.php de votre thème. En effet, c'est la seule à modifier.
Cordialement,
Martin
Sympa de partager :) Je
Permalien Soumis par webastien le 19 Juin, 2008 - 20:39
Sympa de partager :)
Je complète juste un peu pour une approche plus technique...
La valeur de $textarea à mettre dans un "case" est déduite par tinyMCE comme suit :
Donc pour le dire en français, tinyMCE prend l'attribut #id de l'élément du fAPI ( http://api.drupal.org/?q=api/file/developer/topics/forms_api_reference.h... ) à partir du premier tiret.
Vous pouvez par exemple déduire cette clef en faisant un print_r($form) dans un form_alter.
Une méthode propre et pratique est d'utiliser l'excellent module devel (http://drupal.org/project/devel) en activant l'option "Display form element keys and weights".
Vous verrez alors 2 informations à côté de vos champs de formulaire : la clef (key) et le poids (weight).
Concernant le fonctionnement de cette fonction de thème, bien que le module même utilise unset($init), il est plus propre de retourner un tableau vide car le test est fait comme suit :
Donc pour ne pas afficher tinyMCE sur le textarea en question, faites donc "return array();".
Remarque :
On peut se servir de cette fonction pour une autre raison : changer la configuration du RTE sur cette textarea.
Pour celà, on modifie l'élément $init qui est un tableau PHP (construit par la function "tinymce_config").
On peut enlever une option en utilisant unset($init['optionkey']).
"optionkey" étant le nom de celle-ci.
Au contraire, pour en ajouter :
$init['optionkey'] = array('param1', 'param2', ...);
Reportez vous au fichier "plugin_reg.php" pour connaitre les paramètres.
Edit :
Suite à relecture par martin87, le terme "RTE" n'est pas forcément évident pour tous.
RTE = Rich Text Editor, c'est à dire un éditeur de texte amélioré, ici tinyMCE
Si besoin d'autre complément d'infos...
Merci bcp de partager
Permalien Soumis par graou le 20 Juin, 2008 - 12:09
Merci bcp de partager