API: Инструкции
Использование сниппетов
Для чего нужны сниппеты?
Сниппеты позволяют интегрировать любой ваш PHP и HTML-код непосредственно в среду визуальной верстки для написания собственных решений (например, вывести список страниц универсального модуля).
Сниппет всегда воспринимается компилятором как PHP-код, поэтому для исполнения PHP-скриптов обязательно наличие PHP-тегов (в стандартной конфигурации включена поддержка коротких тегов <? и ?>), но как и в любом php-файле вы также можете использовать HTML-теги.
Пример простейшего сниппета для получения списка страниц и их ID:
<?
$SR =& get_instance('smartriver');
$SR->load->model('smartriver');
$items = $this->smartriver->page(['where' => ['confirm' => 1]]);
if($items['status'] == 'ok'){?>
<ul>
<?
foreach($items['response'] as $item){
?>
<li><?=$item['name'].' (ID '.$item['id'].')'?></li>
<?
}
?>
</ul>
<?
}
?>
Сниппеты бывают двух типов: произвольные и виджеты.
Произвольные сниппеты не взаимодействуют с окружающей средой визуальной верстки и всегда остаются в рамках заданных высоты и ширины (необходимо, когда контент должен быть статичным), виджеты же, наоборот, взаимодействуют со средой визуальной верстки и могут увеличиваться или уменьшаться по высоте, при этом толкая объекты (необходимо при построении списков и других подобных элементов).
Также в сниппеты можно передавать параметры (делается это через элемент визуальной верстки, перечисление параметров идет через запятую).
Получить эти параметры в сниппете можно через символ #. Все параметры лучше присваивать в начале кода, во избежание непредвиденных ситуаций
Пример сниппета с параметрами:
<?
$SR =& get_instance('smartriver');
$SR->load->model('smartriver');
$param_1 = #param_1;$param_2 = #param_2;
$param_3 = #param_3;
print_r($param_1);print_r($param_2);
print_r($param_3);
?>
$param_1, $param_2, $param_3 - это переменные, которые вы будете использовать в своем PHP коде, #param_1, #param_2, #param_3 - это своего рода теги параметров, переданных через визуальную верстку, неважно как вы их назовете (но, рекомендуется аналогично php-переменным, чтобы не было путаницы), важен лишь порядок, т.е. #param_1 идет первым в визуальной верстке, #param_2 - вторым и т.д.
Все методы, описанные в документации по API SmartRiver доступны для использования в сниппетах при условии корректного подключения, описанного на странице введения.
Использование MVC
Что такое MVC.
MVC - это стандартная схема распределения данных Model-View-Controller, при которой каждый из этих трех компонентов выполняет свою роль: модель - набор инструментов для взаимодействия с вашим модулем, представление (вьюшка) - отображение данных пользователю, контроллер - интерпретатор действий пользователя, который оповещает модель о необходимости тех или иных действий.
Движок SE4 дает возможность создавать любой из этих трех компонентов и связывать их друг с другом, таким образом позволяя создавать свои полноценные модули, которые могут иметь собственную логику и более расширенный функционал для вашего сайта.
При создании контроллера (как основного компонента вашего модуля) подразумевается, что будет создана и модель, поэтому для удобства в конструкторе сразу есть строка (изначально закомментированная), подключающая модель с аналогичным именем.
Также необходимо иметь ввиду, что название вашего контроллера это прямая ссылка исполняющего скрипта, поэтому контроллеры с некоторыми именами невозможно будет создать, т.к. они зарезервированы системой. Например, при создании контроллера flight, перейти к исполнению индексного (index) скрипта можно по ссылке https://your_site/flight. Если же необходимо вызвать другой метод, например start, то ссылка будет иметь вид https://your_site/flight/start
Для того, чтобы вывести данные пользователю, достаточно создать представление (вьюшку) и наполнить ее своей HTML-версткой.
В контроллере отобразить вьюшку можно используя метод
$this->load->view('flight', ['passanger' => $passanger, 'seat' => $seat]);
где первый параметр - это название вашей вьюшки в системе SE4, а второй - массив данных, которые необходимо передать из контроллера во вьюшку.
Все методы, описанные в документации по API SmartRiver доступны для использования в контроллерах и моделях при условии корректного подключения, описанного на странице введения. Необходимо помнить о том, что если SmartRiver уже подключен в контроллере, который запускает вашу модель, то в этой модели повторное подключение не требуется.
Более детальная информация по работе с MVC по ссылкам:
Контроллеры - https://codeigniter.com/userguide3/general/controllers.html
Модели - https://codeigniter.com/userguide3/general/models.html
Вьюшки - https://codeigniter.com/userguide3/general/views.html
Использование Active Record
Что такое Active Record.
Active Record - это один из популярных способов доступа к данным, которые содержатся в Базе Данных сайта.
Использовать Active Record можно как в сниппетах так и в контроллерах и моделях.
Для использования Active Record в сниппете не нужно совершать никаких дополнительных действий, можно начать использовать методы сразу.
Для использования Active Record в контроллерах и моделях необходимо сначала установить соединение с БД, используя конструкцию:
$this->load->database();
Обычно это делается в конструкторе (__construct) - если речь идет о контроллере. Таким образом, в любой вашей модели, связанной с этим контроллером, не нужно будет производить каких-либо дополнительных действий и Active Record будет также доступен и там.
Все методы Active Record содержатся в объекте $this->db
Константы из руководства:
- YOUR_QUERY - любой корректный SQL-запрос
- DB_TABLE - таблица из вашей БД с которой идет взаимодействие
- SELECT - строка с набором полей для выборки из БД
1) Выполнение произвольного SQL-запроса (необходимо в случае, если ни один из методов Active Record или SmartRiver вам не подходит и нужно написать что-то уникальное):
Стандартное выполнение
$this->db->query(YOUR_QUERY);
Если необходимо получить массив данных (только для выборки)
$this->db->query(YOUR_QUERY)->result_array();
Если необходимо получить объект данных (только для выборки)
$this->db->query(YOUR_QUERY)->result();
Если необходимо получить одиночный объект (только для выборки)
$this->db->query(YOUR_QUERY)->row();
2) Получение скомпилированного запроса на добавление данных
$sql = $this->db->set($data)->get_compiled_insert(DB_TABLE);
$sql - полученная строка с запросом
$data - массив данных для вставки
Чтобы выполнить полученный запрос, необходимо использовать метод из п.1, т.е $this->db->query($sql);
Получить ID только что созданного элемента можно с помощью метода $this->db->insert_id();
3) Получение скомпилированного запроса на обновление данных
$sql = $this->db->where($where)->set($data)->get_compiled_update(DB_TABLE);
$sql - полученная строка с запросом
$where - массив с условиями обновления
$data - массив данных для обновления
Чтобы выполнить полученный запрос, необходимо использовать метод из п.1, т.е $this->db->query($sql);
4) Непосредственное добавление записи
$this->db->insert(DB_TABLE, $data);
$data - массив данных для вставки
Получить ID только что созданного элемента можно с помощью метода $this->db->insert_id();
5) Непосредственное обновление записи
$this->db->where($where)->update(DB_TABLE, $data);
$where - массив с условиями обновления
$data - массив данных для обновления
6) Получение данных
массив данных
$this->db->where($where)->select(SELECT)->get(DB_TABLE)->result_array();
объект данных
$this->db->where($where)->select(SELECT)->get(DB_TABLE)->result();
одиночный объект
$this->db->where($where)->select(SELECT)->get(DB_TABLE)->row();
7) Удаление записи
$this->db->where($where)->delete(DB_TABLE);
$where - массив с условиями удаления
Более детальная информация о всех существующих методах Active Record текущей версии движка доступна по ссылке.