added canonical tag to post, product, group, category

pull/49/head
A1Gard 2 months ago
parent 0a33a22a36
commit 316452d7b7

@ -60,6 +60,9 @@ class CategoryController extends XController
if ($category->parent_id != ''){ if ($category->parent_id != ''){
$category->parent_id = $request->input('parent_id',null); $category->parent_id = $request->input('parent_id',null);
} }
if ($request->has('canonical') && trim($request->input('canonical')) != ''){
$category->canonical = $request->input('canonical');
}
$category->slug = $this->getSlug($category); $category->slug = $this->getSlug($category);
if ($request->has('image')) { if ($request->has('image')) {
$category->image = $this->storeFile('image', $category, 'categories'); $category->image = $this->storeFile('image', $category, 'categories');

@ -59,6 +59,9 @@ class GroupController extends XController
if ($group->parent_id != ''){ if ($group->parent_id != ''){
$group->parent_id = $request->input('parent_id',null); $group->parent_id = $request->input('parent_id',null);
} }
if ($request->has('canonical') && trim($request->input('canonical')) != ''){
$group->canonical = $request->input('canonical');
}
$group->slug = $this->getSlug($group); $group->slug = $this->getSlug($group);
if ($request->has('image')){ if ($request->has('image')){
$group->image = $this->storeFile('image',$group, 'groups'); $group->image = $this->storeFile('image',$group, 'groups');

@ -61,6 +61,10 @@ class PostController extends XController
$post->table_of_contents = $request->has('table_of_contents'); $post->table_of_contents = $request->has('table_of_contents');
$post->icon = $request->input('icon'); $post->icon = $request->input('icon');
if ($request->has('canonical') && trim($request->input('canonical')) != ''){
$post->canonical = $request->input('canonical');
}
if ($post->hash == null) { if ($post->hash == null) {
$post->hash = date('Ym') . str_pad(dechex(crc32($post->slug)), 8, '0', STR_PAD_LEFT); $post->hash = date('Ym') . str_pad(dechex(crc32($post->slug)), 8, '0', STR_PAD_LEFT);
} }

@ -77,11 +77,16 @@ class ProductController extends XController
$product->user_id = auth()->id(); $product->user_id = auth()->id();
$product->status = $request->input('status'); $product->status = $request->input('status');
$tags = array_filter(explode(',,', $request->input('tags'))); $tags = array_filter(explode(',,', $request->input('tags')));
if ($request->has('canonical') && trim($request->input('canonical')) != ''){
$product->canonical = $request->input('canonical');
}
$product->save(); $product->save();
$product->categories()->sync($request->input('cat')); $product->categories()->sync($request->input('cat'));
if (count($tags) > 0){ if (count($tags) > 0){
$product->syncTags($tags); $product->syncTags($tags);
} }
foreach ($product->getMedia() as $media) { foreach ($product->getMedia() as $media) {
in_array($media->id, request('medias', [])) ?: $media->delete(); in_array($media->id, request('medias', [])) ?: $media->delete();
} }

@ -28,6 +28,7 @@ class CategorySaveRequest extends FormRequest
'bg' => ['nullable', 'file', 'mimes:jpg,svg,png'], 'bg' => ['nullable', 'file', 'mimes:jpg,svg,png'],
'description' => ['nullable', 'string',], 'description' => ['nullable', 'string',],
'parent_id' => ['nullable', 'exists:categories,id'], 'parent_id' => ['nullable', 'exists:categories,id'],
'canonical' => ['nullable', 'url', 'min:5', 'max:128'],
]; ];
} }
} }

@ -28,6 +28,7 @@ class GroupSaveRequest extends FormRequest
'bg' => ['nullable', 'file', 'mimes:jpg,svg,png'], 'bg' => ['nullable', 'file', 'mimes:jpg,svg,png'],
'description' => ['nullable', 'string',], 'description' => ['nullable', 'string',],
'parent_id' => ['nullable', 'exists:groups,id'], 'parent_id' => ['nullable', 'exists:groups,id'],
'canonical' => ['nullable', 'url', 'min:5', 'max:128'],
]; ];
} }
} }

@ -30,6 +30,7 @@ class PostSaveRequest extends FormRequest
'image' => ['nullable', 'image', 'mimes:jpeg,png,jpg,gif,svg', 'max:2048'], 'image' => ['nullable', 'image', 'mimes:jpeg,png,jpg,gif,svg', 'max:2048'],
'icon' => ['nullable', 'string', 'min:3'], 'icon' => ['nullable', 'string', 'min:3'],
'group_id' => ['required', 'exists:groups,id'], 'group_id' => ['required', 'exists:groups,id'],
'canonical' => ['nullable', 'url', 'min:5', 'max:128'],
]; ];
} }
} }

@ -29,7 +29,8 @@ class ProductSaveRequest extends FormRequest
'active' => ['nullable', 'boolean'], 'active' => ['nullable', 'boolean'],
'meta' => ['nullable'], 'meta' => ['nullable'],
'category_id' => ['required', 'exists:categories,id'], 'category_id' => ['required', 'exists:categories,id'],
'image.*' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048' 'image.*' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
'canonical' => ['nullable', 'url', 'min:5', 'max:128'],
]; ];
} }
} }

@ -22,6 +22,7 @@ return new class extends Migration
$table->integer('sort')->default(0); $table->integer('sort')->default(0);
$table->unsignedInteger('parent_id')->nullable()->default(null)->index(); $table->unsignedInteger('parent_id')->nullable()->default(null)->index();
$table->json('theme')->nullable(); $table->json('theme')->nullable();
$table->text('canonical')->nullable();
$table->softDeletes(); $table->softDeletes();
$table->timestamps(); $table->timestamps();
}); });

