ПРИМЕЧАНИЕ
В связи с успешным завершением этой темы документация по предоставленной ссылке была обновлена.Он больше не содержит неполную информацию, как описано.
У меня проблема с просмотром окон, которые появляются в viewletManager plone.portalheader, и добавлением их в определенные места (без использования линейной конкатенации).Моя цель - сделать HTML-код идентичным моему HTML-шаблону макета.Я не хочу и не требую, чтобы вьюлеты меняли позиции, и я хотел бы, чтобы пара этих элементов оказалась в одной и той же всеобъемлющей разметке.
Я читал следующую документацию, но, похоже,конфликт с моими настройками (это Plone 4.1):
http://collective -docs.readthedocs.org / en / latest / views / viewlets.html # render-viewlets-with-precision-layout
Я не уверен, является ли эта конкретная страница устаревшей или неправильной (похоже, что большинство ссылок на «табуляцию» были заменены пробелами. Например, <table>
теперь < le>
) или еслиЯ делаю что-то не так (что я бы не сказал об этом).
Похоже, когда я хочу вызвать новый заголовок, созданный из примера, цитирование something.header
терпит неудачу внутри моего portal_header.ptфайл.Если кто-то может взглянуть на пример и дать мне знать, если какие-то важные части отсутствуют, это очень помогло бы мне.
Включая мой код:
theme / browser / configure.zcml(часть):
<!-- The portal header -->
<browser:viewlet
name="plone.header"
manager="plone.app.layout.viewlets.interfaces.IPortalTop"
layer=".interfaces.IThemeSpecific"
class=".header.HeaderViewlet"
template="templates/portal_header.pt"
permission="zope2.View"
/>
theme / browser / templates / portal_header.pt:
<header>
<div class="container_12">
<div tal:replace="structure provider:theme.header" />
</div>
</header>
theme / browser / header.py:
from Acquisition import aq_inner
from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
from plone.app.layout.viewlets import common as base
#import plonetheme.something.browser.viewlets.common as something #left over from original article
def render_viewlet(factory, context, request):
context = aq_inner(context)
viewlet = factory(context, request, None, None).__of__(context)
viewlet.update()
return viewlet.render()
class HeaderViewlet(base.ViewletBase):
index = ViewPageTemplateFile('header_items.pt')
def update(self):
base.ViewletBase.update(self)
self.subviewlets = {}
def renderViewlet(self, viewlet_class):
return render_viewlet(viewlet_class, self.context, self.request)
def render(self):
self.subviewlets["logo"] = self.renderViewlet(base.LogoViewlet)
self.subviewlets["search"] = self.renderViewlet(base.SearchBoxViewlet)
return self.index()
theme/browser/header_items.pt:
<header>
<div class="container_12">
<div tal:replace="structure view/subviewlets/logo" />
<div tal:replace="structure view/subviewlets/search" />
</div>
</header
Это все, что я изменил в соответствии со статьей, которую я перечислил выше.Я не уверен, что мне следует изменить viewlets.xml.
Исходя из того, что я понимаю в статье, он хочет переопределить и заменить plone.portalheader
в portal_header.pt на theme.header
, используя класс, предоставленный вheader.py.Тем не менее, я не изменяю viewlets.xml, где, как мне кажется, проблема кроется.Или это может быть связано с тем, что я заменяю plone.portalheader
на theme.header
, и я не меняю имя представления в файле configure.zcml с plone.header
на theme.header
.
IЯ пробовал целую кучу перестановок на том, что я считаю решением, и я ничего не могу заставить работать, даже пытаясь изменить viewlets.xml.
Когда я следую примеру, я получаю сообщение об ошибкечто говорит:
ContentProviderLookupError(u'theme.header',)