Почему мои динамические формы CMS не загружаются каждый раз? - PullRequest
0 голосов
/ 29 августа 2010

Я использую CKEditor для создания части моей CMS, чтобы пользователь мог вводить контент. Моя CMS - это панель / меню в верхней части с разделами сайта, которые пользователь может создавать, обновлять или удалять.

Когда пользователь выбирает опцию, я отправляю запрос на элементы формы в php, используя jquery AJAX $ .post. Функция возвращает код, и я использую $ ('# loadCMS'). Html (data) для создания формы без перезагрузки страницы. Это прекрасно работает, и отладка всегда показывает верный код.

Однако CKEditor загружается только при первом выборе элемента. Может загружаться снова, но это редко.

CKEditor - это javascript, который сидит в голове и заменяет указанные текстовые области редактором

<head>
...
<script type="text/javascript" src="/ckeditor/ckeditor.js"></script>
...
</head

что загружается динамически для вызова редактора

<textarea name="editor1"></textarea>
    <script type="text/javascript">
        CKEDITOR.replace( "editor1",
        {
            toolbar :
            [
            ['Source'],
            ['Cut','Copy','Paste','PasteText','PasteFromWord','-', 'SpellChecker'],
        ['Undo','Redo','-','RemoveFormat'],
        ['Bold','Italic','Underline'],
        ['Subscript','Superscript'],
        ['NumberedList','BulletedList'],
        ['Link','Unlink'],
        ['Image','Flash','HorizontalRule','SpecialChar','Format'],
        ['Maximize', 'ShowBlocks','-','About']
            ],
            width : '1000',
            height : '300',
            filebrowserBrowseUrl : '/ckfinder/ckfinder.html',
            filebrowserImageBrowseUrl : '/ckfinder/ckfinder.html?Type=Images',
            filebrowserFlashBrowseUrl : '/ckfinder/ckfinder.html?Type=Flash'
        });
    </script>

JQuery

$('#portfolioCreate').click(function()
    {
        var detailsList = new Array('title','medium','original');
        $.post('cms.php',{detailsList: detailsList,images:"imageOn",subimgNum:0,content1:"Comments"},
        function(data)
        {
            $('#loadCMS').html(data);
            $('#debug').val(data);
        });
    });

Формы создаются динамически каждый раз. Однако текстовые области, замененные CKEditor, не всегда заменяют, они просто пустые, даже поле текстовой области не показано. Первый раз, когда выбор сделан, это работает. Если пользователь решает создать новую запись в блоге, текстовая область заменяется, если он затем выбирает обновить биографию, текстовая область никогда не заменяется, даже если он возвращается, чтобы создать новую запись в блоге.

----------------- РЕШЕНИЕ -------------------------

динамический php

$key = md5(time().rand())
<textarea name="'.$key.'"></textarea>
<script type="text/javascript">
CKEDITOR.replace("'.$key'",
{
     .....
});
<input type="hidden" value="'.$key.'" name="content1Key" />
</script>

PHP, чтобы вытащить из формы

$content1Key = $_POST['content1Key'];
$content1 = $_Post[$content1Key];

1 Ответ

1 голос
/ 29 августа 2010

CKEditor очень требователен к динамическому созданию форм из-за способа хранения ссылок (в одном глобальном массиве с ключом textarea , я полагаю).Попытайтесь дать каждому текстовому полю уникальное имя, чтобы оно не возвращало существующую ссылку, которая была уничтожена / перезаписана, и после загрузки каждой новой формы вам нужно вызвать CKEDITOR.replace.

...