new: add `duplicate` button for articles
This commit is contained in:
@@ -63,6 +63,17 @@ class ArticleController extends Controller
|
|||||||
return view('Admin.Shop.Articles.edit', $data);
|
return view('Admin.Shop.Articles.edit', $data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function duplicate($id)
|
||||||
|
{
|
||||||
|
$data = Articles::getFull($id);
|
||||||
|
// Prepare for creation: blank id/slug, tweak name to indicate copy
|
||||||
|
$data['article']['id'] = null;
|
||||||
|
$data['article']['slug'] = null;
|
||||||
|
$data['article']['name'] = ($data['article']['name'] ?? '').' (copie)';
|
||||||
|
|
||||||
|
return view('Admin.Shop.Articles.create', $data);
|
||||||
|
}
|
||||||
|
|
||||||
public function destroy($id)
|
public function destroy($id)
|
||||||
{
|
{
|
||||||
return Articles::destroy($id);
|
return Articles::destroy($id);
|
||||||
|
|||||||
@@ -31,7 +31,11 @@ class ArticleImages
|
|||||||
|
|
||||||
public static function getFullImagesByArticle($article)
|
public static function getFullImagesByArticle($article)
|
||||||
{
|
{
|
||||||
$images = count($article->images) ? $article->images : collect([]);
|
if (! $article) {
|
||||||
|
return collect([]);
|
||||||
|
}
|
||||||
|
|
||||||
|
$images = count($article->images ?? []) ? $article->images : collect([]);
|
||||||
switch ($article->product_type) {
|
switch ($article->product_type) {
|
||||||
case 'App\Models\Botanic\Variety':
|
case 'App\Models\Botanic\Variety':
|
||||||
$variety = $article->product ?? false;
|
$variety = $article->product ?? false;
|
||||||
|
|||||||
@@ -126,3 +126,19 @@ body {
|
|||||||
padding-bottom: 4px;
|
padding-bottom: 4px;
|
||||||
line-height: 1.1;
|
line-height: 1.1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@media (max-width: 575.98px) {
|
||||||
|
.content-header .form-buttons {
|
||||||
|
margin-left: 0;
|
||||||
|
margin-top: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content-header .form-buttons .btn {
|
||||||
|
height: 28px;
|
||||||
|
padding-top: 2px;
|
||||||
|
padding-bottom: 2px;
|
||||||
|
padding-left: 8px;
|
||||||
|
padding-right: 8px;
|
||||||
|
font-size: 0.75rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -5,5 +5,7 @@
|
|||||||
])
|
])
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
@include('Admin.Shop.Articles.form')
|
@include('Admin.Shop.Articles.form', [
|
||||||
|
'cancel_url' => route('Admin.Shop.Articles.index'),
|
||||||
|
])
|
||||||
@endsection
|
@endsection
|
||||||
|
|||||||
@@ -5,5 +5,13 @@
|
|||||||
])
|
])
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
@include('Admin.Shop.Articles.form')
|
@php
|
||||||
|
$duplicateUrl = \Route::has('Admin.Shop.Articles.duplicate')
|
||||||
|
? route('Admin.Shop.Articles.duplicate', $article['id'] ?? null)
|
||||||
|
: null;
|
||||||
|
@endphp
|
||||||
|
@include('Admin.Shop.Articles.form', [
|
||||||
|
'duplicate_url' => $duplicateUrl,
|
||||||
|
'cancel_url' => route('Admin.Shop.Articles.index'),
|
||||||
|
])
|
||||||
@endsection
|
@endsection
|
||||||
|
|||||||
@@ -27,7 +27,7 @@
|
|||||||
@include('Admin.Shop.Articles.partials.characteristics')
|
@include('Admin.Shop.Articles.partials.characteristics')
|
||||||
{{ Form::close() }}
|
{{ Form::close() }}
|
||||||
|
|
||||||
<x-save />
|
<x-save :cancel-url="$cancel_url ?? null" :duplicate-url="$duplicate_url ?? null" />
|
||||||
|
|
||||||
@include('load.form.appender')
|
@include('load.form.appender')
|
||||||
@include('load.form.editor')
|
@include('load.form.editor')
|
||||||
|
|||||||
@@ -15,7 +15,20 @@
|
|||||||
@isset($trigger) data-trigger="{{ $trigger }}" @endisset
|
@isset($trigger) data-trigger="{{ $trigger }}" @endisset
|
||||||
@isset($container) data-container="{{ $container }}" @endisset
|
@isset($container) data-container="{{ $container }}" @endisset
|
||||||
@isset($html) data-html="true" @endisset
|
@isset($html) data-html="true" @endisset
|
||||||
@isset($metadata) {{ $metadata }} @endisset>
|
@isset($metadata) {{ $metadata }} @endisset
|
||||||
|
@isset($attr)
|
||||||
|
@if (is_array($attr))
|
||||||
|
@foreach ($attr as $key => $value)
|
||||||
|
@if ($value === true)
|
||||||
|
{{ $key }}
|
||||||
|
@elseif ($value !== false && $value !== null)
|
||||||
|
{{ $key }}="{{ $value }}"
|
||||||
|
@endif
|
||||||
|
@endforeach
|
||||||
|
@else
|
||||||
|
{{ $attr }}
|
||||||
|
@endif
|
||||||
|
@endisset>
|
||||||
<i class="fa fa-fw {{ $icon ?? '' }}"></i>
|
<i class="fa fa-fw {{ $icon ?? '' }}"></i>
|
||||||
{{ $txt ?? '' }}
|
{{ $txt ?? '' }}
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
@include('components.form.button', [
|
||||||
|
'class' => 'btn-info duplicate ' . ($class ?? ''),
|
||||||
|
'icon' => 'fa-copy',
|
||||||
|
'txt' => __('Dupliquer'),
|
||||||
|
'attr' => ['data-url' => $duplicate_url ?? $duplicateUrl ?? null],
|
||||||
|
])
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
@php
|
@php
|
||||||
$cancelUrl = $cancel_url ?? $cancelUrl ?? null;
|
$cancelUrl = $cancel_url ?? $cancelUrl ?? null;
|
||||||
|
$duplicateUrl = $duplicate_url ?? $duplicateUrl ?? null;
|
||||||
@endphp
|
@endphp
|
||||||
|
|
||||||
@push('header-actions')
|
@push('header-actions')
|
||||||
@@ -8,6 +9,12 @@
|
|||||||
'class' => 'btn-sm mr-2',
|
'class' => 'btn-sm mr-2',
|
||||||
'url' => $cancelUrl,
|
'url' => $cancelUrl,
|
||||||
])
|
])
|
||||||
|
@if($duplicateUrl)
|
||||||
|
@include('components.form.buttons.button-duplicate', [
|
||||||
|
'class' => 'btn-sm mr-2',
|
||||||
|
'duplicate_url' => $duplicateUrl,
|
||||||
|
])
|
||||||
|
@endif
|
||||||
@include('components.form.buttons.button-save', [
|
@include('components.form.buttons.button-save', [
|
||||||
'class' => 'btn-sm',
|
'class' => 'btn-sm',
|
||||||
])
|
])
|
||||||
@@ -18,6 +25,9 @@
|
|||||||
<div class="col-12">
|
<div class="col-12">
|
||||||
<div class="text-right form-buttons">
|
<div class="text-right form-buttons">
|
||||||
@include('components.form.buttons.button-cancel', ['url' => $cancelUrl])
|
@include('components.form.buttons.button-cancel', ['url' => $cancelUrl])
|
||||||
|
@if($duplicateUrl)
|
||||||
|
@include('components.form.buttons.button-duplicate', ['duplicate_url' => $duplicateUrl])
|
||||||
|
@endif
|
||||||
@include('components.form.buttons.button-save')
|
@include('components.form.buttons.button-save')
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
<div class="content-header pt-2 pb-1">
|
<div class="content-header pt-2 pb-1">
|
||||||
<div class="container-fluid">
|
<div class="container-fluid">
|
||||||
<div class="row mb-2 align-items-center">
|
<div class="row mb-2 align-items-center">
|
||||||
<div class="col-sm-6">
|
<div class="col-sm-8">
|
||||||
<div class="d-flex align-items-center flex-wrap">
|
<div class="d-flex align-items-center flex-wrap">
|
||||||
<h1 class="m-0 text-dark d-flex align-items-center">
|
<h1 class="m-0 text-dark d-flex align-items-center flex-grow-1">
|
||||||
{{ $title ?? null}}
|
{{ $title ?? null}}
|
||||||
@isset($subtitle)
|
@isset($subtitle)
|
||||||
<small class="font-weight-light ml-1 text-md">{{ $subtitle }}</small>
|
<small class="font-weight-light ml-1 text-md">{{ $subtitle }}</small>
|
||||||
@@ -12,7 +12,7 @@
|
|||||||
@stack('header-actions')
|
@stack('header-actions')
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-6">
|
<div class="col-sm-4">
|
||||||
<ol class="breadcrumb float-sm-right text-sm">
|
<ol class="breadcrumb float-sm-right text-sm">
|
||||||
<li class="breadcrumb-item">
|
<li class="breadcrumb-item">
|
||||||
<a href="{{ route('boilerplate.dashboard') }}">
|
<a href="{{ route('boilerplate.dashboard') }}">
|
||||||
|
|||||||
@@ -94,6 +94,18 @@
|
|||||||
|
|
||||||
@stack('scripts')
|
@stack('scripts')
|
||||||
@stack('js')
|
@stack('js')
|
||||||
|
<script>
|
||||||
|
document.addEventListener('DOMContentLoaded', function() {
|
||||||
|
document.querySelectorAll('.form-buttons .duplicate').forEach(function(btn) {
|
||||||
|
btn.addEventListener('click', function() {
|
||||||
|
var url = this.dataset.url || this.getAttribute('data-url');
|
||||||
|
if (url) {
|
||||||
|
window.location = url;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
|
|||||||
@@ -14,4 +14,5 @@ Route::prefix('Articles')->name('Articles.')->group(function () {
|
|||||||
Route::get('getProductImages/{product_id?}/{model?}', 'ArticleController@getProductImages')->name('getProductImages');
|
Route::get('getProductImages/{product_id?}/{model?}', 'ArticleController@getProductImages')->name('getProductImages');
|
||||||
Route::post('toggleVisible', 'ArticleController@toggleVisible')->name('toggleVisible');
|
Route::post('toggleVisible', 'ArticleController@toggleVisible')->name('toggleVisible');
|
||||||
Route::post('toggleHomepage', 'ArticleController@toggleHomepage')->name('toggleHomepage');
|
Route::post('toggleHomepage', 'ArticleController@toggleHomepage')->name('toggleHomepage');
|
||||||
|
Route::get('duplicate/{id}', 'ArticleController@duplicate')->name('duplicate');
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
Route::middleware('auth')->prefix('Admin')->namespace('Admin')->name('Admin.')->group(function () {
|
Route::middleware('auth')->prefix('Admin')->namespace('Admin')->name('Admin.')->group(function () {
|
||||||
Route::get('{period?}', 'HomeController@index')->name('home');
|
|
||||||
include __DIR__.'/Botanic/route.php';
|
include __DIR__.'/Botanic/route.php';
|
||||||
include __DIR__.'/Core/route.php';
|
include __DIR__.'/Core/route.php';
|
||||||
include __DIR__.'/Shop/route.php';
|
include __DIR__.'/Shop/route.php';
|
||||||
|
Route::get('{period?}', 'HomeController@index')->name('home');
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user