Найти - Пользователи
Полная версия: BB metal
Начало » Zope/Plone/Bluebream » BB metal
1
LightOfMooN
Может кто-нибудь попродробней объяснить механизм получения макросов?

описанное тут
http://wiki.python.su/%D0%94%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D1%86%D0%B8%D0%B8/Bluebream/%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE#A.2BBBwEMAQ6BEAEPgRBBEs-
не даёт полного понимания.

Пример:
<b metal:use-macro="container/master_page/macros/copyright">
Macro goes here
</b>
Пытаюсь сделать по примеру:
есть файл index.pt
в нём определено макро:
<metal:block define-macro="master">
в том же каталоге другой шаблон. К примеру, test.pt
пытаюсь вызвать макро:
<html metal:use-macro="container/index.pt/macros/master">
Получаю KeyError: ‘container’

Убрал container:
<html metal:use-macro="index.pt/macros/master">
Получил PTRuntimeError:

Ниже идёт другой пример:
<p metal:define-macro="title"
tal:content="template/title">
template's title
</p>
Пытаюсь просто в тале вызвать template/title
аналогично KeyError: ‘container’

Подскажите, что я делаю не так, и как надо))
И как указать путь к файлу макроса, зная его от корня продукта (имеется ввиду в файловой системе).
Темплейты же могут из разных мест вызываться. Не хотелось бы в каждом указывать путь относительно container.

Есть вариант зарегистрировать вид @@mainmacro для любого интерфейса, но не очень нравится ощущение того, что с любого объекта можно будет вызвать пустой шаблон, дописав вид в строке адреса.
LightOfMooN
сделал через вид
файл macro_main.pt:
<metal:block metal:define-macro="master">
регистрация в zcml:
<browser:page
for="*"
name="macro_main"
permission="zope.Public"
template="macro_main.pt"
/>
вид работает, но метал не включается:
metal:use-macro="context/@@macro_main/macros/master"
приводит к LocationError: (<zope.browserpage.simpleviewclass.SimpleViewClass from c:\intershop\src\intershop\browser\macro_main.pt object at 0x03414630>, ‘macros’)
metal:use-macro="macro_main.pt/macros/master"
приводит к PTRuntimeError:

Похоже, metal:define-macro не работает?

В тал шаблонах из:
•root - the system's top-most object.
•here - the object to which the template is being applied.
•container - the template's container object.
•template - the template itself.
•request - the publishing request object.
•user - the authenticated user object.
работат только request..
LightOfMooN
Посмотрел репозиторий astoon'a “bbru”: там совсем не как в документации к BlueBream.
Регистрация макро через zcml-директиву macro.
Вызов в шаблоне тоже не из учебника =) <metal:block use-macro=“macro:poster”>
Попытался сделать по аналогии, но видать ещё слишком зелёный для этого. Директива zcml не проходит ('Unknown directive', u'http://namespaces.zope.org/z3c', u'macro')
(namespace z3c включил)
Хоть кто-нибудь, уделите пожалуйста 5 минут времени, опишите наконец решение =)
Sleepwalker
Есле не использовать решения от z3c, то вы все правильно написали до момента использования макроса.

metal:use-macro=“context/@@macro_main/macros/master” - должен иметь следующий вид:

<metal:block use-macro=“context/@@<имя_вида>/<название_макроса>”></metal:block>

В вашем же случае:

<metal:block use-macro=“context/@@macro_main/master”></metal:block>
LightOfMooN
Господи, оно заработало =)
Вы мой спаситель.

P.S. упало доверие к офф.документации
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB