diff --git a/app/Helpers/Helper.php b/app/Helpers/Helper.php index b4b9fc5..f527566 100644 --- a/app/Helpers/Helper.php +++ b/app/Helpers/Helper.php @@ -802,7 +802,7 @@ function getMenuBySetting($key) /** * get group's posts by setting key * @param $key - * @param $limit + * @param integer $limit * @return \App\Models\Post[]|\Illuminate\Database\Eloquent\Collection|\LaravelIdea\Helper\App\Models\_IH_Post_C */ function getGroupPostsBySetting($key, $limit = 10, $order = 'id', $dir = "DESC") @@ -814,7 +814,9 @@ function getGroupPostsBySetting($key, $limit = 10, $order = 'id', $dir = "DESC") /** * get group's posts by setting key * @param $key - * @param $limit + * @param integer $limit + * @param string $order + * @param string $dir * @return \App\Models\Post[]|\Illuminate\Database\Eloquent\Collection|\LaravelIdea\Helper\App\Models\_IH_Post_C */ function getCategoryProductBySetting($key, $limit = 10, $order = 'id', $dir = "DESC") diff --git a/app/Http/Controllers/Admin/ProductController.php b/app/Http/Controllers/Admin/ProductController.php index 8ee6a05..94bc54b 100644 --- a/app/Http/Controllers/Admin/ProductController.php +++ b/app/Http/Controllers/Admin/ProductController.php @@ -19,7 +19,7 @@ class ProductController extends XController // protected $_MODEL_ = Product::class; // protected $SAVE_REQUEST = ProductSaveRequest::class; - protected $cols = ['name','category_id','view','sell']; + protected $cols = ['name','category_id','view','sell','status']; protected $extra_cols = ['id','slug','image_index']; protected $searchable = ['name','slug','description','excerpt','sku','table']; @@ -170,6 +170,14 @@ class ProductController extends XController } break; /*restore**/ + case 'publish': + $this->_MODEL_::whereIn('id', $request->input('id'))->update(['status' => 1]); + $msg = __(':COUNT items published successfully', ['COUNT' => count($ids)]); + break; + case 'draft': + $this->_MODEL_::whereIn('id', $request->input('id'))->update(['status' => 0]); + $msg = __(':COUNT items drafted successfully', ['COUNT' => count($ids)]); + break; default: $msg = __('Unknown bulk action : :ACTION', ["ACTION" => $action]); } diff --git a/app/Models/Product.php b/app/Models/Product.php index 8993bf7..3250b49 100644 --- a/app/Models/Product.php +++ b/app/Models/Product.php @@ -272,4 +272,8 @@ class Product extends Model implements HasMedia return route(''); } + + public function getPrice(){ + return number_format($this->price); + } } diff --git a/resources/sass/client-custom/_zfix.scss b/resources/sass/client-custom/_zfix.scss index 2cb4b74..bbd1cd3 100644 --- a/resources/sass/client-custom/_zfix.scss +++ b/resources/sass/client-custom/_zfix.scss @@ -28,7 +28,7 @@ a,a:visited{ } .btn-primary{ background: var(--xshop-primary); - border-color: var(--xshop-secondary); + border-color: var(--xshop-primary); color: var(--xshop-diff) !important; &:hover{ diff --git a/resources/sass/panel/_common.scss b/resources/sass/panel/_common.scss index 12fc6dc..9b46b4b 100644 --- a/resources/sass/panel/_common.scss +++ b/resources/sass/panel/_common.scss @@ -100,7 +100,7 @@ a.btn,a.action-btn,a.circle-btn{ .status-0,.status-CLOSED { background: red; } -.status-ANSWERED{ +.status-1,.status-ANSWERED{ background: lime; } .status-PENDING{ diff --git a/resources/views/segments/footer/FireFooter/FireFooter.scss b/resources/views/segments/footer/FireFooter/FireFooter.scss index a2d7871..1717cc9 100644 --- a/resources/views/segments/footer/FireFooter/FireFooter.scss +++ b/resources/views/segments/footer/FireFooter/FireFooter.scss @@ -1,5 +1,6 @@ .FireFooter { + overflow: hidden; padding-top: 7rem; .footer { diff --git a/resources/views/segments/products/TreeGridProducts/TreeGridProducts.blade.php b/resources/views/segments/products/TreeGridProducts/TreeGridProducts.blade.php new file mode 100644 index 0000000..7a4bc15 --- /dev/null +++ b/resources/views/segments/products/TreeGridProducts/TreeGridProducts.blade.php @@ -0,0 +1,81 @@ +
+
+ +
+
+
+

