2013-04-19 16 views
6

Esiste una soluzione standard per inserire un file Feincms MediaFile in un elemento di modulo RichTextContent (ckeditor o tinyMCE)? Non sono stato in grado di trovarne alcuno nella documentazione ... Ora gli utenti devono copiare incolla un url nel medialib per poi passare alla pagina e incollare ...Feincms MediaFile in RichTextContent

risposta

2

Dovrete creare una propria implementazione per questo. Overwriting dismissRelatedLookupPopup è un po 'hacker, ma Django sembra non avere il supporto per una soluzione migliore.

AGGIORNAMENTO: Questo ticket descrive il problema popup.

Nella cartella statica in cui "ckeditor" è presente, creare un plug-in, ad es.

/app/ 
    /static/ 
     /app/ 
      /js/ 
       /ckeditor/ 
        /plugins/ 
         /feincms/ 
          /images/ 
           mediaFile.png 
          plugin.js 

plugin.js

/** 
* Basic sample plugin inserting a feincms mediaFile into the CKEditor editing area. 
*/ 

// Register the plugin with the editor. 
// http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.plugins.html 
CKEDITOR.plugins.add('feincms', 
{ 
    // The plugin initialization logic goes inside this method. 
    // http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.pluginDefinition.html#init 
    init: function(editor) 
    { 
     // Define an editor command that inserts a feincms. 
     // http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.editor.html#addCommand 
     editor.addCommand('insertMediaFile', 
      { 
       // Define a function that will be fired when the command is executed. 
       // http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.commandDefinition.html#exec 
       exec : function(editor) 
       { 
        // Define your callback function 
        function insertMediaFile(imageUrl) { 
         // Insert the imageUrl into the document. Style represents some standard props. 
         // http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.editor.html#insertHtml 
         editor.insertHtml('<img src="/media/' + imageUrl + '" style="float:left;margin-right:10px;margin-bottom:10px;width:200px;" />'); 
        } 

        var imageUrl; 
        window.dismissRelatedLookupPopup = function (win, chosenId) { 
         imageUrl = $(win.document.body).find('#_refkey_' + chosenId).val(); 
         insertMediaFile(imageUrl); 
         var name = windowname_to_id(win.name); 
         var elem = document.getElementById(name); 
         if (elem) { 
          if (elem.className.indexOf('vManyToManyRawIdAdminField') != -1 && elem.value) { 
           elem.value += ',' + chosenId; 
          } else { 
           document.getElementById(name).value = chosenId; 
          } 
         } 
         win.close(); 
        }; 

        var win = window.open('/admin/medialibrary/mediafile/?pop=1', 'id_image', 'height=500,width=800,resizable=yes,scrollbars=yes'); 
        win.focus(); 
       } 
      }); 
     // Create a toolbar button that executes the plugin command. 
     // http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.ui.html#addButton 
     editor.ui.addButton('feincms', 
     { 
      // Toolbar button tooltip. 
      label: 'Insert MediaFile', 
      // Reference to the plugin command name. 
      command: 'insertMediaFile', 
      // Button's icon file path. 
      icon: this.path + 'images/mediaFile.png' 
     }); 
    } 
}); 

Assicurarsi di aggiungere il plugin per lo script di init CKEditor, per esempio

{ name: 'insert', items : [ 'feincms','HorizontalRule','SpecialChar' ] }, 
+0

Questo è quello che mi è venuto in mente ... – user2298943

0

Non che io sappia. Se avete sempre (o qualche volta) hanno bisogno di un MediaFile associato ad un RichTextContent, scrivere il proprio tipo di contenuto:

from feincms.module.medialibrary.fields import MediaFileForeignKey 
from feincms.content.richtext.models import RichTextContent 


class RichTextAndMFContent(RichTextContent): 
    mf = MediaFileForeignKey(MediaFile) 

    class Meta: 
     abstract = True 

    def render(self, **kwargs): 
     ... 
+0

Grazie ma non è proprio una risposta alla domanda – user2298943