PHP: OnePageCMS создание нового модуля

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

Так же можно скачать заготовку нового модуля для системы.

Запись опубликована в рубрике PHP, Проще говоря с метками , , , , , , , . Добавьте в закладки постоянную ссылку.