我的目标是在每一篇Plone文章前面(在页面标题和第一段之间)插入一些HTML代码?我在跑扑通四号。有人知道如何实现这一点吗?
另一个问题是:是否可以在每一篇Plone文章中随机放置一些HTML代码?

最佳答案

两种情况下均使用viewlets。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的eggs目录中找到它)。
使用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"
    />

现在,基于htmlsnippet.pt模板的viewlet已注册到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>

您还可以添加一个完整的浏览器视图类来备份viewlet,模板可以通过“view/”命名空间访问该类,因此您可以在其中添加一个方法来返回要插入的随机文本。
您可以通过前面提到的'/@“管理viewlet s”URL手动启用viewlet,也可以使用GenericSetup配置文件,其中viewlets.xml让您管理viewlets的注册和排序:
<?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>

有关更多信息,请参阅Plone.org上的viewlets tutorial

关于python - 如何在Plone中注入(inject)模板代码?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6503861/

10-10 22:47