Не вижу проблемы. Или не понял ее.
andylars 21.07.2015 01:23
/ 21.07.2015 01:27
Подумайте, как у вас будет работать partial, если потребуется использовать одни и те же куски шаблонов в разных частях приложения. Как использовать одинаковые куски шаблонов в других проектах.
У меня шаблон (фактически пакет шаблонов) - это отдельный класс. Куски - методы.
В чем проблема использовать методы класса в другом месте, классе?
В чем проблема использования тех же классов в других проектах?
Тем более, если класс статический, то любой "кусок" класса/пакета по сути одинаковый даже если разбить по файлу на метод, если
не используется конструктор, если используется, то можно как-то обозначить init-овый файл-кусок/модуль.
Пока, что не понимаю, или не вижу проблему.
Я привел пример как бы с одним "пакетом". Но можно ввести по классу на пакет.
С директорией /Theme1 /Theme2 - где лежат плоско все куски шаблонов одного пакета/темы
#-- /Template/Theme1/GridIndex.p ---
@CLASS
Tpl_Theme1
@OPTIONS
partial
@GridIndex[_param][locals]
<html>
<body>
$_param.Header
$_param.Body
$_param.Footer
</body>
</html>
#--- /Template/Theme1/Header.p ---
@CLASS
Tpl_Theme1
@OPTIONS
partial
@Header[_param][locals]
#...
из папки производится автоматический или задействованный ^use из пакета
получается некая аналогия с packages, что-то вроде
from Tpl_Theme1 import *
или
from Tpl_Theme1 import GridIndex,Header
И принцип черного ящика (инкапсуляции) тут как раз соблюдается в полной мере, ведь у каждого метода (куса шаблона) стоит [locals] по-умолчанию, но бросить в аргумент более глобальный объект-окружение, тоже не проблема.
Все происходит сразу вот так:
Тема, шаблон, слот
при этом, сразу видна структурная конфигурация того, что будет отрендерено
@main[]
^Tpl_Theme1:GridIndex[
$.Header[
$.Title{
^Tpl_Theme2:OtherTitle[
$.Title[это имелось в виду?]
]
}
]
$.Body{
^Tpl_Theme1:Content[
$.PageName[$CurrentPage]
$.Body{
^Tpl_Theme1:Article[
$.Mode[simple]
]
}
]
}
$.Footer[Copyright]
]
Или имелась ввиду именно проблема поддержки имен? Типа Header > Title > Sup,Text,Tagline
и в плоских именах методов это будет выглядеть как... какой-нить БЭМ
@Header_Title_Sup_Text
Но мне кажется и тут можно обыграть через hash. Если речь об обращении
Header.Title.Sup.Text вместо Header_Title_Sup_Text
Методы assign тут не нужны, ведь тут мы задаем значение "переменных в шаблонах" - как аргументы собственно вызова этого шаблона, которые перекрывают собственные default'ные
Другого места просто нет в принципе. Поэтому и Render'a отдельно нет.