parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Не вижу проблемы. Или не понял ее.

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 отдельно нет.