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

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

Основные замечания

Каждый блок начинавется с его определения и заканчивается командой end.

'end' [ 'skin' | 'view' | 'template' ]

Эта команда может опционально включать после себя тип блока. Например:

<% skin myskin %>
  <% view master uses data %>
  ...
  <% end view %>
<% end %>

Т.о. мы закрыли skin без типа блока и view с его указанием. Это может использоваться как дополнительная проверка последовательности блоков.

skin

Синтаксис

'skin' [NAME]

Это самая верхняя команда каждого темплейта. skin может обозначаться специфичным именем или оно может отсутствовать, означая, что оно должно быть определено внешне в процессе сборки с использованием ключа -s.

Примечания

Например:

Правильный пример 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