2012-07-05 63 views
0

我的自定義CKEditor上傳器出現了一些神祕的事情。我嘗試上傳到服務器的圖像或任何文件都正確上傳,但無論我做什麼,鏈接都不會顯示在編輯器中。它看起來像在我的upload_file.html視圖中CKEditor的回調不起作用,因爲它應該。 CKEditor的文檔對這些東西真的很少見,所以我可以在這裏真正使用一些指導。無法自制CKEditor文件上傳器在web2py中工作

在我的控制,我有以下上傳功能:

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}} 

回答

0

我終於找到了解決方案。 upload_file函數的視圖存在錯誤。

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

應該重寫此:

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

我複製了第一個版本,這給我帶來了很多頭疼,從web2pyslices的,所以我希望在這裏寫這個答案,它會幫助其他人嘗試將CKEditor與Web2py集成。