+ {{getSetting($data->area->name.'_'.$data->part.'_title')}} +

+
+ +
+ @foreach(getCategoryProductBySetting($part->area->name . '_' . $part->part.'_category') as $product) +
+
+ + {{$product->name}} + +

+ + {{$product->name}} + +

+ +
+ {{$product->getPrice()}} +
+ + + + + Add to card + + +
+
+ @endforeach +
+
+
+
+
+ + {{getSetting($data->area->name.'_'.$data->part.'_badgex')}} + + +
+ @foreach(getCategoryProductBySetting($part->area->name . '_' . $part->part.'_categoryx') as $product) +
+ + {{$product->name}} + +
+ @endforeach +
+
+
+ + {{getSetting($data->area->name.'_'.$data->part.'_badgey')}} + + +
+ @foreach(getCategoryProductBySetting($part->area->name . '_' . $part->part.'_categoryy') as $product) +
+ + {{$product->name}} + +
+ @endforeach +
+
+
+
+
diff --git a/resources/views/segments/products/TreeGridProducts/TreeGridProducts.js b/resources/views/segments/products/TreeGridProducts/TreeGridProducts.js new file mode 100644 index 0000000..112a829 --- /dev/null +++ b/resources/views/segments/products/TreeGridProducts/TreeGridProducts.js @@ -0,0 +1,82 @@ +import {tns} from "tiny-slider/src/tiny-slider"; + +var treeSlider,treeSliderX, treeSliderY ; + +document.addEventListener('DOMContentLoaded', () => { + document.querySelectorAll('.tree-grid .section-main')?.forEach(function (el) { + if (el.classList.contains('.tns-slider')){ + console.log('ignore'); + return 'ignore'; + } + treeSlider = tns({ + container: el, + items: 3, + slideBy: 'page', + autoplay: true, + autoplayButton: false, + // nextButton: false, + controls: false, + autoplayHoverPause: true, + mouseDrag: true, + gutter: 7, + responsive:{ + 560:{ + items: 1, + }, + 768:{ + items: 2, + }, + 1000:{ + items: 3, + }, + 1400:{ + items: 4, + }, + + } + // speed:10000, + }); + }); + document.querySelectorAll('.tree-grid .section-second')?.forEach(function (el) { + if (el.classList.contains('.tns-slider')){ + console.log('ignore'); + return 'ignore'; + } + treeSliderX = tns({ + container: el, + items: 1, + slideBy: 'page', + autoplay: true, + autoplayButton: false, + // nextButton: false, + controls: false, + autoplayHoverPause: true, + autoplayTimeout: 8000, + mouseDrag: true, + gutter: 7, + edgePadding: 60, + // speed:10000, + }); + }); + document.querySelectorAll('.tree-grid .section-third')?.forEach(function (el) { + if (el.classList.contains('.tns-slider')){ + console.log('ignore'); + return 'ignore'; + } + treeSliderX = tns({ + container: el, + items: 1, + slideBy: 'page', + autoplay: true, + autoplayTimeout: 7500, + autoplayButton: false, + // nextButton: false, + controls: false, + autoplayHoverPause: true, + mouseDrag: true, + gutter: 7, + edgePadding: 60, + // speed:10000, + }); + }); +}); diff --git a/resources/views/segments/products/TreeGridProducts/TreeGridProducts.json b/resources/views/segments/products/TreeGridProducts/TreeGridProducts.json new file mode 100644 index 0000000..e6709d3 --- /dev/null +++ b/resources/views/segments/products/TreeGridProducts/TreeGridProducts.json @@ -0,0 +1,10 @@ +{ + "name": "TreeGridProducts", + "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/products/TreeGridProducts/TreeGridProducts.php b/resources/views/segments/products/TreeGridProducts/TreeGridProducts.php new file mode 100644 index 0000000..dbd4559 --- /dev/null +++ b/resources/views/segments/products/TreeGridProducts/TreeGridProducts.php @@ -0,0 +1,131 @@ +section = 'theme'; + $setting->key = $part->area->name . '_' . $part->part.'_title'; + $setting->value = 'Favorite products'; + $setting->type = 'TEXT'; + $setting->size = 4; + $setting->title = $part->area->name . ' ' . $part->part .' main title'; + $setting->save(); + + $setting = new Setting(); + $setting->section = 'theme'; + $setting->key = $part->area->name . '_' . $part->part.'_color'; + $setting->value = '#273763'; + $setting->type = 'COLOR'; + $setting->size = 4; + $setting->title = $part->area->name . ' ' . $part->part .' main color'; + $setting->save(); + + $setting = new Setting(); + $setting->section = 'theme'; + $setting->key = $part->area->name . '_' . $part->part.'_category'; + $setting->value = Category::first()->id; + $setting->type = 'CATEGORY'; + $setting->size = 4; + $setting->title = $part->area->name . ' ' . $part->part .' main category'; + $setting->save(); + + $setting = new Setting(); + $setting->section = 'theme'; + $setting->key = $part->area->name . '_' . $part->part.'_badgex'; + $setting->value = '22%'; + $setting->type = 'TEXT'; + $setting->size = 3; + $setting->title = $part->area->name . ' ' . $part->part .' Second badge text'; + $setting->save(); + + $setting = new Setting(); + $setting->section = 'theme'; + $setting->key = $part->area->name . '_' . $part->part.'_gradx1'; + $setting->value = '#FF7D33'; + $setting->type = 'COLOR'; + $setting->size = 3; + $setting->title = $part->area->name . ' ' . $part->part .' second gradiant color 1'; + $setting->save(); + + $setting = new Setting(); + $setting->section = 'theme'; + $setting->key = $part->area->name . '_' . $part->part.'_gradx2'; + $setting->value = '#FF971D'; + $setting->type = 'COLOR'; + $setting->size = 3; + $setting->title = $part->area->name . ' ' . $part->part .' second gradiant color 2'; + $setting->save(); + + $setting = new Setting(); + $setting->section = 'theme'; + $setting->key = $part->area->name . '_' . $part->part.'_categoryx'; + $setting->value = Category::first()->id; + $setting->type = 'CATEGORY'; + $setting->size = 3; + $setting->title = $part->area->name . ' ' . $part->part .' second category'; + $setting->save(); + + $setting = new Setting(); + $setting->section = 'theme'; + $setting->key = $part->area->name . '_' . $part->part.'_badgey'; + $setting->value = 'Sale'; + $setting->type = 'TEXT'; + $setting->size = 3; + $setting->title = $part->area->name . ' ' . $part->part .' third badge text'; + $setting->save(); + + $setting = new Setting(); + $setting->section = 'theme'; + $setting->key = $part->area->name . '_' . $part->part.'_grady1'; + $setting->value = '#FF7D33'; + $setting->type = 'COLOR'; + $setting->size = 3; + $setting->title = $part->area->name . ' ' . $part->part .' third gradiant color 1'; + $setting->save(); + + $setting = new Setting(); + $setting->section = 'theme'; + $setting->key = $part->area->name . '_' . $part->part.'_grady2'; + $setting->value = '#430392'; + $setting->type = 'COLOR'; + $setting->size = 3; + $setting->title = $part->area->name . ' ' . $part->part .' third gradiant color 2'; + $setting->save(); + + $setting = new Setting(); + $setting->section = 'theme'; + $setting->key = $part->area->name . '_' . $part->part.'_categoryy'; + $setting->value = Category::first()->id; + $setting->type = 'CATEGORY'; + $setting->size = 3; + $setting->title = $part->area->name . ' ' . $part->part .' third category'; + $setting->save(); + } + public static function onRemove(Part $part = null) + { + Setting::where('key',$part->area->name . '_' . $part->part.'_title')->first()?->delete(); + Setting::where('key',$part->area->name . '_' . $part->part.'_category')->first()?->delete(); + Setting::where('key',$part->area->name . '_' . $part->part.'_color')->first()?->delete(); + Setting::where('key',$part->area->name . '_' . $part->part.'_badgex')->first()?->delete(); + Setting::where('key',$part->area->name . '_' . $part->part.'_gradx1')->first()?->delete(); + Setting::where('key',$part->area->name . '_' . $part->part.'_gradx2')->first()?->delete(); + Setting::where('key',$part->area->name . '_' . $part->part.'_categoryx')->first()?->delete(); + Setting::where('key',$part->area->name . '_' . $part->part.'_badgey')->first()?->delete(); + Setting::where('key',$part->area->name . '_' . $part->part.'_grady1')->first()?->delete(); + Setting::where('key',$part->area->name . '_' . $part->part.'_grady2')->first()?->delete(); + Setting::where('key',$part->area->name . '_' . $part->part.'_categoryy')->first()?->delete(); + } + public static function onMount(Part $part = null) + { + return $part; + } +} diff --git a/resources/views/segments/products/TreeGridProducts/TreeGridProducts.scss b/resources/views/segments/products/TreeGridProducts/TreeGridProducts.scss new file mode 100644 index 0000000..00f926b --- /dev/null +++ b/resources/views/segments/products/TreeGridProducts/TreeGridProducts.scss @@ -0,0 +1,103 @@ +.TreeGridProducts { + + margin-bottom: 2rem; + + h1{ + font-size: 22px; + } + .tree-product-box{ + padding: .4rem; + overflow: hidden; + background: var(--xshop-background); + border-radius: var(--xshop-border-radius); + color: var(--xshop-text); + .price{ + padding: 4px; + text-align: center; + color: var(--xshop-secondary); + margin-bottom: 7px; + } + + img{ + width: 100%; + } + h4{ + font-size: 17px; + margin: 0; + text-align: center; + padding: .4rem; + overflow: hidden; + } + a{ + color: var(--xshop-text); + } + + } + .tree-grid { + display: grid; + grid-template-columns: repeat(8,1fr); + grid-template-rows: auto; + grid-gap: 10px 10px; + padding-top: 1rem; + .tree-grid-item { + + overflow: hidden; + border-radius: var(--xshop-border-radius); + //display: flex; + //align-items: center; + //justify-content: center; + color: var(--xshop-diff); + padding: 2rem 1rem; + position: relative; + box-shadow: var(--xshop-shadow); + &:first-child { + grid-column: 1/5 span; + grid-row: 1/3; + background: var(---main-bg); + } + &:nth-child(2) { + grid-column: 6/3 span; + grid-row: 1/2; + background: rgb(255,125,51); + background: linear-gradient(180deg, var(--gx1) 0%, var(--gx2) 100%); + overflow: hidden; + } + &:nth-child(3) { + grid-column: 6/3 span; + grid-row: 2/2; + background: linear-gradient(180deg, var(--gy1) 0%, var(--gy2) 100%); + overflow: hidden; + } + } + + } + + .badge { + position: absolute; + inset-inline-end: 0; + top: 0; + padding: 15px; + border-radius: var(--xshop-border-radius); + width: 75px; + background: #283035aa !important; + } + + .section-second,.section-third{ + img{ + height: 128px; + } + } +} + +@media ( max-width: 1024px ) { + .TreeGridProducts { + .tree-grid { + grid-template-columns: repeat(1, 1fr) !important; + grid-template-rows: repeat(1, 1fr) !important; + .tree-grid-item { + grid-column: auto !important; + grid-row: auto !important; + } + } + } +} diff --git a/resources/views/segments/products/TreeGridProducts/screenshot.png b/resources/views/segments/products/TreeGridProducts/screenshot.png new file mode 100644 index 0000000..a7125ef Binary files /dev/null and b/resources/views/segments/products/TreeGridProducts/screenshot.png differ diff --git a/resources/views/segments/slider/SliderSimple/SliderSimple.js b/resources/views/segments/slider/SliderSimple/SliderSimple.js index 6248972..e1ab4f6 100755 --- a/resources/views/segments/slider/SliderSimple/SliderSimple.js +++ b/resources/views/segments/slider/SliderSimple/SliderSimple.js @@ -4,6 +4,10 @@ var sliderSimple ; document.addEventListener('DOMContentLoaded', () => { document.querySelectorAll('.SliderSimple')?.forEach(function (el) { + if (el.classList.contains('.tns-slider')){ + console.log('ignore'); + return 'ignore'; + } sliderSimple = tns({ container: el, items: 1, diff --git a/routes/web.php b/routes/web.php index 568684b..72d1170 100644 --- a/routes/web.php +++ b/routes/web.php @@ -356,7 +356,7 @@ Route::prefix(config('app.panel.prefix'))->name('admin.')->group( Route::get('test',function (){ // return \Resources\Views\Segments\PreloaderCircle::onAdd(); - return \App\Helpers\TVisitor::GetKeyword(); + return getCategoryProductBySetting('index_TreeGridProducts_category'); })->name('test');