Пример кода
Здесь мы рассмотрим наиболее сложный пример из поставляемых вместе с библиотекой шаблонизатора. Имя файла примера: test_3_1.cpp.
Все остальные примеры находятся в каталоге tests.
Исходный текст программы:
// C++ Includes
#include <iostream>
// Local Includes
#include <ctpp/ctpp.hpp>
int main(void)
{
using namespace template_parser_ns;
using namespace std;
// Создаем структуру данных
param_data * pData = new param_data(param_data::HASH);
// Вставляем глобальный параметр
pData -> hash_insert_new_var("global_param", "Global Parameter");
// Вставляем цикл
param_data * pArray = pData -> hash_insert_new_array("EMPLOYEE_INFO");
// Внутри цикла - хеш с параметрами
param_data * pHash = pArray -> array_insert_new_hash();
// Параметр "NAME"
pHash -> hash_insert_new_var("NAME", "Иванов Иван");
// Параметр "JOB"
pHash -> hash_insert_new_var("JOB", "Архитектор");
pHash = pArray -> array_insert_new_hash();
pHash -> hash_insert_new_var("NAME", "Петров Петр");
pHash -> hash_insert_new_var("JOB", "Строитель");
// Подменяем глобальный параметр
pHash -> hash_insert_new_var("global_param", "Replaced Parameter");
try
{
// Шаблонизатор
template_text oTemplate;
// Загрузчик вложений
loader_base * pLoaderBase = new loader_base();
// Каталог для вложений
v_include_dir vIncludeDir;
vIncludeDir.push_back("./tmpl");
oTemplate.set_include_dir(vIncludeDir);
// Текст шаблона
pLoaderBase -> load_file("./tmpl/3_1.tmpl");
// Парзим шаблон
oTemplate.parse(pLoaderBase -> get_data());
// Накладываем параметры на шаблон
oTemplate.param(pData);
string sOutput;
// Получаем результат
sOutput.assign(oTemplate.output());
cout << sOutput << endl;
}
catch(exception &e) { cout << e.what() << endl; exit(1); }
return 0;
}
Шаблон:
<TMPL_include header.tmpl>
<TMPL_var global_param>
<TMPL_loop __CONTEXT_VARS__ __GLOBAL_VARS__ EMPLOYEE_INFO>
<TMPL_var NAME> - <TMPL_var JOB>
<TMPL_var global_param>
<TMPL_unless IN_SET(NAME, "Иванов Иван")>
TEST_ANY_PARAM
</TMPL_unless>
</TMPL_loop>
<TMPL_include footer.tmpl>
Параметры:
global_param => "Global Parameter"
EMPLOYEE_INFO
[
{ NAME => "Иванов Иван", JOB => "Архитектор" },
{ NAME => "Петров Петр", JOB => "Строитель", global_param => "Replaced Parameter" }
]
Вывод:
<!-- Copyright (c) 2004 Andrei V. Shetuhin -->
<html>
<head>
<title>Sample</title>
</head>
<body>
Global Parameter
Иванов Иван - Архитектор
Global Parameter
Петров Петр - Строитель
Replaced Parameter
TEST_ANY_PARAM
</body>
</html>
<!-- Footer End -->
Сборка:
gcc -c test_3_1.cpp -I /usr/local/include/ctpp
Для динамической линковки:
gcc test_3_1.o -L /usr/local/lib -o test_3_1 -lctpp
Для статической сборки:
gcc -static test_3_1.o -L /usr/local/lib -o test_3_1 -lctpp -lstdc++
Copyright © 2003 - 2005 CTPP Dev. Team | http://reki.ru/products/ctpp