2010-04-13 43 views
6

我开始使用django CMS项目。这很棒,用模块化设计牢记在心......但实际上我们的客户想要的是更简单:django-cms中的默认内容插件

在这里,在django CMS中,每个页面可以包含许多内容'插件' - 无论是文本,图像还是其他。但客户希望有一个文本插件处于活动状态,为每个新页面自动选择和创建 - 并在该文本字段上工作。这对他们来说简单些。

任何人在使用这个CMS系统之前都做过类似的事情吗?或者,您可以推荐任何其他简单的django CMS解决方案?

+0

这不是一个答案却可能是hlpful:http://www.django-cms.org/en/documentation/2.0/configuration/#cms-placeholder- CONF – dzida 2010-08-27 13:24:12

回答

0

最快的,但可能不是最优雅的方式是:

  • 写选择并从下拉添加文本插件时模拟了用户行为的脚本;
  • 重写PageAdmin以包含我们的脚本。

它是这样的:

# anywhere in your project, for example, site/admin.py 
from cms.models import Page 
from cms.admin.pageadmin import PageAdmin 

class ModPageAdmin(PageAdmin): 
    class Media: 
     js = ('js/cms.page.js',) 

admin.site.unregister(Page) 
admin.site.register(Page, ModPageAdmin) 

# in MEDIA_URL/js/cms.page.js 
$(document).ready(function(){ 
    ph = $("div.form-row.main") // replace "main" with your placeholder name, lower-case 
    $("select", ph).val('TextPlugin') 
    window.setTimeout(function(){ $("span.add-plugin", ph).click() }, 500) 
}) 
1

你甚至不需要CMS模块?

最基本的CMS的是几乎微不足道的使用超出现成的Django:

class ContentPage(models.Model): 
    title = models.CharField(max_length=100) 
    content = models.TextField() 
    slug = models.SlugField() 

def view_page(request, slug='home'): 
    return render_to_response('content.html', 
     { 'page': ContentPage.objects.get(slug=slug) }, 
     context_instance=RequestContext(request) 
    ) 

只需使用Django管理上手。但是,如果你想要更多,而不是给他们管理员,很容易敲一个窗体/动作来编辑这些字段。

如果您需要wysiwyg编辑,添加tinymce到表单模板。喜欢的东西:

<script type="text/javascript" src="{{MEDIA_URL}}tiny_mce/tiny_mce.js"></script> 
<script type="text/javascript"> 
tinyMCE.init({... 

,或者如果你还在通过管理编辑通过网页就可以把拇指姑娘太

class Media: 
    js = (
     settings.MEDIA_URL + "jquery/jquery.js", 
     settings.MEDIA_URL + "tiny_mce/tiny_mce.js", 
     settings.MEDIA_URL + "js/admin.js" 
    ) 
1

(如“sayplastic”提到的)他们也是FeinCMS提供类似页面树编辑器和默认情况下更简单的块。它更具可定制性。

如果你不需要树编辑器,Django已经内置了flatpages这很简单。

2

有一个简单的方法来实现相同的功能:

提供了大量的“原型页”,一个页面模板,你想提供给客户实例化插件的每个组合。

让客户通过复制模板页面(可以通过页面管理中的复制图标完成)来创建新页面,而不是从头开始创建新页面。通过这种方式,所需的插件将已经存在,即使有默认内容也是如此。