527
Комментарий:
|
3572
|
Удаления помечены так. | Добавления помечены так. |
Строка 7: | Строка 7: |
The z3c.menu.simple package provides a simple menu implementation which allows you to implement simply menus based on content providers and viewlets. Right now there are some SimpleMenuItem menu item implementations and a tabbed menu with tab/tab-item and action/action-item located in this package. Let's see what this means. |
Пакет ''z3c.menu.simple'' предоставляет простую реализацию меню, которая позволяет создавать простые меню на базе контент провайдеров и вьюлетов. На данный момент в пакете присутствует несколько реализаций пунктов меню '''!SimpleMenuItem''', а также меню в форме закладок. Давайте рассмотрим более детально, что все это значит. |
Строка 14: | Строка 12: |
{{{#!highlight python >>> from zope.viewlet.interfaces import IViewlet >>> from zope.viewlet.interfaces import IViewletManager }}} Давайте создадим меню, что, технически, означает создание интерфейса менеджера вьюлетов: {{{#!highlight python >>> class IMenu(IViewletManager): ... """Menu viewlet manager.""" }}} Используя этот интерфейс можно создать менеджер вьюлетов: {{{#!highlight python >>> from zope.viewlet import manager >>> Menu = manager.ViewletManager('left', IMenu) }}} Теперь нам следует определить контекст: {{{#!highlight python >>> import zope.interface >>> from zope.app.container import contained >>> from zope.app.container.interfaces import IContained >>> class Content(contained.Contained): ... zope.interface.implements(IContained) >>> root['content'] = Content() >>> content = root['content'] >>> from zope.publisher.browser import TestRequest >>> request = TestRequest() >>> from zope.publisher.interfaces.browser import IBrowserView >>> class View(contained.Contained): ... zope.interface.implements(IBrowserView) ... def __init__(self, context, request): ... self.__parent__ = context ... self.context = context ... self.request = request >>> view = View(content, request) >>> menu = Menu(content, request, view) }}} Так что изначально не будет отображено никакое меню: {{{#!highlight python >>> menu.update() >>> menu.render() u'' }}} Но теперь мы регистрируем пункт меню для '''IMenu''': {{{#!highlight python >>> import zope.component >>> from zope.publisher.interfaces.browser import IDefaultBrowserLayer >>> from z3c.menu.simple.menu import ContextMenuItem >>> class MyLocalLink(ContextMenuItem): ... ... __name__ = u'MyLocalLink' ... urlEndings = 'myLocal.html' ... viewURL = 'myLocal.html' >>> # Create a security checker for viewlets. >>> from zope.security.checker import NamesChecker, defineChecker >>> viewletChecker = NamesChecker(('update', 'render')) >>> defineChecker(MyLocalLink, viewletChecker) >>> zope.component.provideAdapter( ... MyLocalLink, ... (zope.interface.Interface, IDefaultBrowserLayer, ... IBrowserView, IMenu), ... IViewlet, name='MyLocalLink') }}} Давайте посмотрит, что случится если использовать менеджер вьюлетов '''IMenu''': {{{#!highlight python >>> menu.update() >>> print menu.render() <a href="http://127.0.0.1/content/myLocal.html" class="inactive-menu-item">MyLocalLink</a> }}} |
z3c.menu.simple - Простые меню на базе вьюлетов
Содержание
Простое меню
Пакет z3c.menu.simple предоставляет простую реализацию меню, которая позволяет создавать простые меню на базе контент провайдеров и вьюлетов. На данный момент в пакете присутствует несколько реализаций пунктов меню SimpleMenuItem, а также меню в форме закладок. Давайте рассмотрим более детально, что все это значит.
Контекстное меню (ContextMenu)
Давайте создадим меню, что, технически, означает создание интерфейса менеджера вьюлетов:
Используя этот интерфейс можно создать менеджер вьюлетов:
Теперь нам следует определить контекст:
1 >>> import zope.interface
2 >>> from zope.app.container import contained
3 >>> from zope.app.container.interfaces import IContained
4 >>> class Content(contained.Contained):
5 ... zope.interface.implements(IContained)
6 >>> root['content'] = Content()
7 >>> content = root['content']
8 >>> from zope.publisher.browser import TestRequest
9 >>> request = TestRequest()
10 >>> from zope.publisher.interfaces.browser import IBrowserView
11 >>> class View(contained.Contained):
12 ... zope.interface.implements(IBrowserView)
13 ... def __init__(self, context, request):
14 ... self.__parent__ = context
15 ... self.context = context
16 ... self.request = request
17 >>> view = View(content, request)
18 >>> menu = Menu(content, request, view)
Так что изначально не будет отображено никакое меню:
Но теперь мы регистрируем пункт меню для IMenu:
1 >>> import zope.component
2 >>> from zope.publisher.interfaces.browser import IDefaultBrowserLayer
3 >>> from z3c.menu.simple.menu import ContextMenuItem
4 >>> class MyLocalLink(ContextMenuItem):
5 ...
6 ... __name__ = u'MyLocalLink'
7 ... urlEndings = 'myLocal.html'
8 ... viewURL = 'myLocal.html'
9 >>> # Create a security checker for viewlets.
10 >>> from zope.security.checker import NamesChecker, defineChecker
11 >>> viewletChecker = NamesChecker(('update', 'render'))
12 >>> defineChecker(MyLocalLink, viewletChecker)
13 >>> zope.component.provideAdapter(
14 ... MyLocalLink,
15 ... (zope.interface.Interface, IDefaultBrowserLayer,
16 ... IBrowserView, IMenu),
17 ... IViewlet, name='MyLocalLink')
Давайте посмотрит, что случится если использовать менеджер вьюлетов IMenu: