我有一段HTML内容,我不断在主页上更新。理想情况下,我想转到页面,填写表单,并将表单数据填充到HTML片段(viewlet?)
对任何建议持开放态度。 (创建自定义内容类型,使用mysql db填充它。任何东西!)
答案 0 :(得分:2)
您可以使用标记界面和archetypes.schemaextender优雅地完成此操作。假设您的主页设置在新Plone网站的首页上 - 文档成为Plone网站的默认视图 - 添加到您的自定义产品interfaces.py
:
class IHomepage(Interface):
"""Marker interface flagging a document as the homepage.
"""
到configure.zcml
:
<class class="Products.ATContentTypes.interfaces.document.IATDocument">
<allow interface=".interfaces.IHomepage" />
</class>
在ZMI中,在首页的“接口”选项卡上,将IHomepage
设置为提供的界面。
现在您可以注册仅适用于您的首页对象的schemaextender。
创建新文件schemaextender.py
。
from zope.component import adapts
from zope.interface import implements
from Products.Archetypes import atapi
from archetypes.schemaextender.field import ExtensionField
from archetypes.schemaextender.interfaces import ISchemaExtender
from interfaces import IHomepage
class HomepageBlurbTextField(ExtensionField, atapi.TextField):
"""Extra text for the homepage.
"""
class HomepageExtender(object):
adapts(IHomepage)
implements(ISchemaExtender)
fields = [
HomepageBlurbTextField('blurb',
required=True,
searchable=True,
storage=atapi.AnnotationStorage(),
validators=('isTidyHtmlWithCleanup',),
default_output_type='text/x-html-safe',
widget=atapi.RichWidget(
label=u"Blurb",
description=u"Make the site sound cool.",
rows=25,
allow_file_upload=False),
),
]
def __init__(self, context):
self.context = context
def getFields(self):
return self.fields
添加到configure.zcml
:
<adapter factory=".schemaextender.HomepageExtender" />
(这是一个简单的例子;请参阅archetypes.schemaextender的文档,了解更多高级功能,如字段重新排序,仅注册到特定的浏览器层等)。
重新启动网站,编辑首页,然后 - 嘿presto - 为您的模糊创建一个新字段。
现在你所要做的就是展示它。你可以在这里做你喜欢的事情,记得注册你的IHomepage
界面。假设您希望blurb出现在页面的标题中:
在browser/viewlets.py
:
from Acquisition import aq_inner
from plone.app.layout.viewlets import common
class HomepageHeaderViewlet(common.ViewletBase):
@property
def blurb(self):
context = aq_inner(self.context)
return context.getField('blurb').get(context)
在browser/homepageheader.pt
:
<div id="homepage-blurb" tal:content="structure view/blurb|nothing" />
在browser/configure.zcml
:
<browser:viewlet
name="example.homepageheader"
for="..interfaces.IHomepage"
manager="plone.app.layout.viewlets.interfaces.IPortalTop"
class=".viewlets.HomepageHeaderViewlet"
template="homepageheader.pt"
permission="zope.Public"
/>
答案 1 :(得分:0)
这取决于你的用例,但通常你可以使用带有几个静态文本portlet的collective.portletpage之类的代码来创建你想要的页面。使用plone.app.theming,您可以根据需要重新设置html。
例如我们的新主页http://www.pretaweb.com是使用plone.app.theming,collective.portletpage和Products.ContentWellPortlets完成的。
Products.Collage是我们也使用过的portletpage的另一种替代方法。