@ -28,6 +28,7 @@ return new class extends Migration
$table->string('icon', 128)->nullable(); $table->string('icon', 128)->nullable();
$table->boolean('table_of_contents')->default(0); $table->boolean('table_of_contents')->default(0);
$table->json('theme')->nullable(); $table->json('theme')->nullable();
$table->text('canonical')->nullable();
$table->string('promote')->nullable(); $table->string('promote')->nullable();
$table->softDeletes(); $table->softDeletes();
$table->timestamps(); $table->timestamps();

@ -22,6 +22,7 @@ return new class extends Migration
$table->string('bg',2048)->nullable()->default(null); $table->string('bg',2048)->nullable()->default(null);
$table->unsignedInteger('parent_id')->nullable()->default(null)->index(); $table->unsignedInteger('parent_id')->nullable()->default(null)->index();
$table->json('theme')->nullable(); $table->json('theme')->nullable();
$table->text('canonical')->nullable();
$table->softDeletes(); $table->softDeletes();
$table->timestamps(); $table->timestamps();
}); });

@ -36,6 +36,7 @@ return new class extends Migration
$table->unsignedBigInteger('sell')->default(0); $table->unsignedBigInteger('sell')->default(0);
$table->unsignedTinyInteger('image_index')->default(0); $table->unsignedTinyInteger('image_index')->default(0);
$table->json('theme')->nullable(); $table->json('theme')->nullable();
$table->text('canonical')->nullable();
$table->string('promote')->nullable(); $table->string('promote')->nullable();
$table->softDeletes(); $table->softDeletes();
$table->timestamps(); $table->timestamps();

@ -51,6 +51,22 @@
</div> </div>
@endif @endif
@if(isset($item))
<div class="item-list mb-3">
<div class="p-3">
<div class="form-group">
<label for="canonical" class="my-2">
{{__('Canonical')}}
</label>
<input type="text" id="canonical" name="canonical"
value="{{old('canonical',$item->canonical??null)}}"
placeholder="{{__('canonical')}}"
class="form-control">
</div>
</div>
</div>
@endif
</div> </div>
<div class="col-lg-9 ps-xl-1 ps-xxl-1"> <div class="col-lg-9 ps-xl-1 ps-xxl-1">
<div class="general-form "> <div class="general-form ">

@ -49,6 +49,21 @@
</div> </div>
</div> </div>
@endif @endif
@if(isset($item))
<div class="item-list mb-3">
<div class="p-3">
<div class="form-group">
<label for="canonical" class="my-2">
{{__('Canonical')}}
</label>
<input type="text" id="canonical" name="canonical"
value="{{old('canonical',$item->canonical??null)}}"
placeholder="{{__('canonical')}}"
class="form-control">
</div>
</div>
</div>
@endif
</div> </div>

@ -80,6 +80,22 @@
</div> </div>
@endif @endif
@if(isset($item))
<div class="item-list mb-3">
<div class="p-3">
<div class="form-group">
<label for="canonical" class="my-2">
{{__('Canonical')}}
</label>
<input type="text" id="canonical" name="canonical"
value="{{old('canonical',$item->canonical??null)}}"
placeholder="{{__('canonical')}}"
class="form-control">
</div>
</div>
</div>
@endif
</div> </div>
<div class="col-lg-9 ps-xl-1 ps-xxl-1"> <div class="col-lg-9 ps-xl-1 ps-xxl-1">
<div class="general-form "> <div class="general-form ">

@ -44,6 +44,15 @@
<div> <div>
<div class="form-group">
<label for="canonical" class="my-2">
{{__('Canonical')}}
</label>
<input type="text" id="canonical" name="canonical"
value="{{old('canonical',$item->canonical??null)}}"
placeholder="{{__('canonical')}}"
class="form-control">
</div>
<div class="form-group"> <div class="form-group">
<label for="table"> <label for="table">
{{__('Description Table')}} {{__('Description Table')}}

@ -45,6 +45,11 @@
<meta property="og:type" content="article" /> <meta property="og:type" content="article" />
<meta name="description" content="{{Str::limit($post->subtitle,150)}}"> <meta name="description" content="{{Str::limit($post->subtitle,150)}}">
<meta name="keywords" content="{{$post->tagsList()}}"> <meta name="keywords" content="{{$post->tagsList()}}">
@if(\Illuminate\Support\Str::isUrl($post->canonical) )
<link rel="canonical" href="{{$post->canonical}}" />
@endif
@elseif(isset($product)) @elseif(isset($product))
{!! $product->markup() !!} {!! $product->markup() !!}
<meta property="og:title" content="{{$product->name}}"/> <meta property="og:title" content="{{$product->name}}"/>
@ -69,6 +74,18 @@
<meta name="availability" content="{{strtolower(str_replace('_','',$product->status))}}"> <meta name="availability" content="{{strtolower(str_replace('_','',$product->status))}}">
<meta name="guarantee" content="{{getSetting('guarantee')}}"> <meta name="guarantee" content="{{getSetting('guarantee')}}">
@if(\Illuminate\Support\Str::isUrl($product->canonical) )
<link rel="canonical" href="{{$product->canonical}}" />
@endif
@elseif(isset($group))
@if(\Illuminate\Support\Str::isUrl($group->canonical) )
<link rel="canonical" href="{{$group->canonical}}" />
@endif
@elseif(isset($category))
@if(\Illuminate\Support\Str::isUrl($category->canonical) )
<link rel="canonical" href="{{$category->canonical}}" />
@endif
@elseif(isset($clip)) @elseif(isset($clip))
{!! $clip->markup() !!} {!! $clip->markup() !!}
<meta property="og:title" content="{{$clip->title}}" /> <meta property="og:title" content="{{$clip->title}}" />

Loading…
Cancel
Save