Я ухватился за идею "Микро-гридов" (Компонентов) не могу понять ловлю ли велосипед или "стоит попробовать".
andylars 21.07.2015 18:21
в Templet как я понимаю - технически шаблоном является класс (в который он автоматически оборачивается).
Отсюда, у одной сущности шаблона Templet есть основной шаблон корневого уровня, он же @main
и могут быть методы - то есть декомпозиция на 1 уровень вниз.
Поддерживается ли вложенность, я не знаю, я в процессе чтения доки по Templet.
Но в основной идее, как я понял, шаблоне скорее плоский, чем многовложенный.
Я же, предлагаю примерно то же, только у меня Шаблон это скорее набор более мелких элементарных шаблончиков (микро-гридов), которые состыкованы в опр.порядке
и которым задан какой-то набор базовых параметров.
Фактически, получается, что имеем некий репозитарий/библиотеку элементарных и не очень - микро-гридов(шаблончиков),
из которых мы собираем конечную конституцию рендера.
Грид - это элементарный динамический шаблон (т.е. с кодом типа циклов, итераций если надо),
который имеет параметры:
- слоты: в них помещаются объекты которые могут быть отображены в body of main (строки, числа, код-на-парсер или вызовы вложенных гридов)
- опции (если грид умеет какие-то динамические вещи, для которых есть опции)
Конфигурация - это уже конечная состывка гидов в конкретном порядке ч/з слоты и попутное присваивание им параметров.
Конфигурацию можно отдельно хранить - тогда это будет Тема. Поскольку вложение в слоты кода и других гридов используется через junction, то
такую тему можно безопасно сохранить в виде хеша. Потому, что код не исполнится до момента обращения к junction уже внутри конкретного грида.
И потом на основе Темы-Конфигурации - перекрывать только часть параметров (через сложение хешей).
Изначально задумалось это для того, чтобы можно было дробить шаблон на элементарные универсальные гриды,
например какая-то "сетка итераций" может быть повторно использована в шаблоне форума, или галереи.
То есть, это аналог "компонентов" в Desktop UI.
Можно создать "тяжелый" компонент, тогда это будет скорее как обычный большой плоский шаблон.
А можно наделать кучу универсальных и строить из них, как из кубиков, например как-то так:
^Tpl:MainGrid[
$.SideBar{
^Tpl:TopPreview[
$.OptAmount(10)
$.HashItems[$Model.Content.Article.HotList]
]
^Tpl:TopPreview[
$.OptAmount(5)
$.SortOrder(desc)
$.HashItems[$Model.Content.News.HotList]
]
}
$.Body{
^Tpl:Article[
$.Title[$Model.Content.Article.Id.[100].Title]
$.Text[$Model.Content.Article.Id.[100].Body]
]
}
$.Footer[Copyright (c) 2015]
]
Опять меня привело к той же "серебярной пуле" - микро-модельному паттерну... не понимаю, кручусь вокруг чего-то одного и того же,
вроде бы и работает ведь, но как будто-все это укладывается во что-то одно, что я никак не могу охватить одним взглядом.
В общем, пока вот такие фантазии, может быть даже и воспаленные :) ведь это еще все надо поженить с CSS и JS
но к этому явно надо прикрутить assign, т.к это сразу погрязнет в process'ах.
Но главное, что такую модель можно просто использовать и не заморачиваясь в сложные случаи,
т.е. на 1-уровне декомпозиции - Page -> Header,Body,Footer.
В общем, гипотеза нуждается в тычках палочкой, попробую на простом, посмотрю что получится...
понятно, что надо урулить именование, и конфигурование сделать наверное не передачей одного супер-аргумента