6

我开始使用django CMS项目。这很棒,在构建时考虑到了模块化设计......但我们的客户实际上想要的是更简单:

在这里,在 django CMS 中,每个页面都可以包含许多内容“插件”——无论是文本、图像还是其他。但是客户希望为每个新页面自动激活、选择和创建一个文本插件——并在该文本字段上工作。这对他们来说使用起来更简单。

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

4

5 回答 5

2

django CMS 3.0 支持占位符的默认插件:

http://docs.django-cms.org/en/stable/reference/configuration.html#placeholder-default-plugins

于 2014-02-21T09:08:23.973 回答
2

有一种简单的方法可以实现相同的功能:

提供许多“原型页面”,每个页面模板和实例化插件的组合都需要提供给客户。

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

于 2012-06-08T09:48:33.223 回答
1

他们也是FeinCMS,它默认提供类似的页面树编辑器和更简单的块。它更可定制。

如果您不需要树编辑器,Django 有非常简单的内置平面页面。

于 2010-09-22T09:27:15.543 回答
1

你甚至需要CMS模块吗?

使用开箱即用的 django,最基本的 CMS 几乎是微不足道的:

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 管理员即可开始。但是如果你想要更多,而不是给他们管理员,很容易敲出一个表单/动作来编辑这些字段。

如果您需要所见即所得的编辑,请将 tinymce 添加到表单模板。就像是:

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

或者(如“sayplastic”所述)如果您仍在通过管理员编辑页面,您也可以将 Tiny 附加到该页面

class Media:
    js = (
        settings.MEDIA_URL + "jquery/jquery.js",
        settings.MEDIA_URL + "tiny_mce/tiny_mce.js",
        settings.MEDIA_URL + "js/admin.js"
    )
于 2010-09-21T11:06:34.550 回答
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)
})
于 2010-09-15T12:39:42.003 回答