Mar*_*ers 11
使用的Viewlets两个usecases.可以在呈现页面的不同部分中插入Viewlet,具体取决于您向其注册的Viewlet管理器以及Viewlet适用的接口.
Viewlet管理器确定插入Viewlet的位置,以及注册Viewlet的接口确定Viewlet将在哪种URL可见.注册"*"手段显示无处不在,并注册它"Products.ATContentTypes.interfaces.IATDocument"意味着只有在查看页面时才能看到它.
要查看哪些Viewlet管理器可用以及在那里注册了哪些Viewlet,对于任何给定的URL,只需在URL中添加"/ @@ manage-viewlets"即可.在那里你可以看到有一个plone.abovecontent和一个plone.abovecontenttitleViewlet管理器,可以让你在那里插入HTML.其中大部分是在plone.app.layout包中定义的,你需要在那里找到用该名称注册的接口(在buildout的egg目录中找到它).
您使用ZCML注册一个Viewlet,因此您需要已经为您的站点加载了一个python包.要插入任意模板,只需将其注册到browser:viewlet指令:
<browser:viewlet
name="your.html.snippet"
for="Products.ATContentTypes.interfaces.IATDocument"
manager="plone.app.layout.viewlet.interfaces.IAboveContent"
template="htmlsnippet.pt"
permission="zope.Public"
/>
Run Code Online (Sandbox Code Playgroud)
现在,htmlsnippet.pt为plone.abovecontentViewlet管理器注册了一个基于该模板的视图.该模板是一个完整的zope页面模板,因此您可以在其中使用国际化等内容:
<div i18n:domain="your">
<h3 i18:translate="html_snippet_header">This is a snippet of HTML that'll be injected into all Pages!</h3>
</div>
Run Code Online (Sandbox Code Playgroud)
您还可以添加完整的浏览器视图类来备份Viewlet,模板可以通过"view /"命名空间访问该类,因此您可以在其中添加一个方法来返回要插入的随机文本.
您可以通过上述'/ @@ manage-viewlets'URL手动启用Viewlet,也可以使用GenericSetup配置文件,其中viewlets.xml允许您管理Viewlet的注册和排序:
<?xml version="1.0"?>
<object>
<order manager="plone.abovecontent" skinname="My Theme"
based-on="Plone Default">
<viewlet name="your.html.snippet" insert-before="*"/>
</order>
</object>
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅Plone.org上的viewlets教程.