Цель данного урока показать, как можно создавать самый простейший модуль для управления данными, отличными от страниц, а так же вывести результат на сайте.
Мы создадим модуль testimonials, позволяющий добавлять, редактировать и удалять отзывы. Со времен создания базового модуля DataTable, подобное стало очень легко реализовывать.
Файлы модуля
Во-первых нам надо создать папку testimonials в разделе модулей /system/module. Затем в него положить файл index.php, который будет содержать информацию о модуле. Так же, необходимым условием является создание файла локализации для модуля. Для этого в папке /system/language/ru создадим файл module_testimonials.php.
Локализация модуля
В файле локализации для нашего языка вставим следующие строки:
<?php return array ( 'module_testimonials' => 'Отзывы', );
В случае если у вас предполагается мультиязычная админка, можно создать подобные файлы и для других языков, в соседних папках. Но тогда в массив нужно будет добавить переводы и для заголовков полей, например:
<?php return array ( 'module_testimonials' => 'Отзывы', 'name' => 'Имя', 'photo' => 'Фото', 'text' => 'Отзыв', );
И, соответственно для английского языка, в папке /system/language/en
<?php return array ( 'module_testimonials' => 'Testimonials', 'name' => 'Name', 'photo' => 'Photo', 'text' => 'Text', );
Код модуля
После создания всех файлов, откройте index.php модуля и вставьте следующий код:
<?php
class TestimonialsController extends DataTable{
public $name = 'testimonials';
public $structure = array(
'name' => array(
'label' => 'Имя',
'type' => 'string',
'def' => 'TEXT NOT NULL',
'visible' => true,
'attr' => 'class="form-control" required'
),
'image' => array(
'label' => 'Фото',
'type' => 'string',
'def' => 'TEXT NOT NULL',
'visible' => false,
'attr' => 'class="form-control field-image"'
),
'text' => array(
'label' => 'Отзыв',
'type' => 'textarea',
'def' => 'TEXT NOT NULL',
'visible' => true,
'attr' => 'class="form-control ckeditor"'
)
);
}
Каждый модуль SyDES, это один класс с названием вида "НазваниемодуляController", расширяющий класс Controller, или в нашем случае расширяющий базовый модуль DataTable. Обратите внимание, что название класса всегда начинается с большой буквы.
Первое обязательное свойство, $name, содержит в себе название модуля в нижнем регистре, как и имя папки. На основе его создается таблица, а так же ссылки в админке.
Второе обязательное свойство, $structure, содержит в себе структуру создаваемой таблицы и свойства полей. Во время работы модуля, к этой структуре добавляются еще 2 поля, ID и статус, так что нет необходимости их указывать.
В ключе массива указывается название поля, оно же имя столбца в таблице.
label - Заголовок поля, может быть любым словом. В случае мультиязычности, здесь нужно указать ключ для перевода: name, photo или text.
type - Тип поля. Может быть одним из следующих:
- select (требует элемент
list) - checkbox (требует элемент
list) - radio (требует элемент
list) - yesNo
- string
- textarea
def - Описание столбца в базе данных. Поскольку используется SQLite3, то выбор можно можно ограничить между TEXT NOT NULL и INTEGER
visible - Указывает, отображать ли это поле в таблице, в списке элементов
attr - Атрибуты для html-тега, вроде класса, id или data- атрибутов
list - Дополнительный элемент массива, содержащий простой или ассоциативный массив доступных вариантов для выбора
Обратите внимание, что в атрибутах можно указать особые классы, вроде field-date, field-image, field-file, field-folder и ckeditor, чтобы добавить особых свойств полям.
Кастомные шаблоны
С версии 2.5.1 появилась возможность указывать свои шаблоны для списка элементов и формы редактирования без необходимости править контроллер. Достаточно в разделе модуля создать папку view и в нее залить файлы index.php или form.php соответственно и получить данные из переменной $result
Установка модуля
После указания всех настроек модуля, его можно установить на сайт, как и прочие модули, то есть в разделе Система > Настройки > Модули нажать на кнопку Установить. После этого должна создаться отдельная таблица в базе и он появится в главном меню, в разделе Модули.
Как вывести элементы на сайте
Для работы с таблицами данных на фронте был создан инфоблок datatable. Он содержит 5 параметров:
- show - название модуля, данные которого хотим вывести
- limit - количество элементов на странице (по умолчанию 20)
- order - порядок сортировки элементов (по умолчанию id DESC)
- show_pagination - показывать ли пагинацию, если количество элементов больше лимита (по умолчанию 1)
- template - собственный шаблон для инфоблока
Примеры вызова:
{iblоck:datatable?show=testimonials} - выведет таблицу из 20 отзывов со всеми столбцами и пагинацией
{iblоck:datatable?show=testimonials&template=my} - отзывы с версткой из выбранного шаблона
{iblоck:datatable?show=testimonials&template=carousel&limit=10&show_pagination=0} - выведет карусельку из 10 последних отзывов
Пример кастомного шаблона my:
<div class="testimonials">
<?php foreach ($result as $item){ ?>
<div class="item">
<div class="name"><?=$item['name'];?></div>
<img src="/cache/img/100_100_c<?=$item['image'];?>" class="pull-left img-circle"?>
<?=$item['text'];?>
</div>
<?php } ?>
</div>
<?php if ($args['show_pagination']){
echo H::pagination($page['fullpath'], $count, $skip, $args['limit']);
} ?>