[résolu] FCKeditor pour un type de contenu précis

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour,

J'ai installé FCKeditor mais je souhaiterait qu'il ne soit appelé que sur certains types de contenus (story, page...) mais pas sur d'autres (forum...).

Je trie déjà par "Fields to exclude/include" mais "edit-body" est commun à tous les types de contenu.
Si je trie par "Paths to exclude/include" ça ne fonctionne plus à la modification car ils sont tous des "node/*"

Virer le champ "Corps" en le laissant vide et créer un autre champ avec CCK?

Version de Drupal : 

Ça aurait dû marcher, mais ça a pas, snif.
Ça marche pour d'autres types de contenus, "Image" par exemple, mais pas pour "Sujet de discussion".

Pourtant, sur le type de contenu "Sujet de discussion" (forum) est écrit:

Libellé du champ corps :
Pour omettre le champ corps pour ce type de contenu, supprimez le texte et laissez ce champ vide.

Il n'y a plus le champ "Corps" dans Gérer les champs, mais il est appelé quand même!!!

J'ai trouvé pourquoi : le champ "Corps" est noté "obligatoire" (la petite astérisque) quand on crée un sujet de discussion, même si ce n'est pas indiqué dans la construction de ce type de contenu. Bon.

Retour à la case départ.

Bon, c'est pas que je me sens seul, les gars, mais une petite piste de travail serait la bienvenue :-$

J'ai vu dans http://drupalfr.org/node/6291 qu'on pouvait utiliser Wysigwyg API pour gérer les différents éditeurs, mais je ne suis pas sûr que ce soit la solution.
D'abord, parce que je veux limiter au maximum le nombre de modules, j'en ai déjà quelques-uns, ensuite parce ça a l'air de reposer encore une fois sur les formats d'entrée.
Or, ces formats sont alloués à des rôles, mais pas reliés à des contenus!

Comment donc virer FCKeditor des sujets de discussion (forum), pour tous les rôles, en le gardant pour le reste???

Salut,
Tu peux gérer FCK par rôle.
Tu peux gérer les accès par type de contenu et par rôle.
Donc si tu crées un rôle spécifique pour les forums et que tu ne lui accordes pas FCK, ça devrait le faire. C'est une question de structure et je ne sais pas si au stade où tu en es, tu peux modifier un peu celle-ci.

Salut et merci sahuni,

Je peux encore un peu toucher à la structure, je ne suis qu'en semi-prod.
En fait, je précise que je souhaite que les mêmes utilisateurs puissent avoir FCK sur certains types de contenus et pas sur d'autres.
J'ai déjà deux profiles FCK pour deux types d'utilisateurs différents.

Si je me base sur les rôles, je peux effectivement en créer un nouveau que j'appelle "membre forum", ne définir les droits de participer aux forums que sur ce rôle... et le donner à tous mes utilisateurs.
Ensuite, je peux attribuer à ce rôle un nouveau profile FCK (qui exclut tout par exemple). Sauf que dans ce cas, l'utilisateur se retrouve avec deux profiles FCK concurrents et je dois déterminer un ordre de priorité de l'un sur l'autre. Tout ou rien, non?
Ou j'ai pas compris un truc?

J'ai testé pour voir, sans surprise :-((

  • j'ai créé un rôle "forum" qui donne les droits pour participer au forum
  • j'ai créé un profile FCKeditor "Forum" alloué aux utilisateurs ayant le rôle "forum"
  • dans Global Settings > Profil >FCKeditor Global Profile j'ai défini l'ordre de priorité :
    "forum" > "classique".

L'utilisateur qui a le rôle "forum" n'a plus de FCKeditor quand il écrit un sujet, mais il n'a plus FCKeditor non plus pour déposer une page.

Si j'inverse la priorité : "classique" > "forum" , là c'est FCKeditor partout.
Logique.

Logique, mais je n'ai pas de solution!!!!!!!!!

Peut-on virer l'appel à FCKeditor à la main dans les forums?

Merci bricelo, en fait tu as appelé FCKeditor directement, hors de drupal en somme.

Ce que je cherche, c'est où drupal fait la bascule ou pas vers FCKeditor, en fonction des paramètres de configuration de ce module. Je compte ainsi tester le type de contenu et shunter si c'est pour le forum.

Une solution plus propre serait peut-être de séparer les Sujets de discussion des autres en ne les considérant plus comme des node (comme pour les blogs), mais comment faire?

