创建Plone 4自定义portlet管理器

时间:2012-06-25 12:45:52

标签: plone

我正在尝试按照Plone.orgWebLion的教程为我的主题页脚创建自定义portlet管理器。

我要做的是在我的主题中添加一个Viewlet管理器和一个Viewlet,它应该作为portlet管理器。

我得到一个ContentProviderLookupError的viewlet,当viewlet的模板中有一个TAL块时,它应该作为我的portlet管理器。如果省略TAL块,我可以在页面上正确显示viewletmanager和viewlet模板。

使用here

中的sane_plone_addon_template完成主题

我真的无法看到我在这里做错了什么,并且当涉及到Plone时,作为一个完整的菜鸟真的没有帮助,所以任何想要在正确方向上推动我的想法都会非常感激。

继承我的 configure.zcml

<browser:viewletManager
         name="footerPortlets1"
         provides=".interfaces.IspFooterPortletsViewletManager"
         class="plone.app.viewletmanager.manager.OrderedViewletManager"
         layer=".interfaces.IThemeSpecific"
         permission="zope2.View"
    />

<browser:viewlet
        name="footerPortlets"
        manager=".interfaces.IspFooterPortletsViewletManager"
        template="templates/footerPortlets.pt"
        layer=".interfaces.IThemeSpecific"
        permission="zope2.View" 
    /> 
profile / default /

中的

portlets.xml

    <?xml version="1.0"?>
<portlets
    xmlns:i18n="http://xml.zope.org/namespaces/i18n"
    i18n:domain="plone">

     <portletmanager 
       name="footerPortlets"
       type="mytheme.interfaces.IFooterPortlets"
     />

</portlets>

interfaces.py

from plone.portlets.interfaces import IPortletManager
from plone.app.portlets.interfaces import IColumn

class IFooterPortlets(IPortletManager, IColumn):
     """"""

继承了Viewlet模板 footerPortlets.pt

<div id = "footer-portlets-container">
  test
  <tal:block replace="structure provider:footerPortlets" /> <!-- This part fails -->
</div>

这是错误的堆栈跟踪:

