Сегодня речь пойдет о том, как создать новый модуль для 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
Так же можно скачать заготовку нового модуля для системы.