added tag page

fixed readme
fixed map bugs (inline map & icons)
pull/49/head
A1Gard 3 months ago
parent ddb5b346f2
commit b75f078c56

@ -50,7 +50,7 @@ php artisan seeding:prepare
``` ```
- Seeding image for models: [Group, Category, Post, Product, Slider] - Seeding image for models: [Group, Category, Post, Product, Slider]
```bash ```bash
pa seeding:image Product digital php artisan seeding:image Product digital
``` ```
> First parameter is Model, Second is image seeder directory available [bag, clothe, digital, sport, posts, makeup] > First parameter is Model, Second is image seeder directory available [bag, clothe, digital, sport, posts, makeup]
> You can create your directory and put your image into new directory then use image seeder > You can create your directory and put your image into new directory then use image seeder

@ -177,7 +177,12 @@ class ClientController extends Controller
{ {
$tag = Tag::where('slug->' . config('app.locale'), 'like', $slug)->first(); $tag = Tag::where('slug->' . config('app.locale'), 'like', $slug)->first();
return $tag; $posts = Post::withAnyTags([$tag])->where('status', 1)->paginate(100);
$products = Product::withAnyTags([$tag])->where('status', 1)->paginate(100);
$clips = Clip::withAnyTags([$tag])->where('status', 1)->paginate(100);
$title = __('Tag') . ': ' . $tag->name;
$subtitle = '';
return view('client.tag', compact('tag', 'posts', 'products', 'clips', 'title', 'subtitle'));
} }
@ -400,10 +405,6 @@ class ClientController extends Controller
} }
public function compare() public function compare()
{ {
$area = 'compare'; $area = 'compare';
@ -413,6 +414,7 @@ class ClientController extends Controller
$products = Product::whereIn('id', $ids)->where('status', 1)->get(); $products = Product::whereIn('id', $ids)->where('status', 1)->get();
return view('client.default-list', compact('area', 'products', 'title', 'subtitle')); return view('client.default-list', compact('area', 'products', 'title', 'subtitle'));
} }
public function contact() public function contact()
{ {
$area = 'contact-us'; $area = 'contact-us';
@ -420,6 +422,7 @@ class ClientController extends Controller
$subtitle = ''; $subtitle = '';
return view('client.default-list', compact('area', 'title', 'subtitle')); return view('client.default-list', compact('area', 'title', 'subtitle'));
} }
public function sendContact(ContactSubmitRequest $request) public function sendContact(ContactSubmitRequest $request)
{ {
$con = new Contact(); $con = new Contact();

@ -27,6 +27,7 @@ class Clip extends Model
return \Storage::url('cover/optimized-' . $this->cover); return \Storage::url('cover/optimized-' . $this->cover);
} }
public function imgOriginalUrl() public function imgOriginalUrl()
{ {
if ($this->cover == null) { if ($this->cover == null) {
@ -50,11 +51,13 @@ class Clip extends Model
return $this->belongsTo(\App\Models\User::class); return $this->belongsTo(\App\Models\User::class);
} }
public function attachs(){ public function attachs()
{
return $this->morphMany(Attachment::class, 'attachable'); return $this->morphMany(Attachment::class, 'attachable');
} }
public function webUrl(){ public function webUrl()
{
return fixUrlLang(route('client.clip', $this->slug)); return fixUrlLang(route('client.clip', $this->slug));
} }
@ -69,7 +72,8 @@ class Clip extends Model
return $this->morphMany(Comment::class, 'commentable')->where('status', 1); return $this->morphMany(Comment::class, 'commentable')->where('status', 1);
} }
public function markup(){ public function markup()
{
$app = config('app.name'); $app = config('app.name');
$logo = asset('upload/images/logo.png'); $logo = asset('upload/images/logo.png');
@ -106,7 +110,8 @@ RESULT;
} }
public function tagsList(){ public function tagsList()
{
if ($this->tags()->count() == 0) { if ($this->tags()->count() == 0) {
return getSetting('keyword'); return getSetting('keyword');
} else { } else {

@ -106,11 +106,13 @@ class Post extends Model implements HasMedia
return $this->morphMany(Comment::class, 'commentable'); return $this->morphMany(Comment::class, 'commentable');
} }
public function mainGroup(){ public function mainGroup()
{
return $this->belongsTo(Group::class, 'group_id'); return $this->belongsTo(Group::class, 'group_id');
} }
public function attachs(){ public function attachs()
{
return $this->morphMany(Attachment::class, 'attachable'); return $this->morphMany(Attachment::class, 'attachable');
} }
@ -130,12 +132,14 @@ class Post extends Model implements HasMedia
// ]; // ];
// } // }
public function webUrl(){ public function webUrl()
{
return fixUrlLang(route('client.post', $this->slug)); return fixUrlLang(route('client.post', $this->slug));
} }
public function markup(){ public function markup()
{
$type = 'BlogPosting'; $type = 'BlogPosting';
if (strpos(strtolower(implode(',', $this->groups()->pluck('name')->toArray())), __('article')) !== false) { if (strpos(strtolower(implode(',', $this->groups()->pluck('name')->toArray())), __('article')) !== false) {
$type = 'Article'; $type = 'Article';
@ -184,7 +188,8 @@ RESULT;
} }
public function tagsList(){ public function tagsList()
{
if ($this->tags()->count() == 0) { if ($this->tags()->count() == 0) {
return getSetting('keyword'); return getSetting('keyword');
} else { } else {

@ -315,6 +315,7 @@ class Product extends Model implements HasMedia
return number_format($price) . ' ' . config('app.currency.symbol'); return number_format($price) . ' ' . config('app.currency.symbol');
} }
public function oldPricePure() public function oldPricePure()
{ {
$price = 0; $price = 0;
@ -330,6 +331,7 @@ class Product extends Model implements HasMedia
return $price; return $price;
} }
public function oldPrice() public function oldPrice()
{ {
$price = 0; $price = 0;
@ -346,7 +348,8 @@ class Product extends Model implements HasMedia
return number_format($price) . ' ' . config('app.currency.symbol'); return number_format($price) . ' ' . config('app.currency.symbol');
} }
public function isFav(){ public function isFav()
{
if (!auth('customer')->check()) { if (!auth('customer')->check()) {
return -1; return -1;
} }
@ -357,7 +360,8 @@ class Product extends Model implements HasMedia
} }
} }
public function isAvailable(){ public function isAvailable()
{
if ($this->stock_quantity == 0) { if ($this->stock_quantity == 0) {
return false; return false;
} }
@ -368,7 +372,8 @@ class Product extends Model implements HasMedia
return true; return true;
} }
public function markup(){ public function markup()
{
$currency = config('app.currency.code'); $currency = config('app.currency.code');
@ -427,7 +432,8 @@ RESULT;
} }
public function tagsList(){ public function tagsList()
{
if ($this->tags()->count() == 0) { if ($this->tags()->count() == 0) {
return getSetting('keyword'); return getSetting('keyword');
} else { } else {

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 696 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 618 B

@ -1,11 +1,12 @@
document.addEventListener('DOMContentLoaded', function () { document.addEventListener('DOMContentLoaded', function () {
if (document.querySelectorAll('.tab-control a').length > 0) { if (document.querySelectorAll('.tab-control a').length > 0) {
document.querySelectorAll('.tab-control a')?.forEach(function (el) { document.querySelectorAll('.tab-control a')?.forEach(function (el) {
el.addEventListener('click', function () { el.addEventListener('click', function () {
try { try {
document.querySelector('.tab-control a.active').classList.remove('active'); document.querySelector('.tab-control a.active').classList.remove('active');
this.classList.add('active'); this.classList.add('active');
document.querySelector('.tab.active').classList.remove('active'); document.querySelector('.tab.active,.tab-content.active').classList.remove('active');
document.querySelector(this.getAttribute('href')).classList.add('active'); document.querySelector(this.getAttribute('href')).classList.add('active');
} catch { } catch {
} }

@ -274,8 +274,17 @@ export default {
}, },
initMap() { initMap() {
if (!import.meta.env.DEV){
L.Icon.Default.mergeOptions({
iconRetinaUrl: "/assets/vendor/leaflet/marker-icon-2x.png",
iconUrl: "/assets/vendor/leaflet/marker-icon.png",
shadowUrl: "/assets/vendor/leaflet/marker-shadow.png"
});
}
this.map = L.map(this.$refs.mapContainer).setView([35.83266000, 50.99155000], 10); this.map = L.map(this.$refs.mapContainer).setView([35.83266000, 50.99155000], 10);
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
attribution: '© openstreetmap', attribution: '© openstreetmap',
attributionControl: false, attributionControl: false,

@ -274,6 +274,16 @@ export default {
}, },
initMap() { initMap() {
if (!import.meta.env.DEV){
L.Icon.Default.mergeOptions({
iconRetinaUrl: "/assets/vendor/leaflet/marker-icon-2x.png",
iconUrl: "/assets/vendor/leaflet/marker-icon.png",
shadowUrl: "/assets/vendor/leaflet/marker-shadow.png"
});
}
this.map = L.map(this.$refs.mapContainer).setView([35.83266000, 50.99155000], 10); this.map = L.map(this.$refs.mapContainer).setView([35.83266000, 50.99155000], 10);
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {

@ -70,6 +70,14 @@ export default {
}, },
methods: { methods: {
initMap() { initMap() {
if (!import.meta.env.DEV){
L.Icon.Default.mergeOptions({
iconRetinaUrl: "/assets/vendor/leaflet/marker-icon-2x.png",
iconUrl: "/assets/vendor/leaflet/marker-icon.png",
shadowUrl: "/assets/vendor/leaflet/marker-shadow.png"
});
}
this.map = L.map(this.$refs.mapContainer).setView([this.lat, this.lng], this.zoom); this.map = L.map(this.$refs.mapContainer).setView([this.lat, this.lng], this.zoom);
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {

@ -127,3 +127,31 @@ body {
color: var(--xshop-diff2); color: var(--xshop-diff2);
} }
} }
.tag-page{
min-height: 60vh;
.tab-control{
padding-left: 12px;
padding-right: 12px;
}
.tab-control a.active{
background: var(--xshop-primary);
color: var(--xshop-diff);
}
.tab-content{
background: transparent;
}
}
.tab-content {
display: none;
padding: 1rem;
background: var(--karen-tab-bg-color,#ffffff);
&.active {
display: block;
}
}

@ -0,0 +1,83 @@
@extends('website.inc.website-layout')
@section('title')
{{$title}} - {{config('app.name')}}
@endsection
@section('content')
@foreach(getParts('default_header') as $part)
@php($p = $part->getBladeWithData())
@include($p['blade'],['data' => $p['data']])
@endforeach
<div class="{{gfx()['container']}} content tag-page">
<div class="tab-control">
<div class="row text-center">
<a class="col-md py-2 active" href="#posts">
{{__("Posts")}} ({{count($posts)}})
</a>
<a class="col-md py-2" href="#products">
{{__("Products")}} ({{count($products)}})
</a>
<a class="col-md py-2" href="#clips">
{{__("Video clips")}} ({{count($clips)}})
</a>
</div>
</div>
<div>
<div class="tab-content active px-0" id="posts">
@if(count($posts) == 0)
<div class="alert alert-info">
{{__("There is nothing to show!")}}
</div>
@else
<ul class="list-group">
@foreach($posts as $post)
<li class="list-group-item">
<a href="{{$post->webUrl()}}">
{{$post->title}}
</a>
</li>
@endforeach
</ul>
@endif
</div>
<div class="tab-content px-0" id="products">
@if(count($products) == 0)
<div class="alert alert-info">
{{__("There is nothing to show!")}}
</div>
@else
<ul class="list-group">
@foreach($products as $product)
<li class="list-group-item">
<a href="{{$product->webUrl()}}">
{{$product->name}}
</a>
</li>
@endforeach
</ul>
@endif
</div>
<div class="tab-content px-0" id="clips">
@if(count($clips) == 0)
<div class="alert alert-info">
{{__("There is nothing to show!")}}
</div>
@else
<ul class="list-group">
@foreach($clips as $clip)
<li class="list-group-item">
<a href="{{$clip->webUrl()}}">
{{$clip->title}}
</a>
</li>
@endforeach
</ul>
@endif
</div>
</div>
</div>
@foreach(getParts('default_footer') as $part)
@php($p = $part->getBladeWithData())
@include($p['blade'],['data' => $p['data']])
@endforeach
@endsection

@ -3,6 +3,15 @@ import L from 'leaflet';
var map,marker ; var map,marker ;
window.addEventListener('load',function () { window.addEventListener('load',function () {
// delete L.icon.default.prototype._getIconUrl ;
if (!import.meta.env.DEV){
L.Icon.Default.mergeOptions({
iconRetinaUrl: "/assets/vendor/leaflet/marker-icon-2x.png",
iconUrl: "/assets/vendor/leaflet/marker-icon.png",
shadowUrl: "/assets/vendor/leaflet/marker-shadow.png"
});
}
if (document.querySelectorAll('#mapContainer').length != 0) {
const lat = parseFloat(document.querySelector('#maplat').value); const lat = parseFloat(document.querySelector('#maplat').value);
const lng = parseFloat(document.querySelector('#maplng').value); const lng = parseFloat(document.querySelector('#maplng').value);
const zoom = parseInt(document.querySelector('#mapzoom').value); const zoom = parseInt(document.querySelector('#mapzoom').value);
@ -20,4 +29,5 @@ window.addEventListener('load',function () {
} }
marker = L.marker({lat: lat, lng: lng}).addTo(map); marker = L.marker({lat: lat, lng: lng}).addTo(map);
}
}); });

@ -160,13 +160,5 @@
background: var(--xshop-primary); background: var(--xshop-primary);
transition: left 0.3s ease, width 0.3s ease; transition: left 0.3s ease, width 0.3s ease;
} }
.tab-content {
display: none;
padding: 1rem;
background: var(--karen-tab-bg-color,#ffffff);
}
.tab-content.active {
display: block;
}
} }

Loading…
Cancel
Save