Несколько редакторов TinyMCE неправильно отображают в Yii2 - PullRequest
0 голосов
/ 04 мая 2018

Я использую Yii2 и виджет из 2amigos/yii2-tinymce-widget.

Редактор выглядит корректно только тогда, когда я использую его только один раз, но когда я использую несколько редакторов, второй, третий и т. Д. Редакторы отображают неправильно. Должен ли я остановить инициализацию TinyMCE после первого?

Вот пример пропущенного рендеринга:

image

А вот код, где я использую виджет:

<?php

$form = ActiveForm::begin([
            'id' => $ansichtAktiv->id,
            'enableClientValidation' => true,
            'action' => 'index.php?r=empf/ansichtspeichern&geraet_token=' . $geraet->token . '&ansicht_id=' . $ansichtAktiv->id
        ]);
?>
<?=

$form->field($ansichtAktiv, 'html')->label('Ansicht:')->widget(TinyMce::className(), [
    'language' => 'de',
    'clientOptions' => [
        'plugins' => [
            "advlist autolink lists link charmap print preview anchor",
            "searchreplace visualblocks code fullscreen",
            "insertdatetime media table contextmenu paste",
            "textcolor",
        ],
        'toolbar' => "forecolor backcolor | undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image"
    ]
]);
?>
<?=

$form->field($ansichtAktivSec, 'html')->label('Ansicht2:')->widget(TinyMce::className(), [
    'language' => 'de',
    'clientOptions' => [
        'plugins' => [
            "advlist autolink lists link charmap print preview anchor",
            "searchreplace visualblocks code fullscreen",
            "insertdatetime media table contextmenu paste",
            "textcolor",
        ],
        'toolbar' => "forecolor backcolor | undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image"
    ]
]);
?>
<?= Html::submitButton('Speichern', ['class' => 'btn btn-danger', 'name' => 'speichern-button']) ?>
<?php ActiveForm::end(); ?>

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

У вас есть два поля с одинаковым именем (html). По умолчанию Yii генерирует идентификатор поля на основе имени поля. Если у вас есть два поля одной модели с одинаковым именем, они будут иметь одинаковые идентификаторы. Если виджет TinyMce использует ID для инициализации редактора TinyMCE, будет инициализирован только первый элемент с этим идентификатором.

Для этих полей следует использовать разные имена (например, html и html2) или указать идентификатор вручную:

$form->field($ansichtAktivSec, 'html', [
    'inputOptions' => ['id' => 'html-1'],
])
0 голосов
/ 04 мая 2018

Зарегистрируйте новый файл JavaScript и добавьте эту часть кода:

$(document).ready(function() {
    tinyMCE.init({
        mode: "textareas",
    });
});

Как только документ загружен, tinyMCE инициализирует все плагины TinyMCE, которые имеют тип textarea (по умолчанию).


Если вы предпочитаете писать в файле вида, добавьте его внизу:

$this->registerJs('
    tinyMCE.init({
        mode: "textareas",
    });
', View::POS_END);
...