Список с фильтрацией
Создаем файлы моделей models/price_categories.model.php и models/price_list.model.php
class Price_categories extends Model { protected $name = "Разделы прайс листа"; protected $model_elements = array( array("Активировать", "bool", "active", array("on_create" => true)), array("Название", "char", "name", array("required" => true)), array("Позиция", "order", "order") ); } class Price_list extends Model { protected $name = "Прайс лист"; protected $model_elements = array( array("Активировать", "bool", "active", array("on_create" => true)), array("Название", "char", "name", array("required" => true)), array("Направление", "char", "department"), array("Категория", "enum", "category", array("foreign_key" => "Price_categories", "order_asc" => "name")), array("Цена", "int", "price"), array("Позиция", "order", "order") ); }
Вносим название модели в файл config/models.php
$mvActiveModels = array('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 = array( ... , "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 "<tr><td colspan=\"4\">Цен по заданным параметрам не найдено.</td></tr>\n"; foreach($rows as $row) { $row["price"] = $row["price"] ? $row["price"]." руб" : "По запросу"; $html .= "<tr>\n"; $html .= "<td>".$row["name"]."</td>\n"; $html .= "<td>".$row["department"]."</td>\n"; $html .= "<td>".$this -> getEnumTitle("category", $row["category"])."</td>\n"; $html .= "<td>".$row["price"]."</td>\n"; $html .= "</tr>\n"; } return $html; }
Содержимое файла шаблона view-price.php
<? $mv -> seo -> mergeParams("Прайс-лист"); $mv -> price_list -> runFilter(array("name", "department", "category", "price")); $mv -> price_list -> filter -> setEnumEmptyValueTitle("category", "Все категории"); $mv -> price_list -> filter -> filterValuesList("category", array("active" => 1)); include $mv -> views_path."main-header.php"; ?> <form method="get" action="<? echo $mv -> root_path; ?>price-list/"> <? echo $mv -> price_list -> filter -> display(); ?> <input type="submit" value="Найти" /> </form> <table class="price"> <tr> <th>Наименование</th> <th>Направление</th> <th>Категория</th> <th>Цена</th> </tr> <? echo $mv -> price_list -> display(); ?> </table> <? include $mv -> views_path."main-header.php"; ?>