Я использую Plone 4.0.5, и я потратил целый день, пытаясь понять plone.app.contentmenu.
У меня есть тип архетипов на основе пользовательских папок, и я написал представлениедля этого.При использовании base_view по умолчанию (site / MyObject / base_view) все работает как положено.Однако при использовании моего собственного пользовательского представления меню начинают исчезать, и я не могу этого понять.
Во-первых, мой zcml,
<browser:page
for="my.product.interfaces.IMyType"
name="view"
class="my.product.browser.mytype.MyTypeViewView"
permission="zope.Public"
/>
Само представление столь же простонасколько это возможно:
class MyTypeViewView(BrowserView):
template = ViewPageTemplateFile("templates/mytype_view.pt")
def __call__(self):
return self.template()
И шаблон представления также уменьшен до нуля:
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
xmlns:tal="http://xml.zope.org/namespaces/tal"
xmlns:metal="http://xml.zope.org/namespaces/metal"
xmlns:i18n="http://xml.zope.org/namespaces/i18n"
lang="en"
metal:use-macro="context/main_template/macros/master"
i18n:domain="plone">
<body>
<metal:content-core fill-slot="content-core">
hi there.
</metal:content-core>
</body>
</html>
Если я захожу на сайт / MyObject / view, шаблон показывает «Привет!»,но plone-contentmenu-actions и plone-contentmenu-workflow исчезают.plone-contentmenu-фабрики, однако, остается.если я затем изменю ZCML, чтобы установить name = "view_test", и зайду на сайт / MyObject / view_test, ни одно из меню вообще не отобразится.
У меня есть пять различных представлений для этого типа, и я хочу рабочий процессменю, отображаемое на всех из них (или, по крайней мере, на моем главном виде, чтобы мне было проще тестировать, пока я это не выясню).
Если я переименую свое представление в base_view и открою URL объектанапрямую, у меня все еще нет доступного меню рабочего процесса.
Наверное, мой вопрос должен быть таким:
С какими именно правилами работает plone, чтобы решить, какие меню отображать и когда?Какой код мне следует читать?
- изменить:
Я добавил эту функцию в свой просмотр:
def __init__(self, context, request):
super(MyTypeViewView, self).__init__(context, request)
alsoProvides(self, IViewView)
alsoProvides(self.context, IViewView)
, если я установил точку останова в моем вызов код, я получаю это:
>>> IViewView.providedBy(self)
True
>>> IViewView.providedBy(self.context)
True
Я почти уверен, что мне нужно было только применить IViewView к самому представлению, но, независимо от этого, это ничего не меняет для меня.