【问题标题】:Default content plugin in django-cmsdjango-cms 中的默认内容插件
【发布时间】:2011-02-07 09:29:42
【问题描述】:

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

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

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

【问题讨论】:

标签: django content-management-system django-cms


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    【讨论】:

      【解决方案3】:

      你还需要 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"
          )
      

      【讨论】:

        【解决方案4】:

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

        如果你不需要树编辑器,Django 内置了flatpages,非常简单。

        【讨论】:

          【解决方案5】:

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

          • 编写一个脚本,在从下拉列表中选择和添加文本插件时模仿用户行为;
          • 覆盖 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)
          })
          

          【讨论】:

            猜你喜欢
            • 2014-04-13
            • 1970-01-01
            • 2018-03-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-10-13
            • 1970-01-01
            相关资源
            最近更新 更多