Manage homepage by article, modify article template, enhance basket (add selector)
This commit is contained in:
@@ -43,6 +43,28 @@ class ArticlesDataTable extends DataTable
|
||||
public function modifier($datatables)
|
||||
{
|
||||
$datatables
|
||||
->editColumn('visible', function (Article $article) {
|
||||
return view("components.form.toggle", [
|
||||
'name' => 'visible',
|
||||
'value' => $article->visible,
|
||||
'on' => __('oui'),
|
||||
'off' => __('non'),
|
||||
'meta' => 'data-id=' . $article->id,
|
||||
'size' => 'sm',
|
||||
'class' => 'visible',
|
||||
]);
|
||||
})
|
||||
->editColumn('homepage', function (Article $article) {
|
||||
return view("components.form.toggle", [
|
||||
'name' => 'homepage',
|
||||
'value' => $article->homepage,
|
||||
'on' => __('oui'),
|
||||
'off' => __('non'),
|
||||
'meta' => 'data-id=' . $article->id,
|
||||
'size' => 'sm',
|
||||
'class' => 'homepage',
|
||||
]);
|
||||
})
|
||||
->editColumn('thumb', function (Article $article) {
|
||||
$image = Articles::getFullImageByArticle($article);
|
||||
return '<img src="' . Articles::getThumbSrc($image) . '">';
|
||||
@@ -64,6 +86,8 @@ class ArticlesDataTable extends DataTable
|
||||
protected function getColumns()
|
||||
{
|
||||
return [
|
||||
Column::make('visible')->title('Visible')->searchable(false),
|
||||
Column::make('homepage')->title('Accueil')->searchable(false),
|
||||
Column::make('article_nature.name')->title('Nature'),
|
||||
Column::make('thumb')->title('')->searchable(false)->orderable(false)->width(40)->class('text-center'),
|
||||
Column::make('name')->title('Nom'),
|
||||
|
||||
@@ -89,4 +89,17 @@ class ArticleController extends Controller
|
||||
$index = $request->input('index');
|
||||
return Articles::deleteImage($id, $index);
|
||||
}
|
||||
|
||||
public function toggleVisible(Request $request)
|
||||
{
|
||||
$data = Articles::toggleVisible($request->input('id'), ($request->input('visible') == 'true') ? 1 : 0);
|
||||
return response()->json(['error' => 0]);
|
||||
}
|
||||
|
||||
public function toggleHomepage(Request $request)
|
||||
{
|
||||
$data = Articles::toggleHomepage($request->input('id'), ($request->input('homepage') == 'true') ? 1 : 0);
|
||||
return response()->json(['error' => 0]);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -27,16 +27,17 @@ class BasketController extends Controller
|
||||
if (ShopCart::has($offer_id)) {
|
||||
$ret = ShopCart::remove($offer_id);
|
||||
}
|
||||
$data = Offers::getBasketData($offer_id, $quantity);
|
||||
$ret = ShopCart::add($data);
|
||||
$data = $quantity ? Offers::getBasketData($offer_id, $quantity) : false;
|
||||
$ret = $data ? ShopCart::add($data) : false;
|
||||
return true;
|
||||
}
|
||||
|
||||
public function basket()
|
||||
{
|
||||
$data = self::init();
|
||||
$data['basket'] = Offers::getBasket();
|
||||
dump($data['basket']->toArray());
|
||||
exit;
|
||||
//dump($data['basket']);
|
||||
// exit;
|
||||
return view('Shop.Baskets.basket', $data);
|
||||
}
|
||||
|
||||
|
||||
@@ -131,4 +131,9 @@ class Article extends Model implements HasMedia
|
||||
{
|
||||
return $query->where($this->table . '.visible', 1);
|
||||
}
|
||||
|
||||
public function scopeHomepage($query)
|
||||
{
|
||||
return $query->where($this->table . '.homepage', 1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -133,49 +133,64 @@ class Articles
|
||||
$data[] = [
|
||||
'id' => $shelve->id,
|
||||
'name' => $shelve->name,
|
||||
'articles' => self::getArticlesToSell($shelve->id),
|
||||
'articles' => self::getArticlesToSell([
|
||||
'category_id' => $shelve->id,
|
||||
'homepage' => true,
|
||||
]),
|
||||
];
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
|
||||
public static function getArticlesToSell($category_id = false, $tags = false)
|
||||
public static function getArticlesToSell($options)
|
||||
{
|
||||
$articles = self::getArticlesWithOffers($category_id, $tags);
|
||||
$articles = self::getArticlesWithOffers($options);
|
||||
foreach ($articles as $article) {
|
||||
$price_lists = $article->offers[0]->tariff->price_lists->toArray();
|
||||
// dump($price_lists);
|
||||
if (count($price_lists)) {
|
||||
if (!is_array($data[$article->name] ?? false)) {
|
||||
$data[$article->name] = [
|
||||
'id' => $article->id,
|
||||
'description' => (!empty($article->description)) ? $article->description : $article->product->description,
|
||||
'image' => self::getFullImageByArticle($article),
|
||||
'product_type' => $article->product_type,
|
||||
'product_id' => $article->product_id,
|
||||
'product_name' => $article->product->name,
|
||||
'parent_name' => trim(str_replace($article->product->name, '', $article->name)),
|
||||
];
|
||||
$data[$article->name] = self::getDataForSale($article);
|
||||
}
|
||||
$prices = $price_lists[0]['price_list_values'][0];
|
||||
$article_nature_name = strtolower($article->article_nature->name);
|
||||
// dump($prices);
|
||||
$data[$article->name][$article_nature_name] = [
|
||||
'article_id' => $article->id,
|
||||
'offer_id' => $article->offers[0]->id,
|
||||
'quantity' => $prices['quantity'],
|
||||
'price' => $prices['price_taxed'],
|
||||
'variation' => $article->offers[0]->variation->name,
|
||||
];
|
||||
$data[$article->name][$article_nature_name] = self::getDataPriceForSale($article, $prices);
|
||||
}
|
||||
}
|
||||
return $data ?? false;
|
||||
}
|
||||
|
||||
public static function getArticlesWithOffers($category_id = false, $tags = false, $sale_channel_id = false)
|
||||
public static function getDataForSale($article)
|
||||
{
|
||||
$sale_channel_id = $sale_channel_id ? $sale_channel_id : SaleChannels::getDefaultID();
|
||||
return Article::byCategory($category_id)->byTags($tags)->visible()->withAvailableOffers($sale_channel_id)->with([
|
||||
return [
|
||||
'id' => $article->id,
|
||||
'description' => (!empty($article->description)) ? $article->description : $article->product->description,
|
||||
'image' => self::getFullImageByArticle($article),
|
||||
'product_type' => $article->product_type,
|
||||
'product_id' => $article->product_id,
|
||||
'product_name' => $article->product->name,
|
||||
'parent_name' => trim(str_replace($article->product->name, '', $article->name)),
|
||||
];
|
||||
}
|
||||
|
||||
public static function getDataPriceForSale($article, $prices)
|
||||
{
|
||||
return [
|
||||
'article_id' => $article->id,
|
||||
'offer_id' => $article->offers[0]->id,
|
||||
'quantity' => $prices['quantity'],
|
||||
'price' => $prices['price_taxed'],
|
||||
'variation' => $article->offers[0]->variation->name,
|
||||
];
|
||||
}
|
||||
|
||||
public static function getArticlesWithOffers($options = false)
|
||||
{
|
||||
$category_id = $options['category_id'] ?? false;
|
||||
$sale_channel_id = $options['sale_channel_id'] ?? SaleChannels::getDefaultID();
|
||||
$tags = $options['tags'] ?? false;
|
||||
$model = ($options['homepage'] ?? false) ? Article::homepage()->visible() : Article::visible();
|
||||
return $model->byCategory($category_id)->byTags($tags)->withAvailableOffers($sale_channel_id)->with([
|
||||
'image',
|
||||
'product',
|
||||
'article_nature',
|
||||
@@ -187,6 +202,7 @@ class Articles
|
||||
])->get();
|
||||
}
|
||||
|
||||
|
||||
public static function getFull($id)
|
||||
{
|
||||
$data['article'] = self::getArticleEdit($id);
|
||||
@@ -452,4 +468,15 @@ class Articles
|
||||
{
|
||||
return Tag::storeTags($article, $tags);
|
||||
}
|
||||
|
||||
public static function toggleVisible($id, $visible)
|
||||
{
|
||||
return self::update(['visible' => $visible], $id);
|
||||
}
|
||||
|
||||
public static function toggleHomepage($id, $homepage)
|
||||
{
|
||||
return self::update(['homepage' => $homepage], $id);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -18,11 +18,22 @@ class Offers
|
||||
public static function getBasket()
|
||||
{
|
||||
$basket = ShopCart::getContent();
|
||||
$offers = Offer::with(['variation', 'article.article_nature'])->whereIn('id', ShopCart::keys())->get();
|
||||
dump($basket->toArray());
|
||||
dump($offers->toArray());
|
||||
exit;
|
||||
return $data;
|
||||
// dump($basket->toArray());
|
||||
$offers = Offer::with(['variation', 'article.article_nature', 'article.image'])->whereIn('id', ShopCart::keys())->get();
|
||||
|
||||
foreach ($basket as $item) {
|
||||
$offer = $offers->where('id', $item->id)->first();
|
||||
$article_nature = strtolower($offer->article->article_nature->name);
|
||||
$data[$article_nature][] = [
|
||||
'id' => (int) $item->id,
|
||||
'name' => $item->name,
|
||||
'quantity' => (int) $item->quantity,
|
||||
'price' => $item->price,
|
||||
'variation' => $offer->variation->name,
|
||||
'image' => Articles::getPreviewSrc($offer->article->image),
|
||||
];
|
||||
}
|
||||
return $data ?? false;
|
||||
}
|
||||
|
||||
public static function getBasketData($id, $quantity = 1)
|
||||
|
||||
@@ -1,79 +1,6 @@
|
||||
<div class="row mt-3">
|
||||
<div class="col-12">
|
||||
<div class="card card-primary card-outline card-outline-tabs">
|
||||
<div class="card-header p-0 border-bottom-0">
|
||||
|
||||
<ul class="card-title nav nav-tabs ml-auto" role="tablist">
|
||||
<li class="nav-item">
|
||||
<a href="#characteristics" class="nav-link active" data-toggle="tab" aria-expanded="true">
|
||||
Caractéristiques
|
||||
</a>
|
||||
</li>
|
||||
<!--
|
||||
<li class="nav-item">
|
||||
<a href="#offers" class="nav-link" data-toggle="tab" aria-expanded="true">
|
||||
{{ __('shop.offers.title') }}
|
||||
@if(isset($offers_count))<span class="badge">{{ $offers_count }}</span>@endif
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a href="#shipping" class="nav-link" data-toggle="tab" aria-expanded="true">
|
||||
Livraison
|
||||
@if(isset($shipping_count))<span class="badge">{{ $shipping_count }}</span>@endif
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a href="#stock" class="nav-link" data-toggle="tab" aria-expanded="true">
|
||||
Stock
|
||||
@if(isset($stock_count))<span class="badge">{{ $stock_count }}</span>@endif
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a href="#seo" class="nav-link" data-toggle="tab" aria-expanded="true">
|
||||
Référencement
|
||||
</a>
|
||||
</li>
|
||||
-->
|
||||
</ul>
|
||||
|
||||
<div class="card-tools">
|
||||
@include('components.form.toggle', [
|
||||
'name' => 'visible',
|
||||
'value' => ($article['visible'] ?? null),
|
||||
'on' => __('visible'),
|
||||
'off' => __('invisible'),
|
||||
'meta' => 'data-id=' . ($article['id'] ?? null),
|
||||
'size' => 'sm',
|
||||
])
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card-body">
|
||||
<div class="tab-content">
|
||||
<div class="tab-pane active" id="characteristics">
|
||||
@include('Admin.Shop.Articles.partials.characteristics')
|
||||
</div>
|
||||
|
||||
<div class="tab-pane" id="offers">
|
||||
|
||||
</div>
|
||||
|
||||
<div class="tab-pane" id="shipping">
|
||||
@include('Admin.Shop.Articles.partials.shipping')
|
||||
</div>
|
||||
|
||||
<div class="tab-pane" id="stock">
|
||||
@include('Admin.Shop.Articles.partials.stock')
|
||||
</div>
|
||||
|
||||
<div class="tab-pane" id="seo">
|
||||
@include('Admin.Shop.Articles.partials.seo')
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@include('Admin.Shop.Articles.partials.characteristics')
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -6,7 +6,12 @@
|
||||
|
||||
@section('content')
|
||||
@component('components.card')
|
||||
@include('components.datatable', ['route' => route('Admin.Shop.Articles.index'), 'model' => 'articles', 'with_filters' => true])
|
||||
@include('components.datatable', [
|
||||
'route' => route('Admin.Shop.Articles.index'),
|
||||
'model' => 'articles',
|
||||
'with_filters' => true,
|
||||
'callback' => 'handleArticle()',
|
||||
])
|
||||
@component('components.layout.modal', ['title' => 'Filtres', 'id' => 'modal-articles-filters'])
|
||||
@include('Admin.Shop.Articles.partials.filters', ['model' => 'articles'])
|
||||
@endcomponent
|
||||
@@ -14,3 +19,17 @@
|
||||
@endsection
|
||||
|
||||
@include('load.form.select2')
|
||||
@include('load.form.toggle')
|
||||
|
||||
@push('js')
|
||||
<script>
|
||||
function handleArticle() {
|
||||
initToggle("{{ route('Admin.Shop.Articles.toggleVisible') }}", '.visible');
|
||||
initToggle("{{ route('Admin.Shop.Articles.toggleHomepage') }}", '.homepage');
|
||||
}
|
||||
|
||||
$(document).ready(function () {
|
||||
initSelect2();
|
||||
});
|
||||
</script>
|
||||
@endpush
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
<div class="row">
|
||||
<div class="col-lg-8">
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-3">
|
||||
{{ Form::label('model', 'Familles de produit') }}<br>
|
||||
@@ -28,10 +27,32 @@
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-12">
|
||||
<div class="col-8">
|
||||
{{ Form::label('categories', __('shop.shelves.title')) }}<br>
|
||||
@include('components.form.select', ['name' => 'categories[]', 'list' => $categories_options, 'values' => $article['categories'] ?? null, 'class' => 'select2', 'multiple' => true])
|
||||
</div>
|
||||
<div class="col-2">
|
||||
{{ Form::label('visible', 'Visible') }}<br>
|
||||
@include('components.form.toggle', [
|
||||
'name' => 'visible',
|
||||
'value' => ($article['visible'] ?? null),
|
||||
'on' => __('oui'),
|
||||
'off' => __('non'),
|
||||
'meta' => 'data-id=' . ($article['id'] ?? null),
|
||||
'size' => 'sm',
|
||||
])
|
||||
</div>
|
||||
<div class="col-2">
|
||||
{{ Form::label('homepage', __('Accueil')) }}<br>
|
||||
@include('components.form.toggle', [
|
||||
'name' => 'homepage',
|
||||
'value' => ($article['homepage'] ?? null),
|
||||
'on' => __('oui'),
|
||||
'off' => __('non'),
|
||||
'meta' => 'data-id=' . ($article['id'] ?? null),
|
||||
'size' => 'sm',
|
||||
])
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
|
||||
49
resources/views/Shop/Baskets/basket.blade.php
Normal file
49
resources/views/Shop/Baskets/basket.blade.php
Normal file
@@ -0,0 +1,49 @@
|
||||
@extends('Shop.layout.layout', [
|
||||
'title' => __('Panier'),
|
||||
])
|
||||
|
||||
@section('content')
|
||||
@if ($basket)
|
||||
<div class="row">
|
||||
<div class="col-8">
|
||||
<div class="row mb-3">
|
||||
<div class="col-4">
|
||||
<h1>Panier</h1>
|
||||
</div>
|
||||
<div class="col-8">
|
||||
Livraison à domicile ...<br>
|
||||
Commande en ligne et livraison par voie postale. Attention certains produits ne sont pas disponibles en livraison.
|
||||
Les sachets disponibles en lignes sont disponibles à la livraison et uniquement quelques plants.
|
||||
</div>
|
||||
</div>
|
||||
@foreach ($basket as $nature => $items)
|
||||
<div class="row mb-3 p-2" style="background-color: #ccc;">
|
||||
<div class="col-12">
|
||||
<h2 style="font-size: 1.6em;">{{ ucfirst($nature) }}</h2>
|
||||
@foreach ($items as $item)
|
||||
@include('Shop.Baskets.partials.article')
|
||||
@endforeach
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
<div class="col-4">
|
||||
@component('components.card')
|
||||
Tarif appliqué :
|
||||
@endcomponent
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
@endsection
|
||||
|
||||
@push('js')
|
||||
<script>
|
||||
$('.basket-quantity').change(function() {
|
||||
var offer_id = $(this).parent('row');
|
||||
console.log(offer_id);
|
||||
});
|
||||
$('.basket-delete').change(function() {
|
||||
var offer_id = $(this).data('id');
|
||||
console.log(offer_id);
|
||||
});
|
||||
</script>
|
||||
@endpush
|
||||
27
resources/views/Shop/Baskets/partials/article.blade.php
Normal file
27
resources/views/Shop/Baskets/partials/article.blade.php
Normal file
@@ -0,0 +1,27 @@
|
||||
<div class="row mb-3" id="basket_offer-{{ $item['id'] }}">
|
||||
<div class="col-2 text-center">
|
||||
<img src="{{ $item['image'] }}" class="img-fluid">
|
||||
</div>
|
||||
<div class="col-10">
|
||||
<h3 style="font-size: 1.4em;">{{ $item['name'] }}</h3>
|
||||
{{ $item['variation'] }}<br/>
|
||||
<div class="row">
|
||||
<div class="col-6">
|
||||
{{ $item['price'] }} € / unité
|
||||
</div>
|
||||
<div class="col-2">
|
||||
@include('components.form.inputs.number', [
|
||||
'name' => 'quantity',
|
||||
'value' => $item['quantity'],
|
||||
'class' => 'basket-quantity',
|
||||
])
|
||||
</div>
|
||||
<div class="col-2 text-right" style="font-size: 2em;" id="basket_total-{{ $item['id'] }}">
|
||||
{{ $item['quantity'] * $item['price'] }} €
|
||||
</div>
|
||||
<div class="col-2" style="font-size: 2em;">
|
||||
<i class="fa fa-fw fa-trash basket-delete" data-id={{ $item['id'] }}></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,31 +1,33 @@
|
||||
<div class="mb-3 bg-light">
|
||||
<div class="row">
|
||||
<div class="col-6">
|
||||
<h1 style="font-size: 2em;">{{ $shelve['name'] }}</h1>
|
||||
@if ($shelve['articles'])
|
||||
<div class="mb-3 bg-light">
|
||||
<div class="row">
|
||||
<div class="col-6">
|
||||
<h1 style="font-size: 2em;">{{ $shelve['name'] }}</h1>
|
||||
</div>
|
||||
<div class="col-6 text-right">
|
||||
<a href="">Découvrir la sélection</a>
|
||||
<a href="">Tout voir</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6 text-right">
|
||||
<a href="">Découvrir la sélection</a>
|
||||
<a href="">Tout voir</a>
|
||||
<div class="row shelve_slider_{{ $shelve['id'] }}">
|
||||
@foreach ($shelve['articles'] as $name => $article)
|
||||
<div class="text-center pr-2 pl-2">
|
||||
<a href="{{ route('Shop.Articles.show', ['id' => $article['id']]) }}">
|
||||
<img data-lazy="{{ App\Repositories\Shop\Articles::getPreviewSrc($article['image'] ?? false) }}" class="d-block w-100" alt="{{ $name }}"/>
|
||||
{{ $name }}
|
||||
</a>
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
<div class="row shelve_slider_{{ $shelve['id'] }}">
|
||||
@foreach ($shelve['articles'] as $name => $article)
|
||||
<div class="text-center pr-2 pl-2">
|
||||
<a href="{{ route('Shop.Articles.show', ['id' => $article['id']]) }}">
|
||||
<img data-lazy="{{ App\Repositories\Shop\Articles::getPreviewSrc($article['image'] ?? false) }}" class="d-block w-100" alt="{{ $name }}"/>
|
||||
{{ $name }}
|
||||
</a>
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@push('js')
|
||||
<script>
|
||||
$('.shelve_slider_{{ $shelve['id'] }}').slick({
|
||||
lazyLoad: 'ondemand',
|
||||
slidesToShow: 6,
|
||||
slidesToScroll: 1
|
||||
});
|
||||
</script>
|
||||
@endpush
|
||||
@push('js')
|
||||
<script>
|
||||
$('.shelve_slider_{{ $shelve['id'] }}').slick({
|
||||
lazyLoad: 'ondemand',
|
||||
slidesToShow: 6,
|
||||
slidesToScroll: 1
|
||||
});
|
||||
</script>
|
||||
@endpush
|
||||
@endif
|
||||
@@ -1,20 +1,23 @@
|
||||
<?php
|
||||
|
||||
Route::prefix('Articles')->name('Articles.')->group(function () {
|
||||
Route::get('', 'ArticleController@index')->name('index');
|
||||
Route::get('create', 'ArticleController@create')->name('create');
|
||||
Route::delete('destroy/{id?}', 'ArticleController@destroy')->name('destroy');
|
||||
Route::post('store', 'ArticleController@store')->name('store');
|
||||
Route::get('edit/{id}', 'ArticleController@edit')->name('edit');
|
||||
|
||||
Route::any('getImages/{id?}', 'ArticleController@getImages')->name('getImages');
|
||||
Route::post('deleteImage', 'ArticleController@deleteImage')->name('deleteImage');
|
||||
Route::get('', 'ArticleController@index')->name('index');
|
||||
Route::get('create', 'ArticleController@create')->name('create');
|
||||
Route::delete('destroy/{id?}', 'ArticleController@destroy')->name('destroy');
|
||||
Route::post('store', 'ArticleController@store')->name('store');
|
||||
Route::get('edit/{id}', 'ArticleController@edit')->name('edit');
|
||||
|
||||
Route::any('getImages/{id?}', 'ArticleController@getImages')->name('getImages');
|
||||
Route::post('deleteImage', 'ArticleController@deleteImage')->name('deleteImage');
|
||||
|
||||
Route::any('autocomplete/{q?}', 'ArticleController@autocomplete')->name('autocomplete');
|
||||
Route::any('autocomplete/{q?}', 'ArticleController@autocomplete')->name('autocomplete');
|
||||
|
||||
Route::get('getProductDescription/{product_id?}/{model?}', 'ArticleController@getProductDescription')->name('getProductDescription');
|
||||
Route::get('getProductTags/{product_id?}/{model?}', 'ArticleController@getProductTags')->name('getProductTags');
|
||||
Route::get('getProductImages/{product_id?}/{model?}', 'ArticleController@getProductImages')->name('getProductImages');
|
||||
Route::post('toggleVisible', 'OfferController@toggleVisible')->name('toggleVisible');
|
||||
Route::post('toggleHomepage', 'OfferController@toggleHomepage')->name('toggleHomepage');
|
||||
|
||||
Route::get('getProductDescription/{product_id?}/{model?}', 'ArticleController@getProductDescription')->name('getProductDescription');
|
||||
Route::get('getProductTags/{product_id?}/{model?}', 'ArticleController@getProductTags')->name('getProductTags');
|
||||
Route::get('getProductImages/{product_id?}/{model?}', 'ArticleController@getProductImages')->name('getProductImages');
|
||||
});
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user