admin themes
This commit is contained in:
107
kernel/modules/menu/controllers/MenuController.php
Normal file
107
kernel/modules/menu/controllers/MenuController.php
Normal file
@ -0,0 +1,107 @@
|
||||
<?php
|
||||
|
||||
namespace kernel\modules\menu\controllers;
|
||||
|
||||
use app\helpers\Debug;
|
||||
use app\models\forms\CreateMenuForm;
|
||||
use app\services\MenuService;
|
||||
use Exception;
|
||||
use JetBrains\PhpStorm\NoReturn;
|
||||
use kernel\Controller;
|
||||
use kernel\models\Menu;
|
||||
use Twig\Error\LoaderError;
|
||||
use Twig\Error\RuntimeError;
|
||||
use Twig\Error\SyntaxError;
|
||||
|
||||
class MenuController extends Controller
|
||||
{
|
||||
protected function init(): void
|
||||
{
|
||||
$this->cgView->viewPath = KERNEL_MODULES_DIR . "/menu/views/";
|
||||
$this->cgView->layoutPath = ROOT_DIR . "/views/admin/";
|
||||
$this->cgView->layout = "layouts/main.php";
|
||||
}
|
||||
|
||||
public function actionCreate(): void
|
||||
{
|
||||
$this->cgView->render("form.php");
|
||||
}
|
||||
|
||||
#[NoReturn] public function actionAdd(): void
|
||||
{
|
||||
$menuForm = new CreateMenuForm();
|
||||
$menuService = new MenuService();
|
||||
$menuForm->load($_REQUEST);
|
||||
if ($menuForm->validate()){
|
||||
$menuItem = $menuService->create($menuForm);
|
||||
if ($menuItem){
|
||||
$this->redirect("/admin/settings/menu/" . $menuItem->id);
|
||||
}
|
||||
}
|
||||
$this->redirect("/admin/settings/menu/create");
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws Exception
|
||||
*/
|
||||
public function actionIndex($page_number = 1): void
|
||||
{
|
||||
$this->cgView->render("index.php", ['page_number' => $page_number]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws Exception
|
||||
*/
|
||||
public function actionView($id): void
|
||||
{
|
||||
$menuItem = Menu::find($id);
|
||||
|
||||
if (!$menuItem){
|
||||
throw new Exception(message: "The menu item not found");
|
||||
}
|
||||
$this->cgView->render("view.php", ['menu' => $menuItem]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws RuntimeError
|
||||
* @throws SyntaxError
|
||||
* @throws LoaderError|Exception
|
||||
*/
|
||||
public function actionUpdate($id): void
|
||||
{
|
||||
$model = Menu::find($id);
|
||||
if (!$model){
|
||||
throw new Exception(message: "The menu item not found");
|
||||
}
|
||||
|
||||
$this->cgView->render("form.php", ['model' => $model]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws Exception
|
||||
*/
|
||||
public function actionEdit($id): void
|
||||
{
|
||||
$menuItem = Menu::find($id);
|
||||
if (!$menuItem){
|
||||
throw new Exception(message: "The menu item not found");
|
||||
}
|
||||
$menuForm = new CreateMenuForm();
|
||||
$menuService = new MenuService();
|
||||
$menuForm->load($_REQUEST);
|
||||
if ($menuForm->validate()){
|
||||
$menuItem = $menuService->update($menuForm, $menuItem);
|
||||
if ($menuItem){
|
||||
$this->redirect("/admin/settings/menu/" . $menuItem->id);
|
||||
}
|
||||
}
|
||||
$this->redirect("/admin/settings/menu/update/" . $id);
|
||||
}
|
||||
|
||||
#[NoReturn] public function actionDelete($id): void
|
||||
{
|
||||
Menu::find($id)->delete();
|
||||
$this->redirect("/admin/settings/menu/");
|
||||
}
|
||||
|
||||
}
|
60
kernel/modules/menu/models/Menu.php
Normal file
60
kernel/modules/menu/models/Menu.php
Normal file
@ -0,0 +1,60 @@
|
||||
<?php
|
||||
|
||||
namespace kernel\modules\menu\models;
|
||||
|
||||
use app\helpers\Debug;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
/**
|
||||
* @property int $id
|
||||
* @property int parent_id
|
||||
* @property string icon_file
|
||||
* @property string icon_font
|
||||
* @property string label
|
||||
* @property string url
|
||||
* @property int status
|
||||
* @method static find($id)
|
||||
*/
|
||||
|
||||
class Menu extends Model
|
||||
{
|
||||
const DISABLE_STATUS = 0;
|
||||
const ACTIVE_STATUS = 1;
|
||||
|
||||
protected $table = 'menu';
|
||||
protected $fillable = ['parent_id', 'icon_file', 'icon_font', 'label', 'url', 'status'];
|
||||
protected array $dates = ['deleted_at'];
|
||||
|
||||
public static function labels(): array
|
||||
{
|
||||
return [
|
||||
'parent_id' => 'Родительский пункт меню',
|
||||
'icon_file' => 'Путь к иконке',
|
||||
'icon_font' => 'Иконка',
|
||||
'label' => 'Заголовок',
|
||||
'url' => 'URL',
|
||||
'status' => 'Статус',
|
||||
];
|
||||
}
|
||||
|
||||
public static function getChild(int $id)
|
||||
{
|
||||
$collection = Menu::where("parent_id", $id)->get();
|
||||
if (!$collection->isEmpty()){
|
||||
return $collection;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[]
|
||||
*/
|
||||
public static function getStatus(): array
|
||||
{
|
||||
return [
|
||||
self::DISABLE_STATUS => "Не активный",
|
||||
self::ACTIVE_STATUS => "Активный",
|
||||
];
|
||||
}
|
||||
}
|
78
kernel/modules/menu/views/form.php
Normal file
78
kernel/modules/menu/views/form.php
Normal file
@ -0,0 +1,78 @@
|
||||
<?php
|
||||
/**
|
||||
* @var Menu $model
|
||||
*/
|
||||
|
||||
use kernel\models\Menu;
|
||||
|
||||
$form = new \itguild\forms\ActiveForm();
|
||||
$form->beginForm(isset($model) ? "/admin/settings/menu/edit/" . $model->id : "/admin/menu");
|
||||
|
||||
$form->field(class: \itguild\forms\inputs\Select::class, name: "parent_id", params: [
|
||||
'class' => "form-control",
|
||||
'value' => $model->parent_id ?? ''
|
||||
])
|
||||
->setLabel("Родительский пункт меню")
|
||||
->setOptions(\app\services\MenuService::createLabelArr())
|
||||
->render();
|
||||
|
||||
$form->field(class: \itguild\forms\inputs\TextInput::class, name: "icon_file", params: [
|
||||
'class' => "form-control",
|
||||
'value' => $model->icon_file ?? ''
|
||||
])
|
||||
->setLabel("Путь к иконке")
|
||||
->render();
|
||||
|
||||
$form->field(class: \itguild\forms\inputs\TextInput::class, name: "icon_font", params: [
|
||||
'class' => "form-control",
|
||||
'value' => $model->icon_font ?? ''
|
||||
])
|
||||
->setLabel("Иконка")
|
||||
->render();
|
||||
|
||||
$form->field(class: \itguild\forms\inputs\TextInput::class, name: "label", params: [
|
||||
'class' => "form-control",
|
||||
'value' => $model->label ?? ''
|
||||
])
|
||||
->setLabel("Заголовок")
|
||||
->render();
|
||||
|
||||
$form->field(class: \itguild\forms\inputs\TextInput::class, name: "url", params: [
|
||||
'class' => "form-control",
|
||||
'value' => $model->url ?? ''
|
||||
])
|
||||
->setLabel("URL")
|
||||
->render();
|
||||
|
||||
$form->field(class: \itguild\forms\inputs\Select::class, name: "status", params: [
|
||||
'class' => "form-control",
|
||||
'value' => $model->status ?? '1'
|
||||
])
|
||||
->setLabel("Статус")
|
||||
->setOptions(Menu::getStatus())
|
||||
->render();
|
||||
?>
|
||||
<div class="row">
|
||||
<div class="col-sm-2">
|
||||
<?php
|
||||
$form->field(\itguild\forms\inputs\Button::class, name: "btn-submit", params: [
|
||||
'class' => "btn btn-primary ",
|
||||
'value' => 'Отправить',
|
||||
'typeInput' => 'submit'
|
||||
])
|
||||
->render();
|
||||
?>
|
||||
</div>
|
||||
<div class="col-sm-2">
|
||||
<?php
|
||||
$form->field(\itguild\forms\inputs\Button::class, name: "btn-reset", params: [
|
||||
'class' => "btn btn-warning",
|
||||
'value' => 'Сбросить',
|
||||
'typeInput' => 'reset'
|
||||
])
|
||||
->render();
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
<?php
|
||||
$form->endForm();
|
49
kernel/modules/menu/views/index.php
Normal file
49
kernel/modules/menu/views/index.php
Normal file
@ -0,0 +1,49 @@
|
||||
<?php
|
||||
/**
|
||||
* @var \Illuminate\Database\Eloquent\Collection $menuItem
|
||||
* @var int $page_number
|
||||
*/
|
||||
|
||||
use app\tables\columns\menu\MenuDeleteActionColumn;
|
||||
use app\tables\columns\menu\MenuEditActionColumn;
|
||||
use app\tables\columns\menu\MenuViewActionColumn;
|
||||
use Itguild\EloquentTable\EloquentDataProvider;
|
||||
use Itguild\EloquentTable\ListEloquentTable;
|
||||
use kernel\IGTabel\btn\PrimaryBtn;
|
||||
use kernel\models\Menu;
|
||||
|
||||
$table = new ListEloquentTable(new EloquentDataProvider(Menu::class, [
|
||||
'currentPage' => $page_number,
|
||||
'perPage' => 8,
|
||||
'params' => ["class" => "table table-bordered", "border" => "2"],
|
||||
'baseUrl' => "/admin/settings/menu",
|
||||
]));
|
||||
$table->columns([
|
||||
'parent_id' => (function ($data) {
|
||||
if ($data == 0) return null;
|
||||
return Menu::find($data)->label;
|
||||
}),
|
||||
'created_at' => function ($data) {
|
||||
if (!$data){
|
||||
return null;
|
||||
}
|
||||
|
||||
return (new DateTimeImmutable($data))->format("d-m-Y");
|
||||
},
|
||||
'updated_at' => function ($data) {
|
||||
if (!$data){
|
||||
return null;
|
||||
}
|
||||
|
||||
return (new DateTimeImmutable($data))->format("d-m-Y");
|
||||
}
|
||||
]);
|
||||
$table->beforePrint(function () {
|
||||
return PrimaryBtn::create("Создать", "/admin/menu/create")->fetch();
|
||||
//return (new PrimaryBtn("Создать", "/admin/user/create"))->fetch();
|
||||
});
|
||||
$table->addAction(MenuViewActionColumn::class);
|
||||
$table->addAction(MenuEditActionColumn::class);
|
||||
$table->addAction(MenuDeleteActionColumn::class);
|
||||
$table->create();
|
||||
$table->render();
|
51
kernel/modules/menu/views/view.php
Normal file
51
kernel/modules/menu/views/view.php
Normal file
@ -0,0 +1,51 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @var \Illuminate\Database\Eloquent\Collection $menu
|
||||
*/
|
||||
|
||||
use app\models\User;
|
||||
use Itguild\EloquentTable\ViewEloquentTable;
|
||||
use Itguild\EloquentTable\ViewJsonTableEloquentModel;
|
||||
use kernel\IGTabel\btn\DangerBtn;
|
||||
use kernel\IGTabel\btn\PrimaryBtn;
|
||||
use kernel\IGTabel\btn\SuccessBtn;
|
||||
use kernel\models\Menu;
|
||||
|
||||
$table = new ViewEloquentTable(new ViewJsonTableEloquentModel($menu, [
|
||||
'params' => ["class" => "table table-bordered", "border" => "2"],
|
||||
'baseUrl' => "/admin/menu",
|
||||
]));
|
||||
$r = new ViewJsonTableEloquentModel($menu, [
|
||||
'params' => ["class" => "table table-bordered", "border" => "2"],
|
||||
'baseUrl' => "/admin/menu",
|
||||
]);
|
||||
\app\helpers\Debug::dd($r->getJson());
|
||||
$table->beforePrint(function () use ($menu) {
|
||||
$btn = PrimaryBtn::create("Список", "/admin/settings/menu")->fetch();
|
||||
$btn .= SuccessBtn::create("Редактировать", "/admin/settings/menu/update/" . $menu->id)->fetch();
|
||||
$btn .= DangerBtn::create("Удалить", "/admin/settings/menu/delete/" . $menu->id)->fetch();
|
||||
return $btn;
|
||||
});
|
||||
$table->rows([
|
||||
'parent_id' => (function ($data) {
|
||||
if ($data == 0) return null;
|
||||
return Menu::find($data)->label;
|
||||
}),
|
||||
'created_at' => function ($data) {
|
||||
if (!$data){
|
||||
return null;
|
||||
}
|
||||
|
||||
return (new DateTimeImmutable($data))->format("d-m-Y");
|
||||
},
|
||||
'updated_at' => function ($data) {
|
||||
if (!$data){
|
||||
return null;
|
||||
}
|
||||
|
||||
return (new DateTimeImmutable($data))->format("d-m-Y");
|
||||
}
|
||||
]);
|
||||
$table->create();
|
||||
$table->render();
|
Reference in New Issue
Block a user