web-dev-qa-db-ja.com

CKEditorは、textareaフィールドを空のままにすると<br />を生成します

私は CKEditor モジュールを満足して使用していますが、1つのケースで本当にイライラします:textareasを空のままにすると、<br />タグが生成されますCKEditorのインターフェースをレンダリングした後。

The <code><br /></code> tag in 'Source' view

これは、たとえば "Summary or trimmed" 表示を使用し、ノード作成フォームでを使用する場合に問題になる可能性がありますSummaryフィールドは空のままですが、実際にはnotです。これは、<br />が含まれているためです(ティーザーは単一の<br />)も含まれます。

ソースビュー に移動して<br />タグを常に削除することで、この問題を回避できますが、それは解決策ではありません(他のユーザーはその方法を知らないでしょう)。

この動作を停止する方法について何かアイデアはありますか?

5
Sk8erPeter

Drupal.org- http://drupal.org/node/550428 にこの問題を追跡する問題があります。コメント番号49にパッチがあります。役立つことを願っています。

4
digital

_sites/all/modules/ckeditor/ckeditor.config.js_で、11行目のCKEDITOR.editorConfig = function(config) {のすぐ下に次の行を追加します。

_config.fillEmptyBlocks = false;
_

この関数のより高度な使用法については CKsourceのドキュメント を参照してください。しかし、なぜ_config.ignoreEmptyParagraph = true;_では不十分なのかは、私の理解を超えています。

2
tricasse

fillEmptyBlocks CKEditor設定をfalseに設定してみましたか? WYSIWYGでは、これをフックで行います。

function base_wysiwyg_extras_wysiwyg_editor_settings_alter(&$settings, $context) {
  if ($context['profile']->editor == 'ckeditor') {
    $settings['fillEmptyBlocks'] = FALSE;
  }
}

おそらくCKEditorモジュールの方法もあるでしょう。ない場合は、カスタムCKEditor設定のjsファイルを使用して、いつでも直接設定を追加できます。

1
RobW

おそらく hook_field_presave を使用できます:

function mymodule_field_presave ($entity_type, $entity, $field, $instance, $langcode, &$items)
{
  if ($field[...] == ...) { // update for your case
    foreach ($items as $delta => $item) {
      if (isset($item['value'])) {
        $pattern = '/^\s*\<br\s*\/?\>\s*$/i';
        if (preg_match($pattern, $items[$delta]['value'] === 1) {
          $items[$delta]['value'] = '';
        }
      }
    }
  }
}

これはテストされていません(特に正規表現)。 &nbspだけ、空の段落だけなどを処理するために、追加のケースを追加することもできます。

0
mpdonadio