¨4.0.1¨
This commit is contained in:
@@ -4,13 +4,16 @@ namespace Modules\Brand\Admin;
|
||||
|
||||
use Modules\Admin\Ui\AdminTable;
|
||||
use Modules\Brand\Entities\Brand;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Yajra\DataTables\Exceptions\Exception;
|
||||
|
||||
class BrandTable extends AdminTable
|
||||
{
|
||||
/**
|
||||
* Make table response for the resource.
|
||||
*
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
* @return JsonResponse
|
||||
* @throws Exception
|
||||
*/
|
||||
public function make()
|
||||
{
|
||||
|
||||
@@ -16,6 +16,7 @@ class BrandTabs extends Tabs
|
||||
->add($this->seo());
|
||||
}
|
||||
|
||||
|
||||
private function general()
|
||||
{
|
||||
return tap(new Tab('general', trans('brand::brands.tabs.general')), function (Tab $tab) {
|
||||
@@ -26,9 +27,10 @@ class BrandTabs extends Tabs
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
private function images()
|
||||
{
|
||||
if (! auth()->user()->hasAccess('admin.media.index')) {
|
||||
if (!auth()->user()->hasAccess('admin.media.index')) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -38,6 +40,7 @@ class BrandTabs extends Tabs
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
private function seo()
|
||||
{
|
||||
return tap(new Tab('seo', trans('brand::brands.tabs.seo')), function (Tab $tab) {
|
||||
|
||||
@@ -21,6 +21,7 @@ class CreateBrandsTable extends Migration
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
|
||||
@@ -23,6 +23,7 @@ class CreateBrandTranslationsTable extends Migration
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
|
||||
@@ -15,7 +15,6 @@ class BrandDatabaseSeeder extends Seeder
|
||||
public function run()
|
||||
{
|
||||
Model::unguard();
|
||||
|
||||
// $this->call("OthersTableSeeder");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
namespace Modules\Brand\Entities;
|
||||
|
||||
use Modules\Media\Entities\File;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Modules\Brand\Admin\BrandTable;
|
||||
use Modules\Support\Eloquent\Model;
|
||||
use Modules\Media\Eloquent\HasMedia;
|
||||
@@ -11,25 +12,31 @@ use Modules\Product\Entities\Product;
|
||||
use Modules\Meta\Eloquent\HasMetaData;
|
||||
use Modules\Support\Eloquent\Sluggable;
|
||||
use Modules\Support\Eloquent\Translatable;
|
||||
use Illuminate\Database\Eloquent\Collection;
|
||||
use Illuminate\Database\Eloquent\Relations\HasMany;
|
||||
|
||||
class Brand extends Model
|
||||
{
|
||||
use Translatable, Sluggable, HasMedia, HasMetaData;
|
||||
|
||||
/**
|
||||
* The attributes that are translatable.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public $translatedAttributes = ['name'];
|
||||
/**
|
||||
* The relations to eager load on every query.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $with = ['translations'];
|
||||
|
||||
/**
|
||||
* The attributes that are mass assignable.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $fillable = ['slug', 'is_active'];
|
||||
|
||||
/**
|
||||
* The attributes that should be cast to native types.
|
||||
*
|
||||
@@ -38,14 +45,6 @@ class Brand extends Model
|
||||
protected $casts = [
|
||||
'is_active' => 'boolean',
|
||||
];
|
||||
|
||||
/**
|
||||
* The attributes that are translatable.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public $translatedAttributes = ['name'];
|
||||
|
||||
/**
|
||||
* The attribute that will be slugged.
|
||||
*
|
||||
@@ -53,6 +52,33 @@ class Brand extends Model
|
||||
*/
|
||||
protected $slugAttribute = 'name';
|
||||
|
||||
|
||||
/**
|
||||
* Find a specific brand by the given slug.
|
||||
*
|
||||
* @param string $slug
|
||||
*
|
||||
* @return self
|
||||
*/
|
||||
public static function findBySlug($slug)
|
||||
{
|
||||
return self::where('slug', $slug)->firstOrNew([]);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get brand list.
|
||||
*
|
||||
* @return Collection
|
||||
*/
|
||||
public static function list()
|
||||
{
|
||||
return Cache::tags('brands')->rememberForever(md5('brands.list:' . locale()), function () {
|
||||
return self::all()->sortBy('name')->pluck('name', 'id');
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Perform any actions required after the model boots.
|
||||
*
|
||||
@@ -63,6 +89,7 @@ class Brand extends Model
|
||||
static::addActiveGlobalScope();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get public url for the brand.
|
||||
*
|
||||
@@ -73,63 +100,44 @@ class Brand extends Model
|
||||
return route('brands.products.index', $this->slug);
|
||||
}
|
||||
|
||||
/**
|
||||
* Find a specific brand by the given slug.
|
||||
*
|
||||
* @param string $slug
|
||||
* @return self
|
||||
*/
|
||||
public static function findBySlug($slug)
|
||||
{
|
||||
return self::where('slug', $slug)->firstOrNew([]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get brand list.
|
||||
*
|
||||
* @return \Illuminate\Database\Eloquent\Collection
|
||||
*/
|
||||
public static function list()
|
||||
{
|
||||
return Cache::tags('brands')->rememberForever(md5('brands.list:' . locale()), function () {
|
||||
return self::all()->sortBy('name')->pluck('name', 'id');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the brand's logo.
|
||||
*
|
||||
* @return \Modules\Media\Entities\File
|
||||
* @return File
|
||||
*/
|
||||
public function getLogoAttribute()
|
||||
{
|
||||
return $this->files->where('pivot.zone', 'logo')->first() ?: new File;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get the brand's banner.
|
||||
*
|
||||
* @return \Modules\Media\Entities\File
|
||||
* @return File
|
||||
*/
|
||||
public function getBannerAttribute()
|
||||
{
|
||||
return $this->files->where('pivot.zone', 'banner')->first() ?: new File;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get related products.
|
||||
*
|
||||
* @return \Illuminate\Database\Eloquent\Relations\HasMany
|
||||
* @return HasMany
|
||||
*/
|
||||
public function products()
|
||||
{
|
||||
return $this->hasMany(Product::class);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get table data for the resource
|
||||
*
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
* @return JsonResponse
|
||||
*/
|
||||
public function table()
|
||||
{
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
|
||||
namespace Modules\Brand\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\Response;
|
||||
use Modules\Brand\Entities\Brand;
|
||||
|
||||
class BrandController
|
||||
@@ -9,8 +11,9 @@ class BrandController
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return \Illuminate\Http\Response
|
||||
* @param Request $request
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
namespace Modules\Brand\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\Response;
|
||||
use Modules\Brand\Entities\Brand;
|
||||
use Modules\Product\Entities\Product;
|
||||
use Modules\Product\Filters\ProductFilter;
|
||||
@@ -15,9 +16,10 @@ class BrandProductController
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
* @param string $slug
|
||||
* @param \Modules\Product\Entities\Product $model
|
||||
* @param \Modules\Product\Filters\ProductFilter $productFilter
|
||||
* @return \Illuminate\Http\Response
|
||||
* @param Product $model
|
||||
* @param ProductFilter $productFilter
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function index($slug, Product $model, ProductFilter $productFilter)
|
||||
{
|
||||
|
||||
@@ -15,6 +15,7 @@ class SaveBrandRequest extends Request
|
||||
*/
|
||||
protected $availableAttributes = 'brand::attributes';
|
||||
|
||||
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
@@ -28,6 +29,7 @@ class SaveBrandRequest extends Request
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
private function getSlugRules()
|
||||
{
|
||||
$rules = $this->route()->getName() === 'admin.brands.update'
|
||||
|
||||
@@ -3,14 +3,11 @@
|
||||
namespace Modules\Brand\Providers;
|
||||
|
||||
use Modules\Brand\Admin\BrandTabs;
|
||||
use Modules\Support\Traits\AddsAsset;
|
||||
use Illuminate\Support\ServiceProvider;
|
||||
use Modules\Admin\Ui\Facades\TabManager;
|
||||
|
||||
class BrandServiceProvider extends ServiceProvider
|
||||
{
|
||||
use AddsAsset;
|
||||
|
||||
/**
|
||||
* Bootstrap the application services.
|
||||
*
|
||||
@@ -19,9 +16,5 @@ class BrandServiceProvider extends ServiceProvider
|
||||
public function boot()
|
||||
{
|
||||
TabManager::register('brands', BrandTabs::class);
|
||||
|
||||
$this->addAdminAssets('admin.brands.(create|edit)', [
|
||||
'admin.media.css', 'admin.media.js', 'admin.brand.js',
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,5 @@
|
||||
|
||||
return [
|
||||
'name' => 'Name',
|
||||
'slug' => 'URL',
|
||||
'is_active' => 'Status',
|
||||
];
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'index' => 'Index Brand',
|
||||
'create' => 'Create Brand',
|
||||
'edit' => 'Edit Brand',
|
||||
'destroy' => 'Delete Brand',
|
||||
'index' => 'Index Test',
|
||||
'create' => 'Create Test',
|
||||
'edit' => 'Edit Test',
|
||||
'destroy' => 'Delete Test',
|
||||
];
|
||||
|
||||
@@ -16,3 +16,11 @@
|
||||
@endsection
|
||||
|
||||
@include('brand::admin.brands.partials.shortcuts')
|
||||
|
||||
@push('globals')
|
||||
@vite([
|
||||
'Modules/Brand/Resources/assets/admin/js/main.js',
|
||||
'Modules/Media/Resources/assets/admin/sass/main.scss',
|
||||
'Modules/Media/Resources/assets/admin/js/main.js',
|
||||
])
|
||||
@endpush
|
||||
@@ -18,3 +18,11 @@
|
||||
@endsection
|
||||
|
||||
@include('brand::admin.brands.partials.shortcuts')
|
||||
|
||||
@push('globals')
|
||||
@vite([
|
||||
'Modules/Brand/Resources/assets/admin/js/main.js',
|
||||
'Modules/Media/Resources/assets/admin/sass/main.scss',
|
||||
'Modules/Media/Resources/assets/admin/js/main.js',
|
||||
])
|
||||
@endpush
|
||||
@@ -27,7 +27,7 @@
|
||||
@endcomponent
|
||||
|
||||
@push('scripts')
|
||||
<script>
|
||||
<script type="module">
|
||||
new DataTable('#brands-table .table', {
|
||||
columns: [
|
||||
{ data: 'checkbox', orderable: false, searchable: false, width: '3%' },
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
@endpush
|
||||
|
||||
@push('scripts')
|
||||
<script>
|
||||
<script type="module">
|
||||
keypressAction([
|
||||
{ key: 'b', route: "{{ route('admin.brands.index') }}" }
|
||||
]);
|
||||
|
||||
@@ -38,4 +38,9 @@ Route::delete('brands/{ids?}', [
|
||||
'middleware' => 'can:admin.brands.destroy',
|
||||
]);
|
||||
|
||||
// append
|
||||
Route::get('brands/index/table', [
|
||||
'as' => 'admin.brands.table',
|
||||
'uses' => 'BrandController@table',
|
||||
'middleware' => 'can:admin.brands.index',
|
||||
]);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user