Основи на шаблоните (в. 1

Основната структура на CppCMS шаблонния файл

Когато събираме шаблони, ние поставяме тяхното съдържание в тяхната собствена кожа. Следователно, когато компилираме всеки шаблон, ние посочваме името на неговия скин като команда от първо ниво. Всяка кожа е представена от отделни пространства от имена в C++. Че. името на кожата всъщност е името на пространство от имена на C++.

Второто ниво е изглед (C++ клас). Всеки изглед, със собствена кожа, представлява конкретна страница, която трябва да бъде изобразена. Всяка кожа трябва да имплементира виртуална функция render(), освен ако вече не е била използвана в своя родителски клас. Всеки изглед е отделен клас, който наследява от cppcms::base_view в най-горния родител.

Всички изгледи могат да бъдат организирани в йерархия на наследяване. Например, възможна е следната йерархия на типичен блог:

Всеки наследяващ изглед може да замени своите родителски шаблони, които всъщност са виртуални функции.

HTML и разделяне на контролите

Системата за шаблони CppCMS е базирана на HTML страници с вградени команди за контрол на потока между таговете. Всяка шаблонна команда започва с и трябва да завършва с %> в един ред. Всяка шаблонна команда трябва да бъде затворена с тези "скоби".

Например --- правилният код е:

Грешно е да се комбинират различни команди. Например така:

Също така не трябва да обвивате командата в следващите редове. Следното е неправилно:

Символите в командите не трябва да съдържат % или > . Те могат да бъдат оградени в двойни кавички според правилата за екраниране на C++/C. Например:

Правила за описание на синтаксиса

Синтаксисът за описание на командите на шаблона е както следва:

  • всичкоключовите думи ще бъдат отразени с малки букви в единични кавички. Например "кожа"
  • ИМЕ е поредица от латински букви, цифри и долни черти, започващи с буква. Той представлява идентификатори и може да се дефинира с регулярен израз: [a-zA-Z][a-zA-Z0-9_]* . Например skin_1.
  • ПРОМЕНЛИВА е непразна последователност от идентификатори (ИМЕНА), разделени с точка " . " или " -> ", която по избор може да завършва с () или да започва с *, за да идентифицира резултата от извикване на функция. Не се допускат интервали. Например: data->point.x, something.else() *foo.bar.
  • STRING е стандартен C++/C низ със стандартни екраниращи знаци като "Hello \"World\"" . Забележка: Не е възможно да се свържат низове като "Hello " "World" е еквивалент на "Hello World" .
  • ЧИСЛО е число - поредица от цифри, които могат да започват с - и да включват . . Може да се дефинира с регулярен израз: \-?\d+(\.\d*)?
  • ИДЕНТИФИКАТОР е поредица от идентификатори (ИМЕ), разделени от символа ::. Не се допускат интервали. Например: data::page
  • Всички препинателни знаци, затворени в единични кавички – като „,“ .
  • Незадължителните елементи са посочени в квадратни скоби [], а задължителните елементи са посочени с помощта на скоби (). Опциите са разделени със символа.

Няма ограничения за интервалите между думите.

Означава, че са разрешени следните определения:

и тези не са разрешени:

CppCMS е рамка за уеб разработка за изпълнение на приложения с интензивно използване на ресурси.