Сегодня речь пойдет о том, как создать новый модуль для OnePageCms.
Создание нового модуля для системы управления сайтом OnePageCMS — процесс очень простой, особенно если разработка касается только Вашего сайта и не будет требовать администрирования.
Как известно процесс формирования ссылок на в системе устроен следующим образом.
адрес_сайта/имя_контроллера/имя_метода/
Таким образом чтобы создать обработчик страницы site.com/test/page нам необходимо:
1) создать файл test.php в каталоге controllers Вашего фтп;
2) добавить в файл следующее содержимое:
<?php
class test extends cmsController {
public function page($Param) {
$this->Response->html = 'Hello!';
}
}
?>
Как видите ничего сложного. Теперь по адресу site.com/test/page у Вас будет открываться страница с текстом ‘Hello!’.
Теперь рассмотрим некоторые из основных возможностей класса cmsController.
$this->Response->html — HTML код для отображения;
$this->Response->message — сообщение контроллера;
$this->Response->template — шаблон для вывода данных;
$this->Response->empty — bool, при значении true говорит движку об отсутствии данных для вывода;
$this->Response->redirect — адрес для перенаправления;
$this->Response->tag->[tag_name] — переменные для передачи в шаблон;
$this->Table — объект fsDBTable привязанной таблицы, привязанная таблица указывается как элемент класса $TableName;
<?php
class test extends cmsController {
protected $TableName = 'sql_table_name';
public function page($Param) {
$this->Table->GetAll(); //Получение всех строк из таблицы DB_PREFIX.'sql_table_name'
$this->Response->html = 'Hello!';
}
}
?>
string = $this->View->HtmlCompile(string $html, array $param) — заменяет все теги (например {message}) в тексте $html по переданному ассоциативному массиву $param. Возвращает результат подстановки.
$html = 'Hello, {name}!';
$html = $this->View->HtmlCompile($html, array('name' => 'Ivan'));
echo html; //Hello, Ivan!
string = $this->CreateView(string filePath, array $param) — применение всех возможных подстановок для указанного файла.
Допустим мы хотим создать контроллер, который будет показывать нам те или иные данные по шаблону testfile.html из папки templates/test по адресу site.com/test/hello/?id=[номер записи в базе]. Содержимое файла testfile.html:
<html>
<head>
<title>{title}</title>
</head>
<body>
{if-notfound}
{notfound}
{endif-notfound}
{ifnot-notfound}
Hello, <b>{name}</b>!
{endifnot-notfound}
</body>
</html>
Данные name и title храняться в таблице sql_table_name в виде:
id | name | title 1 | Иван | Заголовок 1 2 | Петя | Заголовок 2
Имеем:
<?php
class test extends cmsController {
protected $TableName = 'sql_table_name';
public function hello($Param) {
$to_template = array('notfound' => '', 'title' => 'Не найден!');
if (!$Param->Exists('id', true)) {
/*
Если отсутствует параметр id или параметр id не является числом
перенаправляем на главную страницу сайта
*/
$this->Response->redirect = URL_ROOT;
return;
}
$this->Table->current = $Param->id;
if ($this->Table->result->name == '') {
$to_template['notfound'] = 'Не найдено записи с id = '.$Param->id;
} else {
$to_template['name'] = $this->Table->result->name;
$to_template['title'] = $this->Table->result->title;
}
$html = file_get_contents($this->_FindTemplatePath('test').'testfile.html');
$html = $this->View->HTMLCompile($html, $to_template);
$this->Response->html = $html;
}
}
?>
Результат site.com/test/hello/?id=1:
<html> <head> <title>Заголовок 1</title> </head> <body> Hello, <b>Иван</b>! </body> </html>
Результат site.com/test/hello/?id=3:
<html> <head> <title>Не найден!</title> </head> <body> Не найдено записи с id = 3 </body> </html>
Результат site.com/test/hello/?id=someparam123:
Отрывается страница site.com
Так же можно скачать заготовку нового модуля для системы.