web-dev-qa-db-fra.com

Désactiver les balises <p> jointes dans CKEditor 3.0

Est-il possible de désactiver la fermeture automatique de tout contenu écrit dans <p> </ p> dans CKEditor 3.x

J'ai essayé 

  CKEDITOR.config.enterMode = CKEDITOR.ENTER_BR;

mais cela change simplement les sauts de ligne en <br /> en laissant le paragraphe suivant.

L'écriture actuelle de "Test" produit cette sortie

<p>
    Test</p>

mais je veux que ce soit simplement

Test

Existe-t-il une propriété de configuration pour cela ou un autre éditeur intégré serait-il mieux adapté à cela?

59
Kosi2801

CKEDITOR.config.enterMode = CKEDITOR.ENTER_BR; - cela fonctionne parfaitement pour moi . Avez-vous déjà essayé de vider le cache de votre navigateur - c'est parfois un problème.
Vous pouvez également le vérifier avec l’adaptateur jQuery:

<script type="text/javascript" src="/js/ckeditor/ckeditor.js"></script>
<script type="text/javascript" src="/js/ckeditor/adapters/jquery.js"></script>
<script type="text/javascript">
$(function() {
    $('#your_textarea').ckeditor({
        toolbar: 'Full',
        enterMode : CKEDITOR.ENTER_BR,
        shiftEnterMode: CKEDITOR.ENTER_P
    });
});
</script>


UPDATE selon le commentaire de @ Tomkay:

Depuis la version 3.6 de CKEditor, vous pouvez configurer si vous souhaitez que le contenu intégré soit automatiquement encapsulé avec des balises telles que <p></p>. C'est le réglage correct:

CKEDITOR.config.autoParagraph = false;

Source: http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.autoParagraph

81
Maksymilian Majer

Sur Internet, des personnes ont remarqué que définir config.enterMode sur CKEDITOR.ENTER_BR supprime les balises de paragraphe d'habillage de CKEditor. Il convient de noter que le paramètre modifie le comportement de la touche Entrée pour insérer des sauts de ligne plutôt que des paragraphes, ce qui n'est pas souhaitable.

Voir: http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.enterMode "Il est recommandé d'utiliser le paramètre CKEDITOR.ENTER_P en raison de sa valeur sémantique et de son exactitude."

Cependant, le paramètre conçu pour supprimer ce paragraphe initial, config.autoParagraph, n'est pas conseillé non plus, car il introduit des "problèmes d'utilisabilité imprévisibles" car l'éditeur vraiment souhaite un élément de bloc de niveau supérieur.

Voir: http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.autoParagraph

La magie opère sur wysiwygarea/plugin.js, ligne 410, où l'éditeur sélectionne l'élément de bloc par défaut en fonction de config.enterMode. Une option de configuration permettant de modifier l’élément de bloc par défaut nous permettrait de commencer par un div, mais nous continuerions d’obtenir plus de divs à chaque pression sur Entrée, sauf si nous changions le format de paragraphe via le menu.

Voir: http://docs.cksource.com/ckeditor_api/symbols/src/plugins_wysiwygarea_plugin.js.html

Il serait possible de supprimer la balise de paragraphe enveloppante avec post-traitement (soit sur le serveur, soit dans l'événement getData de CKEditor), mais cela nous conduit au même problème que la désactivation de autoParagraph: il n'y a pas de bloc de niveau supérieur.

Je dirais plutôt qu'il n'y a pas une bonne solution, mais plutôt une poignée de demi-solutions, plutôt que d'accepter de changer config.enterMode en tant que solution canonique.

32
Michael Hellein

Essayez ceci dans config.js

CKEDITOR.editorConfig = function( config )
{
config.enterMode = CKEDITOR.ENTER_BR;
config.shiftEnterMode = CKEDITOR.ENTER_BR;
};
9
John W

Je l'ai trouvé!

ckeditor.js ligne # 91 ... recherche 

B.config.enterMode==3?'div':'p'

changer à

B.config.enterMode==3?'div':'' (NO P!)

Videz votre cache et BAM!

5
PHPGuy

FAITES CECI VOTRE code de fichier config.js

CKEDITOR.editorConfig = function( config ) {

   //   config.enterMode = 2; //disabled <p> completely
        config.enterMode = CKEDITOR.ENTER_BR // pressing the ENTER KEY input <br/>
        config.shiftEnterMode = CKEDITOR.ENTER_P; //pressing the SHIFT + ENTER KEYS input <p>
        config.autoParagraph = false; // stops automatic insertion of <p> on focus
    };
3
Timothy Nwanwene

Je fais quelque chose dont je ne suis pas fier comme solution de contournement. Dans mon servlet Python qui enregistre réellement dans la base de données, je fais:

if description.startswith('<p>') and description.endswith('</p>'):
    description = description[3:-4]
2
derwiki

FAITES CECI VOTRE code de fichier config.js

CKEDITOR.editorConfig = function( config ) {

   //   config.enterMode = 2; //disabled <p> completely
        config.enterMode = CKEDITOR.ENTER_BR // pressing the ENTER KEY input <br/>
        config.shiftEnterMode = CKEDITOR.ENTER_P; //pressing the SHIFT + ENTER KEYS input <p>
        config.autoParagraph = false; // stops automatic insertion of <p> on focus
    };
1
Timothy Nwanwene
if (substr_count($this->content,'<p>') == 1)
{
  $this->content = preg_replace('/<\/?p>/i', '', $this->content);
}
1
Lars

Modifiez la source (ou désactivez le texte enrichi) et remplacez la balise p par un div. Puis coiffez la div comme vous le souhaitez.

ckEditor n’ajoutera pas d’élément wrapper lors de la prochaine soumission car la division est là.

(Cela a résolu mon problème, j'utilise Drupal et j'ai besoin de petits extraits de code HTML que l'éditeur a toujours ajoutés, mais le reste du temps, je veux la balise p wrapping).

1
chim

Définissez cette configuration:

    CKEDITOR.config.enterMode = CKEDITOR.ENTER_BR
    CKEDITOR.config.forcePasteAsPlainText = true
0
Evan Ross