From 7bb73ebef57f643dc80f284a53f8e063ccdd6b5a Mon Sep 17 00:00:00 2001 From: merdan Date: Sat, 3 Sep 2022 18:02:41 +0500 Subject: [PATCH] menus start --- packages/Sarga/Admin/src/Config/menu.php | 9 +- .../Admin/src/DataGrids/MenuDataGrid.php | 158 ++++++++++++++++++ .../Admin/src/Http/Controllers/Menus.php | 45 +++++ .../Sarga/Admin/src/Resources/lang/en/app.php | 15 ++ .../views/catalog/menus/index.blade.php | 106 ++++++++++++ .../Sarga/Admin/src/Routes/catalog-routes.php | 39 +++++ 6 files changed, 371 insertions(+), 1 deletion(-) create mode 100644 packages/Sarga/Admin/src/DataGrids/MenuDataGrid.php create mode 100644 packages/Sarga/Admin/src/Http/Controllers/Menus.php create mode 100644 packages/Sarga/Admin/src/Resources/views/catalog/menus/index.blade.php create mode 100644 packages/Sarga/Admin/src/Routes/catalog-routes.php diff --git a/packages/Sarga/Admin/src/Config/menu.php b/packages/Sarga/Admin/src/Config/menu.php index cc0e584f4..4cfed713f 100644 --- a/packages/Sarga/Admin/src/Config/menu.php +++ b/packages/Sarga/Admin/src/Config/menu.php @@ -19,7 +19,14 @@ return [ 'key' => 'catalog.scrap.products', 'name' => 'sarga::app.layouts.scrap-products', 'route' => 'admin.scrap-products.index', - 'sort' => 1, + 'sort' => 2, + 'icon-class' => '', + ], + [ + 'key' => 'catalog.menu', + 'name' => 'sarga::app.layouts.menu', + 'route' => 'admin.menu.index', + 'sort' => 7, 'icon-class' => '', ], ]; \ No newline at end of file diff --git a/packages/Sarga/Admin/src/DataGrids/MenuDataGrid.php b/packages/Sarga/Admin/src/DataGrids/MenuDataGrid.php new file mode 100644 index 000000000..26d1a4789 --- /dev/null +++ b/packages/Sarga/Admin/src/DataGrids/MenuDataGrid.php @@ -0,0 +1,158 @@ +locale = core()->getRequestedLocaleCode(); + } + + public function prepareQueryBuilder() + { + if ($this->locale === 'all') { + $whereInLocales = Locale::query()->pluck('code')->toArray(); + } else { + $whereInLocales = [$this->locale]; + } + + $queryBuilder = DB::table('menus as m') + ->select( + 'm.id as menu_id', + 'mt.name', + 'm.position', + 'm.status', + 'm.locale' + ) + ->leftJoin('menu_translations as mt', function ($leftJoin) use ($whereInLocales) { + $leftJoin->on('m.id', '=', 'mt.cmenu_id') + ->whereIn('mt.locale', $whereInLocales); + }) + + ->groupBy('m.id', 'mt.locale',); + + + $this->addFilter('status', 'm.status'); + $this->addFilter('menu_id', 'm.id'); + + $this->setQueryBuilder($queryBuilder); + } + + public function addColumns() + { + $this->addColumn([ + 'index' => 'menu_id', + 'label' => trans('admin::app.datagrid.id'), + 'type' => 'number', + 'searchable' => false, + 'sortable' => true, + 'filterable' => true, + ]); + + $this->addColumn([ + 'index' => 'name', + 'label' => trans('admin::app.datagrid.name'), + 'type' => 'string', + 'searchable' => true, + 'sortable' => true, + 'filterable' => true, + ]); + + $this->addColumn([ + 'index' => 'position', + 'label' => trans('admin::app.datagrid.position'), + 'type' => 'number', + 'searchable' => false, + 'sortable' => true, + 'filterable' => true, + ]); + + $this->addColumn([ + 'index' => 'status', + 'label' => trans('admin::app.datagrid.status'), + 'type' => 'boolean', + 'sortable' => true, + 'searchable' => true, + 'filterable' => true, + 'closure' => function ($value) { + if ($value->status) { + return trans('admin::app.datagrid.active'); + } else { + return trans('admin::app.datagrid.inactive'); + } + }, + ]); + + } + /** + * Prepare actions. + * + * @return void + */ + public function prepareActions() + { + $this->addAction([ + 'title' => trans('admin::app.datagrid.edit'), + 'method' => 'GET', + 'route' => 'admin.catalog.menus.edit', + 'icon' => 'icon pencil-lg-icon', + ]); + + $this->addAction([ + 'title' => trans('admin::app.datagrid.delete'), + 'method' => 'POST', + 'route' => 'admin.catalog.menus.delete', + 'confirm_text' => trans('ui::app.datagrid.massaction.delete', ['resource' => 'menu']), + 'icon' => 'icon trash-icon', + ]); + + $this->addMassAction([ + 'type' => 'delete', + 'label' => trans('admin::app.datagrid.delete'), + 'action' => route('admin.catalog.menus.massdelete'), + 'method' => 'POST', + ]); + } +} \ No newline at end of file diff --git a/packages/Sarga/Admin/src/Http/Controllers/Menus.php b/packages/Sarga/Admin/src/Http/Controllers/Menus.php new file mode 100644 index 000000000..b74decab4 --- /dev/null +++ b/packages/Sarga/Admin/src/Http/Controllers/Menus.php @@ -0,0 +1,45 @@ +_config = request('_config'); + } + + public function index(){ + if (request()->ajax()) { + return app(MenuDataGrid::class)->toJson(); + } + + return view($this->_config['view']); + } + + public function create(){ + + } + + public function store(){ + + } + + public function edit(){ + + } + + public function update(){} +} \ No newline at end of file diff --git a/packages/Sarga/Admin/src/Resources/lang/en/app.php b/packages/Sarga/Admin/src/Resources/lang/en/app.php index 6d7fbec25..6ad3a4e56 100644 --- a/packages/Sarga/Admin/src/Resources/lang/en/app.php +++ b/packages/Sarga/Admin/src/Resources/lang/en/app.php @@ -181,4 +181,19 @@ return [ ], ], ], + 'catalog' => [ + 'menus' => [ + 'title' => 'Menus', + 'add-title' => 'Add Menu', + 'edit-title' => 'Edit Menu', + 'save-btn-title' => 'Save Menu', + 'general' => 'General', + 'name' => 'Name', + 'visible-in-menu' => 'Visible In Menu', + 'yes' => 'Yes', + 'no' => 'No', + 'position' => 'Position', + 'description' => 'Description', + ], + ] ]; diff --git a/packages/Sarga/Admin/src/Resources/views/catalog/menus/index.blade.php b/packages/Sarga/Admin/src/Resources/views/catalog/menus/index.blade.php new file mode 100644 index 000000000..0488e6ace --- /dev/null +++ b/packages/Sarga/Admin/src/Resources/views/catalog/menus/index.blade.php @@ -0,0 +1,106 @@ +@php + $locale = core()->getRequestedLocaleCode(); +@endphp + +@extends('admin::layouts.content') + +@section('page_title') + {{ __('admin::app.catalog.menus.title') }} +@stop + +@section('content') +
+ + +
+ +
+ +
+@stop + +@push('scripts') + +@endpush diff --git a/packages/Sarga/Admin/src/Routes/catalog-routes.php b/packages/Sarga/Admin/src/Routes/catalog-routes.php new file mode 100644 index 000000000..3cb0e3410 --- /dev/null +++ b/packages/Sarga/Admin/src/Routes/catalog-routes.php @@ -0,0 +1,39 @@ + ['web', 'admin'], 'prefix' => config('app.admin_url')], function () { + Route::prefix('catalog')->group(function () { + /** + * Categories routes. + */ + Route::get('/menus', [Menus::class, 'index'])->defaults('_config', [ + 'view' => 'admin::catalog.menus.index', + ])->name('admin.catalog.menus.index'); + + Route::get('/menus/create', [Menus::class, 'create'])->defaults('_config', [ + 'view' => 'admin::catalog.menus.create', + ])->name('admin.catalog.menus.create'); + + Route::post('/menus/create', [Menus::class, 'store'])->defaults('_config', [ + 'redirect' => 'admin.catalog.menus.index', + ])->name('admin.catalog.menus.store'); + + Route::get('/menus/edit/{id}', [Menus::class, 'edit'])->defaults('_config', [ + 'view' => 'admin::catalog.menus.edit', + ])->name('admin.catalog.menus.edit'); + + Route::put('/menus/edit/{id}', [Menus::class, 'update'])->defaults('_config', [ + 'redirect' => 'admin.catalog.menus.index', + ])->name('admin.catalog.menus.update'); + + Route::post('/menus/delete/{id}', [Menus::class, 'destroy'])->name('admin.catalog.menus.delete'); + + Route::post('menus/massdelete', [Menus::class, 'massDestroy'])->defaults('_config', [ + 'redirect' => 'admin.catalog.menus.index', + ])->name('admin.catalog.menus.massdelete'); + }); +}); \ No newline at end of file