1

Тема: Blueberry: философия. А так же про шаблоны, макросинтаксис, модули

Получилось коротко и весьма сумбурно. Но я давно хотел написать и всё никак не получалось. поэтому пусть пока так, чем никак, потом поправлю.

В отличии от предыдущих версий скрипта, где использовались "местные" шаблоны, в новой версии шаблоны "глобальные". Это обусловленно в первую очередь направленностью движка (он больше не новостной). То есть, шаблоны будут на всей странице.

Благодаря работе Tags`ов, можно значительно расширить и упростить HTML, при этом в полную силу работать и с PHP. Tags это такой "альтернативный" синтаксис PHP, но более понятный и более удобный. Другими словами, с помощью Tags можно изменить любой тег (<это_тег />) или его атрибут (<это_тег а_это="атрибут" />), превратив это в функцию и параметры (тег - функция, атрибуты - параметры).

Использовать можно как вместе (some тут это функция):

<some param="ля-ля-ля" />

Так и раздельно (тут "расширен" только атрибут password, тег div является не тронутым):

<div password="1234">запароленная запись-пись-пись</div>

Для примера далеко ходить не надо. Получать же это и отображать можно просто:

<data src="album">
  %{album.name} (%{artist.name})<br />
</data>

Скрипт пройдёт по цепочке связей (отношений/релэйшенов) и даст возможность не только получить всё по-человечески, но и сформировать вывод. "По-настоящему" пришлось бы делать много телодвижений, которые мало того что нудные, так ещё и страшные (вы видели как танцуют пьяные люди?).

Слова со знаками процента в начале - макросинтаксис. Вообще, его несколько типов: %name, ${name}, #{name} и %{name}. Первый тип служит для работы с небольшими кусками текста, такими как шаблоны почтовых сообщений или шаблоны перевода. Второй и третий работают во всех шаблонах-дизайна (те самые шаблоны всех страниц), ${} это переменные (php-переменные), #{} - константы (тоже пхпшные). Оба типа можно не только выводить, но и определять (${name = 'Вася'}). Четвёртый тип это алиас для ${tmp.что-то-очень-временное-и-рабочее}, как таковой он используется не в шаблоне, а в некоторых тегах. В отличии от ${}, который виден во всём шаблоне и перебивается или задаётся только пользователем, %{} задать нельзя, и вне своего поля действия работать не будет.

Пример:

${some} работает, а %{album.name} нет.
<data src="album">
  %{album.name} сейчас работает и ${some} работает тоже<br />
</data>
${some} и тут работает, а %{album.name} опять не работает.

Вы, наверное, обратили внимание на точки в именах. Точки в системе играют важную роль. В ${переменных} они означают ключи массива. Строки <?=$array['key']['anotherKey']; ?> и ${array.key.anotherKey} в шаблонах равноценны. В некоторых функциях - путь. К примеру, в Strawberry 2 есть функция отвечающая за подключение (load(), подключает php-файлы) и функция отвечающая за отображение (show(), подключает html-файлы [шаблоны]). В них как раз и передаются строки с точками.

<? show('sign.in'); ?> или <show src="sign.in" /> написаные в шаблоне выведут шаблон авторизации (папка sign/, файл in.html).

Признанный мастер чинпоко, а-ай ^_^

2

Re: Blueberry: философия. А так же про шаблоны, макросинтаксис, модули

Работа тегов на примере hello_world

В системе есть два типа тегов: tag и container. Отличие container`а от tag`а лишь в закрывающем теге.
Container

<div>какой-то текст</div>

Tag

<img />

У container`а может и не быть закрывающего тега

<div />

Но у tag`а не может быть закрывающего

<img>так нельзя</img>

Тонкости можно посмотреть на примере hello_world. hello_world это container. Выводим его без каких-либо атрибутов (тогда сработают дефолтные)

<hello_world />

Получаем

Hello World! My name is The Great Cornholio and I say "Fire! Fire!".

Теперь выведем с атрибутом name

<hello_world name="Алёшка" />

Получаем

Hello World! My name is Алёшка and I say "Fire! Fire!".

Теперь только с атрибутом #text (текст между открывающемся и закрывающемся тегами называется #text: <div some="атирибут some">а это текст который и называется атрибут #text</div>)

<hello_world>Покер рулит!</hello_world>

Получаем

Hello World! My name is The Great Cornholio and I say "Покер рулит!".

Ну и всё вместе

<hello_world name="Алёшка">Покер рулит!</hello_world>

Даст

Hello World! My name is Алёшка and I say "Покер рулит!".

Обработчик тега hello_world выглядит так

function container_hello_world($attr){
    $attr = array_merge(array(
        'name'  => 'The Great Cornholio',
        '#text' => 'Fire! Fire!'
    ), $attr); // это первая часть

    return replace('Hello World! My name is %name and I say "%#text".', $attr); // это вторая
}

В первой части мы устанавливаем атрибуты по умолчанию ($attr = array_merge и т.д.). Во второй возвращаем результат обработки. Можете заметить и макросинтаксис (%name, %#text), функция replace() его обрабатывает.

Признанный мастер чинпоко, а-ай ^_^