Главная  /  Правка версии 1  /  Правка версии 2  /   /  Область пользователей

Отличия "Темплейты: Блоки верхнего уровня (v 1.x)" вер. 1 сравн. вер. 2

Заголовки:

Версия 1Версия 2
Templates: Top Level Blocks (v 1.x)Темплейты: Блоки верхнего уровня (v 1.x)

Содержимое:

<!--toc-->
## Основные замечания
Каждый блок начинавется с его определения и заканчивается командой `end`.
'end' [ 'skin' | 'view' | 'template' ]
Эта команда может опционально включать после себя тип блока. Например:
<% skin myskin %>
<% view master uses data %>
...
<% end view %>
<% end %>
Т.о. мы закрыли `skin` без типа блока и `view` со спецификацией.
Т.о. мы закрыли `skin` без типа блока и `view` с его указанием.
Это может использоваться как дополнительная проверка последовательности блоков.
## skin
### Синтаксис:
### Синтаксис
'skin' [NAME]
Это самая верхняя команда каждого темплейта.
`skin` может обозначаться специфичным именем или оно может отсутствовать, означая, что оно должно быть определено внешне в процессе сборки с использованием ключа `-s`.
### Примечания
- Если все созданные Вами skin'ы не собираются разделять любую часть с другим skin'ом, укажите его имя, иначе - опустите его и передайте в ключе.
- Если вы передаете имя skin'а в ключе `-s` оно должно совпадать с именем skin'а, которое используется в команде skin.
- Вы не можете использовать более одного имени skin'а в одной и той же компиляции `cppcms_tmpl_cc`.
**Например:**
Правильный пример 1:
foo.tmpl:
<% skin foo %>
...
<% end %>
cppcms_tmpl_cc foo.tmpl -s foo
Правильный пример 2:
foo.tmpl:
<% skin foo %>
...
<% end %>
cppcms_tmpl_cc foo.tmpl
Правильный пример 3:
foo.tmpl:
<% skin %>
...
<% end %>
cppcms_tmpl_cc foo.tmpl -s foo
Правильный пример 4:
foo.tmpl:
<% skin %>
...
<% end %>
bar.tmpl:
<% skin foo %>
...
<% end %>
cppcms_tmpl_cc foo.tmpl bar.tmpl -s foo
Неправильно - два различных skin'а в одной и той же компиляции:
foo.tmpl:
<% skin foo %>
...
<% end %>
bar.tmpl
<% skin bar %>
...
<% end %>
cppcms_tmpl_cc foo.tmpl bar.tmpl
Неправильно - неизвестное имя skin'а:
foo.tmpl:
<% skin %>
...
<% end %>
cppcms_tmpl_cc foo.tmpl foo.tmpl
## view
### Синтаксис:
### Синтаксис
'view' NAME 'uses' IDENTIFIER ['extends' NAME]
Создает новую view (класс C++) отвечающую за рендеринг содержимого страниц специфичного типа. `'uses' IDENTIFIER` определяет тип содержимого (какой-то объект наследуемый из `cppcms::base_content`) который должна рендерить эта view. В действительности, она определяет ссылочный элемент (reference member - прим.пер.) `content` этого типа.
Запомните это примечание, в некоторых случаях, Вам потребуется напрямую обращаться к элементу `content`.
Вы можете указать `'extends' NAME`, если требуется, чтобы новая создаваемая view наследовала другую view.
### Ограничения наследования
Когда Вы создаете наследуемую view, содержимое потомка также должно наследоваться из содержимого ее родителя.
Например:
<% view master uses data::master %>
..
<% end view %>
<% view page uses data::page extends master %>
...
<% end view %>
Впоследствии, `data::page` _должен_ наследоваться из `data::master`.
_Объяснение:_
Когда Вы создаете родителя `master`, Вам также и необходимо обеспечить для него содержимое. Он получает содержимое своего потомка, потому и может работать, т.к. содержимое потомка наследовалось из содержимого его родителя.
### Сгенерированный код
Сгенерированный код для двух описанных выше примеров выглядит примерно так:
struct master :public cppcms::base_view
{
data::master &content;
master(std::ostream &_s,data::master &_content):
cppcms::base_view(_s),
content(_content)
{
}
...
}; // end of class master
struct page :public master
{
data::page &content;
page(std::ostream &_s,data::page &_content):
master(_s,_content),
content(_content)
{
}
...
}; // end of class page
## template
### Синтаксис
Определение темплейта состоит из его имени, круглых скобок и опционально - списка параметров, разделенных запятой:
'template' NAME '(' [ parameter [',' parameter ... ] ] ')'
, где `parameters` - это:
IDENTIFIER ['const' ] ['&'] NAME
Например:
<% template render() %>
<% template show_list(data::list_t const &list) %>
<% template show_numbers(int x,int y, double z) %>
Примечание: Вы не можете указывать параметры темплейта в виде `list<int>`, а должны определить тип для них.
### Сгенерированный код
Каждый темплейт транслируется в виртупльную функцию члена класса, в котором он наследуется. Эта функция возвращает `void` и получает определенные параметры. Т.о., `show_list` в вышеописанном примере будет транслирована в:
virtual void show_list(data::list_t const &list)
{
...
}

Проект

CppCMS является основой веб-разработки для выполнения ресурсоемких приложений.

Размещение

SourceForge.net Logo

Поддержать проект

CppCMS needs You


Навигация

Главная страница


Валидация CSS | Валидация XHTML 1.0