2013-04-19 6 views
6

Есть ли стандартное решение для вставки feincms MediaFile в элемент формы RichTextContent (ckeditor или tinyMCE)? Я не смог найти в документации ... Теперь пользователям нужно скопировать вставку URL-адреса в medialib, затем перейдите на страницу и вставьте ...Feincms MediaFile в RichTextContent

ответ

2

Вы должны создать свою собственную реализацию для этого. Overwriting rejectRelatedLookupPopup немного хакерский, но у Django, похоже, нет поддержки для лучшего решения.

ОБНОВЛЕНИЕ: Этот ticket описывает всплывающее окно.

В вашей статической папке, где живет 'ckeditor', создайте плагин, например.

/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' 
     }); 
    } 
}); 

Убедитесь, чтобы добавить плагин в сценарий инициализации CKEditor, например,

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

Вот о чем я придумал ... – user2298943

0

Не то, чтобы я знал. Если вы всегда (или иногда) нужен MediaFile, связанный с RichTextContent, написать свой собственный тип контента:

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

Спасибо, но на самом деле это не ответ на вопрос – user2298943

Смежные вопросы