Traceback (innermost last):
  Module ZPublisher.Publish, line 126, in publish
  Module ZPublisher.mapply, line 77, in mapply
  Module ZPublisher.Publish, line 46, in call_object
  Module Shared.DC.Scripts.Bindings, line 322, in __call__
  Module Shared.DC.Scripts.Bindings, line 359, in _bindAndExec
  Module Products.CMFCore.FSPageTemplate, line 237, in _exec
  Module Products.CMFCore.FSPageTemplate, line 177, in pt_render
  Module Products.PageTemplates.PageTemplate, line 79, in pt_render
  Module zope.pagetemplate.pagetemplate, line 113, in pt_render
  Module zope.tal.talinterpreter, line 271, in __call__
  Module zope.tal.talinterpreter, line 343, in interpret
  Module zope.tal.talinterpreter, line 888, in do_useMacro
  Module zope.tal.talinterpreter, line 343, in interpret
  Module zope.tal.talinterpreter, line 533, in do_optTag_tal
  Module zope.tal.talinterpreter, line 518, in do_optTag
  Module zope.tal.talinterpreter, line 513, in no_tag
  Module zope.tal.talinterpreter, line 343, in interpret
  Module zope.tal.talinterpreter, line 531, in do_optTag_tal
  Module zope.tal.talinterpreter, line 513, in no_tag
  Module zope.tal.talinterpreter, line 343, in interpret
  Module zope.tal.talinterpreter, line 742, in do_insertStructure_tal
  Module Products.PageTemplates.Expressions, line 218, in evaluateStructure
  Module zope.tales.tales, line 696, in evaluate
   - URL: file:/home/user/Plone/zinstance/src/santasport/santasport/templates/plonetheme.sunburst.skins.sunburst_templates.main_template.pt
   - Line 181, Column 3
   - Expression: <StringExpr u'footerPortlets1'>
   - Names:
      {'container': <ATDocument at /Santasport/front-page>,
       'context': <ATDocument at /Santasport/front-page>,
       'default': <object object at 0xb77bc7d0>,
       'here': <ATDocument at /Santasport/front-page>,
       'loop': {},
       'nothing': None,
       'options': {'args': ()},
       'repeat': <Products.PageTemplates.Expressions.SafeMapping object at 0xb4a8e34c>,
       'request': <HTTPRequest, URL=http://127.0.0.1:8080/Santasport/front-page/document_view>,
       'root': <Application at >,
       'template': <FSPageTemplate at /Santasport/front-page/document_view>,
       'traverse_subpath': [],
       'user': <PropertiedUser 'admin'>}
  Module zope.contentprovider.tales, line 80, in __call__
  Module plone.app.viewletmanager.manager, line 154, in render
  Module plone.app.viewletmanager.manager, line 85, in render
  Module zope.browserpage.simpleviewclass, line 44, in __call__
  Module Products.Five.browser.pagetemplatefile, line 125, in __call__
  Module Products.Five.browser.pagetemplatefile, line 59, in __call__
  Module zope.pagetemplate.pagetemplate, line 113, in pt_render
  Module zope.tal.talinterpreter, line 271, in __call__
  Module zope.tal.talinterpreter, line 343, in interpret
  Module zope.tal.talinterpreter, line 531, in do_optTag_tal
  Module zope.tal.talinterpreter, line 513, in no_tag
  Module zope.tal.talinterpreter, line 343, in interpret
  Module zope.tal.talinterpreter, line 742, in do_insertStructure_tal
  Module Products.PageTemplates.Expressions, line 218, in evaluateStructure
  Module zope.tales.tales, line 696, in evaluate
   - URL: /home/user/Plone/zinstance/src/santasport/santasport/templates/footerPortlets.pt
   - Line 3, Column 1
   - Expression: <StringExpr u'footerportlets'>
   - Names:
      {'args': (),
       'container': <ATDocument at /my-theme/front-page>,
       'context': <ATDocument at /my-theme/front-page>,
       'default': <object object at 0xb77bc7d0>,
       'here': <ATDocument at /my-theme/front-page>,
       'loop': {},
       'nothing': None,
       'options': {},
       'repeat': <Products.PageTemplates.Expressions.SafeMapping object at 0xb4a7dcfc>,
       'request': <HTTPRequest, URL=http://127.0.0.1:8080/my-theme/front-page/document_view>,
       'root': <Application at >,
       'template': <Products.Five.browser.pagetemplatefile.ViewPageTemplateFile object at 0xb5e055ac>,
       'traverse_subpath': [],
       'user': <PropertiedUser 'admin'>,
       'view': <Products.Five.viewlet.viewlet.SimpleViewletClass from /home/user/Plone/zinstance/src/my-theme/my-theme/templates/footerPortlets.pt object at 0xb4a3f52c>,
       'views': <Products.Five.browser.pagetemplatefile.ViewMapper object at 0xb5e2cdac>}
  Module zope.contentprovider.tales, line 66, in __call__
ContentProviderLookupError: footerPortlets

编辑:

我通过将我的viewlet添加到viewlets.xml并将其添加到我的profiles-folder(作为其中一个教程说FML)来使我的代码工作得有所改善,但我没有真正测试它,而是进行了调查Mikko的教程非常适合开箱即用。

Ps:有关如何标记此问题的想法吗?

1 个答案:

答案 0 :(得分:1)

您需要导入portlets.xml配置。

最直接的方法是通过ZMI中的portal_setup工具。在“导入”选项卡上(在“选择配置文件”或“快照”选择框中)查找产品名称,然后在页面重新加载时(显示“可用导入步骤”,“产品配置文件的名称”),您需要查找Portlets列表中的导入步骤(“导入portlet管理器,类型,分配和黑名单”),勾选它的框,然后点击底部的“导入所选步骤”按钮。

WebLion教程稍微模糊地记录了“配置现已完成。卸载主题,重新启动Zope并重新安装主题。”。 Plone.org文档似乎完全省略了它。