8089
Комментарий:
|
← Версия 8 от 2010-07-14 12:52:31 ⇥
8903
|
Удаления помечены так. | Добавления помечены так. |
Строка 128: | Строка 128: |
Now we create a tabbed menu called MasterMenu: | Теперь создадим меню в форме закладок с именем '''!MasterMenu''': |
Строка 135: | Строка 135: |
Let's create a viewlet manager using this interface and the TabMenu as base class: | Давайте создадим менеджер вьюлетов используя этот интерфейс и '''!TabMenu''' в качестве базового класса: |
Строка 143: | Строка 143: |
We use the same context, request and view like before: | Мы используем тот же контекст, запрос и вид, как и перед этим: |
Строка 149: | Строка 149: |
So initially no menu get rendered: | Итак, изначально меню отображается пустым: |
Строка 157: | Строка 157: |
Now we register a menu tab which is also a viewlet manager: | Теперь зарегистрируем закладку, которая также является менеджером вьюлетов: |
Строка 168: | Строка 168: |
Also here, initially no tab get rendered: | И снова получаем пустое меню: |
Строка 176: | Строка 176: |
Now we register a menu action which is also a viewlet manager: | Теперь зарегистрируем действие, которое также является менеджером вьюлетов: |
Строка 186: | Строка 186: |
Also here, initially no tab get rendered: | И опять получаем пустое меню: |
Строка 194: | Строка 194: |
After setup the TabMenu, Tab and Action viewlet managers, we start to register a tab menu item: | После установки менеджеров вьюлетов '''!TabMenu''', '''Tab''' и '''Action''' мы начинаем регистрировать пункт меню закладки: |
Строка 212: | Строка 212: |
Now see what we get if the tab viewlet manager get rendered: | Теперь взгляните, что мы получаем, когда отображаем менеджер вьюлетов: |
Строка 226: | Строка 226: |
After showing how a tab menu item get used, we will register a menu action item. | После того, как вы увидели, как использовать пункт меню в форме закладки, давайте зарегистрируем действие. |
Строка 243: | Строка 243: |
Now see what we get if the action viewlet manager get used: | Теперь посмотрим, что мы получим с использованием менеджера вьюлетов действия: |
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:
Глобальное меню (GlobalMenu)
1 >>> from z3c.menu.simple.menu import GlobalMenuItem
2 >>> class MyGlobalLink(GlobalMenuItem):
3 ...
4 ... __name__ = u'MyGlobalLink'
5 ... urlEndings = 'myGlobal.html'
6 ... viewURL = 'myGlobal.html'
7 >>> defineChecker(MyGlobalLink, viewletChecker)
8 >>> zope.component.provideAdapter(
9 ... MyGlobalLink,
10 ... (zope.interface.Interface, IDefaultBrowserLayer,
11 ... IBrowserView, IMenu),
12 ... IViewlet, name='MyGlobalLink')
Теперь посмотрим, что случится если использовать менеджер вьюлетов IMenu:
Меню в форме закладок
Теперь создадим меню в форме закладок с именем MasterMenu:
Давайте создадим менеджер вьюлетов используя этот интерфейс и TabMenu в качестве базового класса:
Мы используем тот же контекст, запрос и вид, как и перед этим:
1 >>> masterMenu = MasterMenu(content, request, view)
Итак, изначально меню отображается пустым:
Теперь зарегистрируем закладку, которая также является менеджером вьюлетов:
И снова получаем пустое меню:
Теперь зарегистрируем действие, которое также является менеджером вьюлетов:
И опять получаем пустое меню:
После установки менеджеров вьюлетов TabMenu, Tab и Action мы начинаем регистрировать пункт меню закладки:
1 >>> from z3c.menu.simple.menu import TabItem
2 >>> class MyTab(TabItem):
3 ...
4 ... __name__ = u'MyTab'
5 ... url = 'myTab.html'
6 ... selectedViewNames = ['myTab.html']
7 >>> tabChecker = NamesChecker(('update', 'render', 'css', 'selected'))
8 >>> defineChecker(MyTab, tabChecker)
9 >>> zope.component.provideAdapter(
10 ... MyTab,
11 ... (zope.interface.Interface, IDefaultBrowserLayer,
12 ... IBrowserView, ITab),
13 ... IViewlet, name='MyTab')
Теперь взгляните, что мы получаем, когда отображаем менеджер вьюлетов:
После того, как вы увидели, как использовать пункт меню в форме закладки, давайте зарегистрируем действие.
1 >>> from z3c.menu.simple.menu import ActionItem
2 >>> class MyAction(ActionItem):
3 ...
4 ... __name__ = u'MyAction'
5 ... title = 'myAction'
6 >>> actionChecker = NamesChecker(('update', 'render', 'title'))
7 >>> defineChecker(MyAction, actionChecker)
8 >>> zope.component.provideAdapter(
9 ... MyAction,
10 ... (zope.interface.Interface, IDefaultBrowserLayer,
11 ... IBrowserView, IAction),
12 ... IViewlet, name='MyAction')
Теперь посмотрим, что мы получим с использованием менеджера вьюлетов действия: