diff --git a/app/Http/Controllers/Admin/AreaController.php b/app/Http/Controllers/Admin/AreaController.php
index f193ca7..602832b 100644
--- a/app/Http/Controllers/Admin/AreaController.php
+++ b/app/Http/Controllers/Admin/AreaController.php
@@ -17,7 +17,7 @@ class AreaController extends Controller
//
public function index()
{
- $areas = Area::all('name', 'icon')->sortBy('name');
+ $areas = Area::orderByDesc('sort')->orderBy('name')->get();
return view('admin.areas.area-list', compact('areas'));
}
diff --git a/app/Models/Area.php b/app/Models/Area.php
index 71d8716..cb514f2 100644
--- a/app/Models/Area.php
+++ b/app/Models/Area.php
@@ -46,6 +46,7 @@ class Area extends Model
'preloader',
'product',
'products',
+ 'product_grid',
'products_page',
'register',
'questions',
@@ -60,15 +61,23 @@ class Area extends Model
public function getSegmentAttribute()
{
- return json_decode($this->valid_segments,true);
+ return json_decode($this->valid_segments, true);
}
- public function getRouteKeyName(){
+ public function getRouteKeyName()
+ {
return 'name';
}
- public function parts(){
+ public function parts()
+ {
return $this->hasMany(Part::class);
}
+
+ public function defPart()
+ {
+ $p = $this->parts()->first();
+ return 'segments.' . $p->segment . '.' . $p->part . '.' . $p->part;
+ }
}
diff --git a/database/migrations/2024_07_04_050212_create_areas_table.php b/database/migrations/2024_07_04_050212_create_areas_table.php
index 161657d..948aba7 100644
--- a/database/migrations/2024_07_04_050212_create_areas_table.php
+++ b/database/migrations/2024_07_04_050212_create_areas_table.php
@@ -19,6 +19,7 @@ return new class extends Migration
$table->json('valid_segments');
$table->string('preview')->nullable();
$table->boolean('use_default')->default(true);
+ $table->integer('sort')->default(0);
$table->timestamps();
});
}
diff --git a/database/seeders/AreaSeeder.php b/database/seeders/AreaSeeder.php
index 60ca89d..98e2133 100644
--- a/database/seeders/AreaSeeder.php
+++ b/database/seeders/AreaSeeder.php
@@ -41,6 +41,7 @@ class AreaSeeder extends Seeder
'max' => 2,
'preview' => null,
'icon' => 'ri-window-line',
+ 'sort' => 99
],
[
'name' => 'defaultFooter',
@@ -50,6 +51,7 @@ class AreaSeeder extends Seeder
'max' => 2,
'preview' => null,
'icon' => 'ri-window-line rotate-180',
+ 'sort' => 98
],
[
'name' => 'index',
@@ -61,6 +63,7 @@ class AreaSeeder extends Seeder
'max' => 10,
'preview' => 'client.welcome',
'icon' => 'ri-home-smile-line',
+ 'sort' => 97
],
[
'name' => 'post',
@@ -271,12 +274,22 @@ class AreaSeeder extends Seeder
'preview' => null,
'icon' => 'ri-mail-open-line',
],
+ [
+ 'name' => 'product-grid',
+ 'valid_segments' => json_encode(
+ ["product_grid"]
+ ),
+ 'max' => 1,
+ 'preview' => null,
+ 'icon' => 'ri-layout-grid-line',
+ ],
];
foreach ($areas as $area) {
$a = new Area();
$a->name = $area['name'];
$a->max = $area['max'];
+ $a->sort = $area['sort']??0;
$a->valid_segments = $area['valid_segments'];
$a->icon = $area['icon'];
$a->preview = $area['preview'];
diff --git a/database/seeders/PartSeeder.php b/database/seeders/PartSeeder.php
index 9d637eb..6bf5af4 100644
--- a/database/seeders/PartSeeder.php
+++ b/database/seeders/PartSeeder.php
@@ -306,6 +306,15 @@ class PartSeeder extends Seeder
$part->sort = 1;
$part->save();
+ // -------------------------------------------------------------
+
+ $part = new Part();
+ $part->segment = 'product_grid';
+ $part->part = 'DefaultProductGrid';
+ $part->area_id = Area::where('name', 'product-grid')->first()->id;
+ $part->sort = 1;
+ $part->save();
+
}
}
diff --git a/resources/lang/fa.json b/resources/lang/fa.json
index 7698465..d994f79 100644
--- a/resources/lang/fa.json
+++ b/resources/lang/fa.json
@@ -271,7 +271,7 @@
"Index image": "تصویر شاخص",
"Information": "اطلاعات",
"Interaction": "تعامل",
- "Invalid area segment": "محیط نامطلوب است",
+ "Invalid area segment": "",
"Invalid json file!": "فایل جیسان معتبر نیست",
"Invalid morph": "چند ریخیتی نا معتبر",
"Invoice": "صورت حساب",
@@ -353,6 +353,7 @@
"Print": "چاپ",
"Product": "محصول",
"Product added to compare": "محصول به فهرست مقایسه افزوده شد",
+ "Product grid": "کاشی محصول",
"Product added to favorites": "محصول به علاقهمندی شما افزوده شد",
"Product removed from compare": "محصول از فهرست مقایسه حذف شد",
"Product removed from favorites": "محصول از علاقه مندی های شما حذف شد",
diff --git a/resources/views/segments/product/ProductAria/ProductAria.blade.php b/resources/views/segments/product/ProductAria/ProductAria.blade.php
index c397d6f..d4bf5ac 100644
--- a/resources/views/segments/product/ProductAria/ProductAria.blade.php
+++ b/resources/views/segments/product/ProductAria/ProductAria.blade.php
@@ -201,18 +201,13 @@
{{__("Related products")}}
-
+
@foreach($product->category->products()->where('status',1)->limit(10)->get() as $p)
-
-
-
-
-
- {{$p->name}}
-
-
+ @foreach($product->category->products()->where('status',1)->limit(10)->get() as $p)
+
+ @include(\App\Models\Area::where('name','product-grid')->first()->defPart(),['$product' => $p])
-
+ @endforeach
@endforeach
diff --git a/resources/views/segments/product/ProductKaren/ProductKaren.blade.php b/resources/views/segments/product/ProductKaren/ProductKaren.blade.php
index 0eb8037..147bfb8 100644
--- a/resources/views/segments/product/ProductKaren/ProductKaren.blade.php
+++ b/resources/views/segments/product/ProductKaren/ProductKaren.blade.php
@@ -197,17 +197,10 @@
{{__("Related products")}}
-
+
@foreach($product->category->products()->where('status',1)->limit(10)->get() as $p)
-
+ @include(\App\Models\Area::where('name','product-grid')->first()->defPart(),['$product' => $p])
@endforeach
diff --git a/resources/views/segments/product_grid/DefaultProductGrid/DefaultProductGrid.blade.php b/resources/views/segments/product_grid/DefaultProductGrid/DefaultProductGrid.blade.php
new file mode 100644
index 0000000..2cde60c
--- /dev/null
+++ b/resources/views/segments/product_grid/DefaultProductGrid/DefaultProductGrid.blade.php
@@ -0,0 +1,37 @@
+
diff --git a/resources/views/segments/product_grid/DefaultProductGrid/DefaultProductGrid.js b/resources/views/segments/product_grid/DefaultProductGrid/DefaultProductGrid.js
new file mode 100644
index 0000000..e69de29
diff --git a/resources/views/segments/product_grid/DefaultProductGrid/DefaultProductGrid.json b/resources/views/segments/product_grid/DefaultProductGrid/DefaultProductGrid.json
new file mode 100644
index 0000000..6c223e2
--- /dev/null
+++ b/resources/views/segments/product_grid/DefaultProductGrid/DefaultProductGrid.json
@@ -0,0 +1,10 @@
+{
+ "name": "DefaultProductGrid",
+ "version": "1.0",
+ "author": "xStack",
+ "email": "xshop@xstack.ir",
+ "license": "GPL-3.0-or-later",
+ "url": "https:\/\/xstack.ir",
+ "author_url": "https:\/\/4xmen.ir",
+ "packages": []
+}
\ No newline at end of file
diff --git a/resources/views/segments/product_grid/DefaultProductGrid/DefaultProductGrid.php b/resources/views/segments/product_grid/DefaultProductGrid/DefaultProductGrid.php
new file mode 100644
index 0000000..c25576e
--- /dev/null
+++ b/resources/views/segments/product_grid/DefaultProductGrid/DefaultProductGrid.php
@@ -0,0 +1,21 @@
+
@foreach($products as $product)
-
+ @include(\App\Models\Area::where('name','product-grid')->first()->defPart(),compact('product'))
@endforeach
diff --git a/resources/views/segments/products_page/ProductGrid/ProductGrid.scss b/resources/views/segments/products_page/ProductGrid/ProductGrid.scss
index a95d820..648052f 100644
--- a/resources/views/segments/products_page/ProductGrid/ProductGrid.scss
+++ b/resources/views/segments/products_page/ProductGrid/ProductGrid.scss
@@ -7,82 +7,4 @@
object-fit: cover;
}
- .product-item {
- border: 1px solid silver;
- box-shadow: var(--xshop-shadow);
- border-radius: var(--xshop-border-radius);
- position: relative;
- overflow: hidden;
-
- h3 {
- margin-top: 1rem;
- text-align: center;
- font-size: 20px;
- font-weight: 300;
- color: var(--xshop-text);
- }
-
- .prices {
- display: grid;
- grid-auto-columns: minmax(0, 1fr);
- grid-auto-flow: column;
- text-align: center;
-
- span {
- display: block;
- padding: .5rem;
- }
-
- .old-price{
- text-decoration: red line-through;
- color: gray;
- }
- }
-
- .fav-btn, .compare-btn {
- position: absolute;
- inset-inline-start: -12%;
- top: 3%;
- width: 40px;
- height: 40px;
- background: #ffffff55;
- font-size: 25px;
- display: flex;
- align-items: center;
- justify-content: center;
- border-radius: 50%;
- z-index: 4;
- cursor: pointer;
- transition: .4s;
-
- &:hover {
- background: var(--xshop-primary);
- color: var(--xshop-diff);
- }
- }
-
- .fav-btn {
- top: calc(3% + 50px);
-
- &[data-is-fav="-1"]{
- display: none;
- }
- &[data-is-fav="1"]{
- .ri-heart-line{
- display: none;
- }
- }
- &[data-is-fav="0"]{
- .ri-heart-fill{
- display: none;
- }
- }
- }
-
- &:hover {
- .fav-btn, .compare-btn {
- inset-inline-start: 3%;
- }
- }
- }
}
diff --git a/resources/views/segments/products_page/ProductGridSidebar/ProductGridSidebar.blade.php b/resources/views/segments/products_page/ProductGridSidebar/ProductGridSidebar.blade.php
index 5d4f98a..1a6f2bc 100644
--- a/resources/views/segments/products_page/ProductGridSidebar/ProductGridSidebar.blade.php
+++ b/resources/views/segments/products_page/ProductGridSidebar/ProductGridSidebar.blade.php
@@ -13,43 +13,7 @@
@foreach($products as $product)
-
+ @include(\App\Models\Area::where('name','product-grid')->first()->defPart(),compact('product'))
@endforeach
diff --git a/resources/views/segments/products_page/ProductGridSidebar/ProductGridSidebar.scss b/resources/views/segments/products_page/ProductGridSidebar/ProductGridSidebar.scss
index f20bfbd..b2c697d 100644
--- a/resources/views/segments/products_page/ProductGridSidebar/ProductGridSidebar.scss
+++ b/resources/views/segments/products_page/ProductGridSidebar/ProductGridSidebar.scss
@@ -25,84 +25,6 @@
object-fit: cover;
}
- .product-item {
- border: 1px solid silver;
- box-shadow: var(--xshop-shadow);
- border-radius: var(--xshop-border-radius);
- position: relative;
- overflow: hidden;
-
- h3 {
- margin-top: 1rem;
- text-align: center;
- font-size: 20px;
- font-weight: 300;
- color: var(--xshop-text);
- }
-
- .prices {
- display: grid;
- grid-auto-columns: minmax(0, 1fr);
- grid-auto-flow: column;
- text-align: center;
-
- span {
- display: block;
- padding: .5rem;
- }
-
- .old-price{
- text-decoration: red line-through;
- color: gray;
- }
- }
-
- .fav-btn, .compare-btn {
- position: absolute;
- inset-inline-start: -12%;
- top: 3%;
- width: 40px;
- height: 40px;
- background: #ffffff55;
- font-size: 25px;
- display: flex;
- align-items: center;
- justify-content: center;
- border-radius: 50%;
- z-index: 4;
- cursor: pointer;
- transition: .4s;
-
- &:hover {
- background: var(--xshop-primary);
- color: var(--xshop-diff);
- }
- }
-
- .fav-btn {
- top: calc(3% + 50px);
-
- &[data-is-fav="-1"]{
- display: none;
- }
- &[data-is-fav="1"]{
- .ri-heart-line{
- display: none;
- }
- }
- &[data-is-fav="0"]{
- .ri-heart-fill{
- display: none;
- }
- }
- }
-
- &:hover {
- .fav-btn, .compare-btn {
- inset-inline-start: 3%;
- }
- }
- }
aside{