Custom page creating/ru
From Documentation of ABK-Soft Products
| Languages: |
English Русский |
Contents |
[edit] Пример создания своей сраницы
Для примера в папке !example/ создан просто php файл blank.php
Вы можете взять его и скопировать в корневую директорию скрипта под своим именем, например my_page.php
Для работы ему необходим файл шаблонизатора, который будет взят из папки с вашим текущим шаблоном, то есть если вы используете шаблон space то он будет искать файл в _themes/main/space/
Пример файла шаблонизатора так же находится в папке !example/, это файл blank.html. Вы можете взять его и скопировать в папку с вашего шаблона под своим именем, например my_page.html.
А в созданом вамифайле нужно задать имя файла шаблонизатора, для этого в строке
$page = new CPage("", $g['tmpl']['dir_tmpl_main'] . "blank.html");
Вы заменяеете blank.html на ваш файл шаблонизатора, напрмер my_page.html
$page = new CPage("", $g['tmpl']['dir_tmpl_main'] . "my_page.html");
[edit] Зоны доступа
Есть три вида страниц - только для зарегистрированых (нарпмер редактирование своего профайла), только для незарегистрированых (например регистраци) и страницы предназначиные для всех пользователей (например поиск)
Для того что бы сделать свою страницу доступно только для зарегистривоных пользователей, в самом начале вашего php файла нужно добавить строку:
$area = "login";
А если для только незаегистрированых, то:
$area = "public";
Если же ваша страница предназначена всем пользователям, то не нужно добавлять ничего.
[edit] Описание класса CPage
[edit] Method action()
Этот метод создан для обработки действий, то есть добавление изменения чего либо (профайла, отправки мыла). Смысл в разделении действий с бд от обработки шаблонов. Вот пример этого метода для обработки ответа на сообщение:
function action()
{
global $g_user;
$cmd = get_param("cmd", "");
if ($cmd == "reply") {
DB::query("SELECT u.user_id AS user_from, u2.user_id AS user_to,
m.id, m.subject, m.text
FROM ((mail_msg AS m LEFT JOIN user AS u ON u.user_id=m.user_from)
LEFT JOIN user AS u2 ON u2.user_id=m.user_to)
WHERE m.id=" . to_sql(get_param("msg", ""), 'Number') . "");
if ($row = DB::fetch_row()) {
$this->id = $row['user_from'] != $g_user['user_id'] ? $row['user_from'] : $row['user_to'];
$this->subject = "Re: " . $row['subject'];
$this->text = "> " . str_replace("\n", "\n > ", $row['text']);
}
}
}
[edit] Method parseBlock(&$html)
Этот метод для парсинга шаблона. В нем используются следующие функции для упраления шаблоном.
- $html->setvar("var", "value"); - заменить {var} в шаблоне на value
- $html->parse("block", true); - парсит блок (то есть блок становится видимым и в нем распарсиваются все {var} определенные в коде ДО вызова этой функции (дальше {var} можно изменить и свова распарсить блок уже с другими {var}, можно испольлзовать в цикле).
- $html->parse("subblock", false); - парсит блок, но при повторном вызове прошлый распарсеный блок заменяется предыдущим, а не парсится несколько раз как в том случае.
[edit] Шаблоны
Переменные в шаблоне выглядят как {variable}
Блоки в шаблоне выглядят так хмтл код
Есть в шаблонах переменные предопределенные
- {url_main} - юрл сайта (без страницы)
- {url_page} - со страницей
- {url_main_tmpl} - юрл до папки с шаблонами, чтобы картинки или яваскрипты для шаблона закидывать в эту папку удобно было, а потом писать только {url_main_tmpl}js/lib.js
[edit] Языки
Фраза выносится в файл _lang/main/default/language.php В шаблоне она автоматом заменится на {l_ключ_массива_в_языковом_файле} Массив $l['all'] - для фраз которые на нескольких страницах Массивы вроде $l['index.php'] - будет распарсено только на index.php
[edit] Обработка класса
Класс запускается:
$page = new CPage("", $g['tmpl']['dir_tmpl_main'] . "blank.html");
где blank.html - имя файла шаблонизатора для этой страницы
Далее присоединяем к этому шаблонму хедер и футер
$header = new CHeader("header", $g['tmpl']['dir_tmpl_main'] . "_header.html");
$page->add($header);
$footer = new CFooter("footer", $g['tmpl']['dir_tmpl_main'] . "_footer.html");
$page->add($footer);
Это апускаются обработчики для файлов шаблонизатора _header.html и _footer.html, и уже на распарсеный их виду будут заменены {header} и {footer} в blank.html