Et si tu utilises un thème pour tel node-type et un autre thème pour tel autre node-type ? Tu peux pas bloquer FCK sur tel node-type ?

Je trouve plus la page de la doc qui précise comment faire, mais voici un ou deux bons liens : http://www.ineation.com/drupal/themes-drupal-apparence-differente-chaque..., http://drupal.org/node/154513,

[edit] Si en fait j'ai trouvé le lien : http://drupal.org/node/45944

Sinon y aussi cette piste, mais c'est plus lourd à mon sens
http://drupal.org/project/nodetypetheme

Merci EDDYL, mais je ne veux pas modifier le thème lors de l'affichage des forums, je veux supprimer le recours à FCKeditor lors de la création et lors de la modification d'un "Sujet de discussion" (forum).

J'ai bien compris que tu veux la même charte graphique sur tout ton site.

Par 'thèmer' : je pensais par exemple au fait de faire une fonction php dont le seul objet sera de gérer l'affichage ou non de FCK suivant si tu es sur le forum ou les autres types de contenus.

je dirais que si c'est pour modifier le contenu de type 'forum' ; il te faut faire une fonction phptemplate_preproces_forum() et la mettre dans le fichier template.tpl.php de ton thème. A vérifier avec des 'thèmeurs' confirmés...

En jetant un oeil dans le module FCK que j'ai sous la main (v 1.19.2.6.2.35 pour drupal 5.x), je trouve cette fonction :

/**
* Implementation of textarea
* Replace textarea with FCKeditor using callback function (fckeditor_process_textarea)
*/
function fckeditor_elements() {
  $type = array();
  $type['textfield'] = array(
  '#process' => array(
  'fckeditor_process_input' => array()
  ),
  );
  if (user_access('access fckeditor')) {
    // only roles with permission get the fckeditor
    if (fckeditor_is_compatible_client()) {
      // it would be useless to dig deeper if we're not able or allowed to
      $type['textarea'] = array(
      '#process' => array(
      'fckeditor_process_textarea' => array()
      ),
      );
    }
  }
  return $type;
}

Il me semble qu'il ne serait pas trop difficile de la modifier pour remplacer dans tous les cas ou le contenu n'est pas un forum.

une idée comme ça...

Tant mieux si j'ai pu t'aider. Regardes quand même les liens cités plus haut.
Sinon, voici deux exemples de fonctions 'thémées' dans mon template.php.

/
   * Theme override for user edit form.
   *
   * The function is named themename_formid.
   */
  function themediocese_user_login($form) {
   // return _phptemplate_callback('user_login', array('form' => $form));//surcharge user template

   $output = '';
  // Print out the $form array to see all the elements we are working with.
  //return print_r($form);
  // Once I know which part of the array I'm after we can change it.
  // You can use the normal Form API structure to change things, like so:
  // Change the Username field title to Login ID.
  //$form['#action'] = url($_GET['q'], drupal_get_destination());
  //$form['#action'] = url('node/2', drupal_get_destination());
  //$form['#action'] = '/?q=user&' .drupal_get_destination();
  //$form['#action'] = url('user/login', 'destination='. $_GET['destination']);
  //$form['#action'] = url($_GET['q'], 'node/2');
  //$form['#redirect'] = '/?q=fr/front_page';
 
  $form['name']['#size'] = '15';
  $form['pass']['#size'] = '15';

  $form['name']['#required'] = 0;
  $form['pass']['#required'] = 0;

  $form['name']['#title'] = 'Utilisateur';//Abonné';
 
  $form['name']['#attributes'] = array('class' => 'inputname');
  $form['pass']['#attributes'] = array('class' => 'inputpass');
 
  unset($form['name']['#description']);
  unset($form['pass']['#description']);
  // Make sure you call a drupal_render() on the entire $form to make sure you
  // still output all of the elements (particularly hidden ones needed
  // for the form to function properly.)
  $output .= drupal_render($form);
  return $output;
  }

   /
   * Theme override for item search result page.
   *
   */
  
  function themediocese_search_item($item, $type) {
    $output = ' <dt class="title"><a href="'. check_url($item['link']) .'">'. check_plain($item['title']) .'</a></dt>';
    $output .= ' <dd>'. ($item['snippet'] ? '<p>'. $item['snippet'] .'</p>' : '') .'</dd>';
    return $output;
}

La première permet de personnaliser le formulaire de login, la seconde l'affichage des recherches (search box).

A+

Edouard