Список с фильтрацией
Создаем файлы моделей models/price_categories.model.php и models/price_list.model.php
class Price_categories extends Model
{
    protected $name = "Разделы прайс листа";
   
    protected $model_elements = [
        ["Активировать", "bool", "active", ["on_create" => true]),
        ["Название", "char", "name", ["required" => true]),
        ["Позиция", "order", "order"]
    );
}
class Price_list extends Model
{
    protected $name = "Прайс лист";
 
    protected $model_elements = [
        ["Активировать", "bool", "active", ["on_create" => true]),
        ["Название", "char", "name", ["required" => true]),
        ["Направление", "char", "department"],
        ["Категория", "enum", "category", ["foreign_key" => "Price_categories",
                                                     "order_asc" => "name"]),
        ["Цена", "int", "price"],
        ["Позиция", "order", "order"]
    );
}
Вносим название модели в файл config/models.php
$mvActiveModels = ['pages', 'blocks', ... , 'price_categories', 'price_list'];
Создаем SQL таблицы в базе данных, после чего модели станут работать в административной панели
CREATE TABLE `price_categories` ( `id` int(11) NOT NULL, `active` tinyint(4) NOT NULL, `name` varchar(250) NOT NULL, `order` int(11) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ALTER TABLE `price_categories` ADD PRIMARY KEY (`id`); ALTER TABLE `price_categories` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; CREATE TABLE `price_list` ( `id` int(11) NOT NULL, `active` tinyint(4) NOT NULL, `name` varchar(250) NOT NULL, `department` varchar(250) NOT NULL, `category` int(11) NOT NULL, `price` int(11) NOT NULL, `order` int(11) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ALTER TABLE `price_list` ADD PRIMARY KEY (`id`), ADD KEY `category` (`category`); ALTER TABLE `price_list` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
Создаем файл шаблона views/view-price.php и вносим маршрут к шаблону в файл config/routes.php
$mvFrontendRoutes = [ ... , "price-list/" => "view-price.php" ];
Добавляем методы в файл модели price_list.model.php
public function display()
{
    $params = $this -> filter -> getConditions();
    $params["order->asc"] = "name";
    $params["active"] = 1;
    $rows = $this -> select($params);
    $html = "";
        
    if(!count($rows))
        return "Цен по заданным параметрам не найдено.  \n";
            
    foreach($rows as $row)
    {
        $row["price"] = $row["price"] ? $row["price"]." руб" : "По запросу";
            
        $html .= "\n";
        $html .= "".$row["name"]." \n";
        $html .= "".$row["department"]." \n";
        $html .= "".$this -> getEnumTitle("category", $row["category"])." \n";
        $html .= "".$row["price"]." \n";
        $html .= " \n";
    }
            
    return $html;
}
Содержимое файла шаблона view-price.php
$mv -> seo -> mergeParams("Прайс-лист");
$mv -> price_list -> runFilter(["name", "department", "category", "price"]);
$mv -> price_list -> filter -> setEnumEmptyValueTitle("category", "Все категории");
$mv -> price_list -> filter -> filterValuesList("category", ["active" => 1]);
include $mv -> views_path."main-header.php";
| Наименование | Направление | Категория | Цена | 
|---|
Предыдущий раздел
Слайдер с баннерами