Empêcher CKEditor de formater le code en mode source

comment empêcher formatage automatique Lorsqu'il est en CKEditor lorsqu'il est visionné en mode source?

j'aime éditer le code source HTML directement au lieu d'utiliser L'interface WYSIWYG, mais chaque fois que j'écris de nouvelles lignes, ou des balises de mise en page comme je les indente, tout est formaté quand je passe en mode WYSIWYG et puis de nouveau en mode source.

je suis tombé sur un CKEditor dev billet, Conserver la mise en forme de ProtectedSource éléments, qui fait allusion à un paramètre qui peut avoir existé une fois, ce qui serait exactement ce que je suis après. Je veux juste savoir comment je peux désactiver complètement tout le formatage automatique lors de l'édition en mode source.

j'ai trouvé une solution que je pensais infaillible (mais pas agréable).

j'ai appris à propos de l' protectedSource paramétrage, donc j'ai pensé, bien peut-être que je peux juste utiliser cela et créer une étiquette de commentaire HTML avant tout mon HTML et un autre après lui et puis pousser un trouver les balises de commentaire dans le protectedSource array, mais même (croyez-le ou pas) ne fonctionne pas.

j'ai essayé mon expression directement dans le navigateur à L'extérieur de CKEditor et il fonctionne, mais CKEditor ne protège pas le code comme prévu (ce que je soupçonne être un bug impliquant des balises de commentaires, puisque je peux le faire fonctionner avec d'autres chaînes). Dans le cas où vous vous demandez, c'est ce que j'avais espéré travail comme un travail, mais ne fonctionne pas:

config.protectedSource.push( /<!-- src -->[sS]*<!-- end src-->/gi );

et ce que j'avais prévu de faire (pour ce qui semble être l'absence d'un paramètre pour désactiver le formatage en mode source) était d'insérer tout mon HTML dans les balises commentées comme ceci:

<!-- src -->
<div>some code that shouldn't be messed with (but is)</div>
<!-- end src -->

j'aimerais savoir si quelqu'un a des suggestions pour ce scénario, ou connaît un paramètre que j'ai décrite, ou même si quelqu'un peut juste me renseigner pourquoi je ne peux pas obtenir protectedSource pour travailler correctement avec deux tags de commentaires.

je pense vraiment que c'est je dois être un bug parce que je peux obtenir tellement d'autres expressions pour fonctionner correctement, et je peux même protéger HTML dans la zone d'une seule étiquette de commentaire, mais je ne peux tout simplement pas obtenir HTML dans deux étiquettes de commentaire différentes pour rester intact.

19
demandé sur random 2010-05-17 20:59:46

5 réponses

ma solution pour cela était d'utiliser des commentaires dans mon système, mais avant d'alimenter le contenu de la page à CKEditor, convertissez-les en balises HTML personnalisées. Ensuite, lors de la sauvegarde, convertissez - les de nouveau à mes tags de commentaire.

pour votre syntaxe qui serait quelque chose comme ça en PHP. Avant d'imprimer le contenu de la page vers la textarea:

$content = str_replace(array('<!-- src -->','<!-- end src -->'),array('<protected>','</protected>'),$content);

avant de sauvegarder le contenu résultant:

$content = str_replace(array('<protected>','</protected>'),array('<!-- src -->','<!-- end src -->'),$content);

dans la configuration CKEditor:

protectedSource:[/<protected>[\s\S]*<\/protected>/g]

espérons que aide!

5
répondu Michael Bunkin 2015-10-15 05:26:20

je voulais préserver newlines dans ma source, et le protectedSource fonctionnalité qui fonctionne bien. J'ai ajouté à mon config.js:

config.protectedSource = [/\r|\n/g];
4
répondu Todd Kamin 2017-07-24 15:51:57

config.allowedContent=true; fera l'affaire

voici le code HTML complet

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>CKEditor</title>
        <script src="http://cdn.ckeditor.com/4.5.10/standard/ckeditor.js"></script>
    </head>
    <body>
        <textarea name="editor1"></textarea>
        <script>
            CKEDITOR.config.allowedContent=true;
            CKEDITOR.replace( 'editor1' );
        </script>
    </body>
</html>
2
répondu Hari Das 2016-07-28 17:44:36

j'ai résolu ce problème en entourant simplement la sortie de fin d'édition de la page de formulaire avec une condition sur une variable $_GET-quand vous cliquez sur "Mode Expert" il charge un textarea simple au lieu du système ckeditor. Votre invocation de l'objet ckeditor variera en fonction de votre configuration. ( J'ai une classe personnalisée qui appelle/construit l'objet de l'éditeur )

                <div id="postdivrich" class="postarea">
<?php
if( isset( $_GET['expert'] ) )
{
    print "<div style=\"text-align:right;\"><a href=\"/admin/ckeditor/edit.php?node={$nNode}\">Editor mode</a></div>\n";
    print "<textarea name=\"content\" style=\"height:400px;width:{$nEwidth}px;\">{$aDoc['content']}</textarea>\n";
}
else
{
    print "<div style=\"text-align:right;\"><a href=\"/admin/ckeditor/edit.php?node={$nNode}&expert=true\">Expert mode</a></div>\n";
    require_once( 'admin/editor.class.php' );
    $aDoc['content'] = str_replace( "\r", '', str_replace( "\n", '', nl2br( $aDoc['content'] ) ) );
    $oEditor = new setEditor( $aDoc['content'], $nEwidth, "400", 'content' );
    $oEditor->ShowEditor();
}
?>
                </div>
1
répondu AnOldMan 2011-08-06 14:23:13

réponse de l'aide? Fondamentalement, vous pouvez désactiver les options ajoutant un javascript, il ressemble.

0
répondu Alex J 2017-05-23 11:46:34