Цитата:
|
1. как подключить не скомпилированный шаблон на страницу (в формате *.ss)?
|
https://github.com/kobezzza/Snakeski...B5%D1%80%D0%B5
Цитата:
|
{proto my_pro() =>}
//содержание
{/proto}
|
Да, мне казалось это очевидно, спс за наводку
Цитата:
|
Можно ли вызвать шаблон внутри шаблона?
|
Конечно, ты же можешь вызывать любую функцию в шаблоне, а шаблон - это функция, есть даже сахарок для этой задачи:
https://github.com/kobezzza/Snakeskin/wiki/call
Цитата:
|
4. В каких случаях лучше использовать Блоки, а в каких Прототипы?
|
Тут нужно пояснить: с прототипами всё ясно, но какие блоки ты имешь ввиду: статичные или вызываемые?
Отвечу пока кратко тут: прототипы и вызываемые блоки - это методы шаблона, только прототипы приватные, а блоки - публичные, также у них есть некоторые принципиально архитектурные отличия: прототип обрабатывается на этапе трансляции, блок в рантайме, следовательно: прототип увеличивает время трансляции и размер конечного файла, но выполняется супер быстро (+ оптимизация хвостовой рекурсии), но менее гибкий чем блок, а блок быстрее транслируется и занимает меньше места в конечном файле и более гибкий, но работает медленне и нет оптимизации рекурсии, главное, что нужно знать, что их можно использовать друг с другом, т.е. блок вкладывать в протип и наоборот и получать достоинства обеих реализаций.
Цитата:
|
Как/можно_ли объявить независимый прототип/блок, который можно использовать в любом шаблоне?
|
Формально такое сделать нельзя, если ты хочешь заюзать блок или прототип шаблона А в шаблоне Б, то нужно шаблон Б отнаследовать от А и все его методы (а прототипы и блоки фактически таковыми являются) отнаследуются с ним, но то, что хочешь сделать ты делается очень просто: просто общий функционал, который нужен во всех независимых шаблонах выносится в отдельные шаблоны и всё:
/// Независимый блок - это шаблон
{template blockName(arg)}
{arg}
{/template }
{template a()}
{call blockName('аргумент')}
{/template}
{template b()}
{call blockName('другой аргумент')}
{/template}
Вариант наследования более гибкий, т.к. в дочернем шаблоне тот или иной блок или прототип можно переопределить или доопределить с помощью директивы super.
Я обычно завожу уровень супершаблонов, в котором реализован базисный функционал и потом наследуюсь от них, как раз для таких задач были введены директивы placeholder и interface.
- proto base->logo()
...
- proto base->icon()
...
- placeholder base()
...
- template button() extends base
- apply logo()
В моём проекте 3-и уровня супершаблонов, это позволят добится максимального code-reuse и очень просто поддерживать. Вообще ОО-подход - это главная фича SS и сделана лучше всего, поэтому не нужно боятся создавать уровни наследования, т.к. сама либа это пропагандирует.
***
Спасибо за вопросы, распишу ответы в FAQ, приступлю скорее всего с пятницы, т.к. сейчас завал по другим делам.