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

我终于找到了解决方案。upload_file 函数的视图有错误。

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

应该改写成这样:

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

我从 web2pyslices 复制了第一个版本,这让我很头疼,所以我在这里写下这个答案,希望它能帮助其他尝试将 CKEditor 与 Web2py 集成的人。

于 2012-07-07T19:39:17.833 回答