0

私のカスタムCKEditorアップローダーで何か難解なことが起こっています。サーバーにアップロードしようとしている画像やファイルは正しくアップロードされますが、何をしてもリンクはエディターに表示されません。upload_file.htmlビューのCKEditorへのコールバックが正常に機能していないようです。CKEditorのドキュメントはこれらのことについて本当にまばらなので、ここでいくつかのガイダンスを実際に使用することができます。

私のコントローラーには、次のアップロード機能があります。

def upload_file():
    upload = request.vars.upload
    if upload != None:
        if hasattr(upload, 'file'):
            old_filename = upload.filename
            new_filename = db.files.uploaded_data.store(upload.file, upload.filename)
            result = db.files.insert(filename = old_filename,
                                     uploaded_data = new_filename,
                                     created_on = datetime.today())
            if not result:
                message = T('An error has occured during upload.')
                url = ''
            else:
                message = T('File uploaded succesfully.')
                url = URL(r = request, f = 'download', args = new_filename)
            return dict(form = None, cknum = request.vars.CKEditorFuncNum, url = url, message = message)
        else:
            raise HTTP(401, T('Upload is not proper type.'))
    else:
        form = SQLFORM(db.files, fields = ['uploaded_data'])
        upload = request.vars.uploaded_data
        if upload != None:
            form.vars.filename = upload.filename
            form.vars.created_on = datetime.today()
        if form.process().accepted:
            response.flash = T('File uploaded successfully!')
        elif form.errors:
            response.flash = T('form has errors')
        else:
            response.flash = T('please fill out the form')
        return dict(form = clean_form(form))

この関数のビューは次のようになります。

{{if form != None:}}
    {{extend 'layout.html'}}
    {{=form}}
{{else:}}
    <html>
        <body>
            <script type="text/javascript">
                window.opener.CKEDITOR.tools.callFunction({{=cknum}}, '{{=url}}', '{{=message}}');
            </script>
        </body>
    </html>
{{pass}}

いくつかのテキストエリアを含むフォームを含むテストビューがあり、それらはすべてエディターに適切に変換されます。

{{extend 'layout.html'}}
<script type="text/javascript">
    CKEDITOR.config.filebrowserBrowseUrl = "{{=URL(request.application, c='default', f='upload_file')}}";
    CKEDITOR.config.filebrowserUploadUrl = "{{=URL(request.application, c='default', f='upload_file')}}";
    CKEDITOR.config.filebrowserWindowHeight = '60%';
    CKEDITOR.config.filebrowserWindowWidth = '70%';
</script>
{{=form}}
4

1 に答える 1

0

I finally found the solution. There's a mistake in the view of the upload_file function.

window.opener.CKEDITOR.tools.callFunction({{=cknum}}, '{{=url}}', '{{=message}}');

should be rewritten to this:

window.parent.CKEDITOR.tools.callFunction({{=cknum}}, '{{=url}}', '{{=message}}');

I copied the first version, which caused me quite a lot of headache, from web2pyslices, so I write this answer here in the hope that it will help others trying to integrate CKEditor with Web2py.

于 2012-07-07T19:39:17.833 に答える