resolved commit

This commit is contained in:
mohd asif 2020-03-17 09:36:45 +05:30
commit d2caa2af98
84 changed files with 1268 additions and 821 deletions

498
composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -10,6 +10,7 @@ return [
*/
\Webkul\Attribute\Providers\ModuleServiceProvider::class,
\Webkul\BookingProduct\Providers\ModuleServiceProvider::class,
\Webkul\Category\Providers\ModuleServiceProvider::class,
\Webkul\Checkout\Providers\ModuleServiceProvider::class,
\Webkul\Core\Providers\ModuleServiceProvider::class,
@ -22,6 +23,6 @@ return [
\Webkul\CatalogRule\Providers\ModuleServiceProvider::class,
\Webkul\CartRule\Providers\ModuleServiceProvider::class,
\Webkul\CMS\Providers\ModuleServiceProvider::class,
\Webkul\BookingProduct\Providers\ModuleServiceProvider::class
\Webkul\Velocity\Providers\ModuleServiceProvider::class,
]
];

View File

@ -9,14 +9,14 @@ return [
|
| Debugbar is enabled by default, when debug is set to true in app.php.
| You can override the value by setting enable to true or false instead of null.
|
|
| You can provide an array of URI's that must be ignored (eg. 'api/*')
|
*/
'enabled' => env('DEBUGBAR_ENABLED', null),
'except' => [
//
'telescope*'
],
/*
@ -79,7 +79,7 @@ return [
|
*/
'error_handler' => false,
/*
|--------------------------------------------------------------------------
| Clockwork integration
@ -110,7 +110,7 @@ return [
'db' => true, // Show database (PDO) queries and bindings
'views' => true, // Views with their data
'route' => true, // Current route information
'auth' => true, // Display Laravel authentication status
'auth' => false, // Display Laravel authentication status
'gate' => true, // Display Laravel Gate checks
'session' => true, // Display session data
'symfony_request' => true, // Only one can be enabled..
@ -122,6 +122,7 @@ return [
'files' => false, // Show the included files
'config' => false, // Display config settings
'cache' => false, // Display cache events
'models' => false, // Display models
],
/*
@ -143,7 +144,7 @@ return [
'timeline' => false, // Add the queries to the timeline
'explain' => [ // Show EXPLAIN output on queries
'enabled' => false,
'types' => ['SELECT'], // ['SELECT', 'INSERT', 'UPDATE', 'DELETE']; for MySQL 5.6.3+
'types' => ['SELECT'], // // workaround ['SELECT'] only. https://github.com/barryvdh/laravel-debugbar/issues/888 ['SELECT', 'INSERT', 'UPDATE', 'DELETE']; for MySQL 5.6.3+
],
'hints' => true, // Show hints for common mistakes
],

View File

@ -3,6 +3,7 @@
use Maatwebsite\Excel\Excel;
return [
'exports' => [
/*
@ -18,20 +19,9 @@ return [
/*
|--------------------------------------------------------------------------
| Temporary path
| Pre-calculate formulas during export
|--------------------------------------------------------------------------
|
| When exporting files, we use a temporary file, before storing
| or downloading. Here you can customize that path.
|
*/
'temp_path' => sys_get_temp_dir(),
/*
|--------------------------------------------------------------------------
| Pre-calculate formulas during export
|--------------------------------------------------------------------------
*/
'pre_calculate_formulas' => false,
/*
@ -69,6 +59,22 @@ return [
*/
'formatter' => 'slug',
],
/*
|--------------------------------------------------------------------------
| CSV Settings
|--------------------------------------------------------------------------
|
| Configure e.g. delimiter, enclosure and line ending for CSV imports.
|
*/
'csv' => [
'delimiter' => ',',
'enclosure' => '"',
'escape_character' => '\\',
'contiguous' => false,
'input_encoding' => 'UTF-8',
],
],
/*
@ -109,4 +115,71 @@ return [
*/
'pdf' => Excel::DOMPDF,
],
'value_binder' => [
/*
|--------------------------------------------------------------------------
| Default Value Binder
|--------------------------------------------------------------------------
|
| PhpSpreadsheet offers a way to hook into the process of a value being
| written to a cell. In there some assumptions are made on how the
| value should be formatted. If you want to change those defaults,
| you can implement your own default value binder.
|
*/
'default' => Maatwebsite\Excel\DefaultValueBinder::class,
],
'transactions' => [
/*
|--------------------------------------------------------------------------
| Transaction Handler
|--------------------------------------------------------------------------
|
| By default the import is wrapped in a transaction. This is useful
| for when an import may fail and you want to retry it. With the
| transactions, the previous import gets rolled-back.
|
| You can disable the transaction handler by setting this to null.
| Or you can choose a custom made transaction handler here.
|
| Supported handlers: null|db
|
*/
'handler' => 'db',
],
'temporary_files' => [
/*
|--------------------------------------------------------------------------
| Local Temporary Path
|--------------------------------------------------------------------------
|
| When exporting and importing files, we use a temporary file, before
| storing reading or downloading. Here you can customize that path.
|
*/
'local_path' => sys_get_temp_dir(),
/*
|--------------------------------------------------------------------------
| Remote Temporary Disk
|--------------------------------------------------------------------------
|
| When dealing with a multi server setup with queues in which you
| cannot rely on having a shared local temporary path, you might
| want to store the temporary file on a shared disk. During the
| queue executing, we'll retrieve the temporary file from that
| location instead. When left to null, it will always use
| the local path. This setting only has effect when using
| in conjunction with queued imports and exports.
|
*/
'remote_disk' => null,
],
];

View File

@ -52,9 +52,9 @@ return array(
*/
'templates' => array(
'small' => 'Webkul\Product\CacheFilters\Small',
'small' => 'Webkul\Product\CacheFilters\Small',
'medium' => 'Webkul\Product\CacheFilters\Medium',
'large' => 'Webkul\Product\CacheFilters\Large',
'large' => 'Webkul\Product\CacheFilters\Large',
),
/*

View File

@ -216,7 +216,8 @@ return [
'orderBy' => 'orderBy',
'sortedBy' => 'sortedBy',
'with' => 'with',
'searchJoin' => 'searchJoin'
'searchJoin' => 'searchJoin',
'withCount' => 'withCount'
]
],
/*

View File

@ -2,6 +2,21 @@
return [
/*
|--------------------------------------------------------------------------
| Console Commands
|--------------------------------------------------------------------------
|
| This option allows you to add additional Artisan commands that should
| be available within the Tinker environment. Once the command is in
| this array you may execute the command in Tinker using its name.
|
*/
'commands' => [
// App\Console\Commands\ExampleCommand::class,
],
/*
|--------------------------------------------------------------------------
| Alias Blacklist
@ -13,6 +28,8 @@ return [
|
*/
'dont_alias' => [],
'dont_alias' => [
'App\Nova',
],
];

View File

@ -29,7 +29,7 @@ return [
| colombian spanish will be saved as 'es-CO' into the database.
|
*/
'locale_separator' => '_',
'locale_separator' => '-',
/*
|--------------------------------------------------------------------------
@ -39,6 +39,8 @@ return [
| As a default locale, Translatable takes the locale of Laravel's
| translator. If for some reason you want to override this,
| you can specify what default should be used here.
| If you set a value here it will only use the current config value
| and never fallback to the translator one.
|
*/
'locale' => null,
@ -76,10 +78,26 @@ return [
| A fallback locale is the locale being used to return a translation
| when the requested translation is not existing. To disable it
| set it to false.
| If set to null it will loop through all configured locales until
| one existing is found or end of list reached. The locales are looped
| from top to bottom and for country based locales the simple one
| is used first. So "es" will be checked before "es_MX".
|
*/
'fallback_locale' => 'en',
/*
|--------------------------------------------------------------------------
| Translation Model Namespace
|--------------------------------------------------------------------------
|
| Defines the default 'Translation' class namespace. For example, if
| you want to use App\Translations\CountryTranslation instead of App\CountryTranslation
| set this to 'App\Translations'.
|
*/
'translation_model_namespace' => null,
/*
|--------------------------------------------------------------------------
| Translation Suffix
@ -113,4 +131,19 @@ return [
|
*/
'to_array_always_loads_translations' => true,
/*
|--------------------------------------------------------------------------
| Configure the default behavior of the rule factory
|--------------------------------------------------------------------------
| The default values used to control the behavior of the RuleFactory.
| Here you can set your own default format and delimiters for
| your whole app.
*
*/
'rule_factory' => [
'format' => \Astrotomic\Translatable\Validation\RuleFactory::FORMAT_ARRAY,
'prefix' => '%',
'suffix' => '%',
],
];

View File

@ -15,31 +15,36 @@ return [
* of your proxy (e.g. if using ELB or similar).
*
*/
'proxies' => null, // [<ip addresses>,], '*'
'proxies' => null, // [<ip addresses>,], '*', '<ip addresses>,'
/*
* To trust one or more specific proxies that connect
* directly to your server, use an array of IP addresses:
* directly to your server, use an array or a string separated by comma of IP addresses:
*/
# 'proxies' => ['192.168.1.1'],
// 'proxies' => ['192.168.1.1'],
// 'proxies' => '192.168.1.1, 192.168.1.2',
/*
* Or, to trust all proxies that connect
* directly to your server, use a "*"
*/
# 'proxies' => '*',
// 'proxies' => '*',
/*
* Which headers to use to detect proxy related data (For, Host, Proto, Port)
*
*
* Options include:
*
*
* - Illuminate\Http\Request::HEADER_X_FORWARDED_ALL (use all x-forwarded-* headers to establish trust)
* - Illuminate\Http\Request::HEADER_FORWARDED (use the FORWARDED header to establish trust)
*
* - Illuminate\Http\Request::HEADER_X_FORWARDED_AWS_ELB (If you are using AWS Elastic Load Balancer)
*
* - 'HEADER_X_FORWARDED_ALL' (use all x-forwarded-* headers to establish trust)
* - 'HEADER_FORWARDED' (use the FORWARDED header to establish trust)
* - 'HEADER_X_FORWARDED_AWS_ELB' (If you are using AWS Elastic Load Balancer)
*
* @link https://symfony.com/doc/current/deployment/proxies.html
*/
'headers' => Illuminate\Http\Request::HEADER_X_FORWARDED_ALL,
];

View File

@ -949,7 +949,7 @@ return [
'mass-update-success' => 'تم تحديث العملاء بنجاح',
'status' => 'الحالة',
'active' => 'نشيط',
'in-active' => 'غير نشط'
'inactive' => 'غير نشط'
],
'reviews' => [

View File

@ -949,7 +949,7 @@ return [
'mass-update-success' => 'Customers updated successfully',
'status' => 'Status',
'active' => 'Active',
'in-active' => 'Inactive'
'inactive' => 'Inactive'
],
'reviews' => [

View File

@ -949,7 +949,7 @@ return [
'mass-update-success' => 'مشتریان با موفقیت به روز شدند',
'status' => 'وضعیت',
'active' => 'فعال',
'in-active' => 'غیرفعال'
'inactive' => 'غیرفعال'
],
'reviews' => [

View File

@ -949,7 +949,7 @@ return [
'mass-update-success' => 'Klanten succesvol bijgewerkt',
'status' => 'Toestand',
'active' => 'Actief',
'in-active' => 'Niet geactiveerd'
'inactive' => 'Niet geactiveerd'
],
'reviews' => [

View File

@ -949,7 +949,7 @@ return [
'mass-update-success' => 'Clientes atualizados com sucesso',
'status' => 'Status',
'active' => 'Ativo (a)',
'in-active' => 'Inativo (a)'
'inactive' => 'Inativo (a)'
],
'reviews' => [

View File

@ -55,15 +55,11 @@
<script type="text/javascript">
window.flashMessages = [];
@if ($success = session('success'))
window.flashMessages = [{'type': 'alert-success', 'message': "{{ $success }}" }];
@elseif ($warning = session('warning'))
window.flashMessages = [{'type': 'alert-warning', 'message': "{{ $warning }}" }];
@elseif ($error = session('error'))
window.flashMessages = [{'type': 'alert-error', 'message': "{{ $error }}" }];
@elseif ($info = session('info'))
window.flashMessages = [{'type': 'alert-info', 'message': "{{ $info }}" }];
@endif
@foreach (['success', 'warning', 'error', 'info'] as $key)
@if ($value = session($key))
window.flashMessages.push({'type': 'alert-{{ $key }}', 'message': "{{ $value }}" });
@endif
@endforeach
window.serverErrors = [];
@if (isset($errors))

View File

@ -30,11 +30,11 @@ class DefaultSlot extends Booking
$currentTime = Carbon::now();
$availableFrom = ! $bookingProduct->available_from && $bookingProduct->available_from
$availableFrom = $bookingProduct->available_from
? Carbon::createFromTimeString($bookingProduct->available_from)
: clone $currentTime;
$availableTo = ! $bookingProduct->available_from && $bookingProduct->available_to
$availableTo = $bookingProduct->available_to
? Carbon::createFromTimeString($bookingProduct->available_to)
: Carbon::createFromTimeString('2080-01-01 00:00:00');
@ -56,7 +56,7 @@ class DefaultSlot extends Booking
* Returns slots for One Booking For Many Days
*
* @param \Webkul\BookingProduct\Contracts\BookingProduct $bookingProduct
* @param string $requestedDate
* @param string $requestedDate
* @return array
*/
public function getOneBookingForManyDaysSlots($bookingProductSlot, $requestedDate)
@ -72,6 +72,10 @@ class DefaultSlot extends Booking
$endDate = clone $requestedDate->modify('this ' . $this->daysOfWeek[$timeDuration['to_day']]);
$startDate = Carbon::createFromTimeString($startDate->format('Y-m-d') . ' ' . $timeDuration['from'] . ':00');
$endDate = Carbon::createFromTimeString($endDate->format('Y-m-d') . ' ' . $timeDuration['to'] . ':00');
$slots[] = [
'from' => $startDate->format('d F, Y h:i A'),
'to' => $endDate->format('d F, Y h:i A'),
@ -95,11 +99,11 @@ class DefaultSlot extends Booking
$currentTime = Carbon::now();
$availableFrom = ! $bookingProduct->available_from && $bookingProduct->available_from
$availableFrom = $bookingProduct->available_from
? Carbon::createFromTimeString($bookingProduct->available_from)
: clone $currentTime;
$availableTo = ! $bookingProduct->available_from && $bookingProduct->available_to
$availableTo = $bookingProduct->available_to
? Carbon::createFromTimeString($bookingProduct->available_to)
: Carbon::createFromTimeString('2080-01-01 00:00:00');

View File

@ -147,7 +147,7 @@ class BookingProductRepository extends Repository
public function validateSlots($data)
{
if (! isset($data['same_slot_all_days'])) {
return $data;
return $data['slots'];
}
if (! $data['same_slot_all_days']) {

View File

@ -45,38 +45,36 @@
<span class="control-error" v-if="errors.has('booking[qty]')">@{{ errors.first('booking[qty]') }}</span>
</div>
<div v-if="booking.type == 'appointment' || booking.type == 'event' || booking.type == 'rental' || booking.type == 'table'">
<div class="control-group" v-if="booking.type != 'event'" :class="[errors.has('booking[available_every_week]') ? 'has-error' : '']">
<label class="required">{{ __('bookingproduct::app.admin.catalog.products.available-every-week') }}</label>
<div class="control-group" v-if="booking.type != 'event' && booking.type != 'default'" :class="[errors.has('booking[available_every_week]') ? 'has-error' : '']">
<label class="required">{{ __('bookingproduct::app.admin.catalog.products.available-every-week') }}</label>
<select v-validate="'required'" name="booking[available_every_week]" v-model="booking.available_every_week" class="control" data-vv-as="&quot;{{ __('bookingproduct::app.admin.catalog.products.available-every-week') }}&quot;">
<option value="1">{{ __('bookingproduct::app.admin.catalog.products.yes') }}</option>
<option value="0">{{ __('bookingproduct::app.admin.catalog.products.no') }}</option>
</select>
<select v-validate="'required'" name="booking[available_every_week]" v-model="booking.available_every_week" class="control" data-vv-as="&quot;{{ __('bookingproduct::app.admin.catalog.products.available-every-week') }}&quot;">
<option value="1">{{ __('bookingproduct::app.admin.catalog.products.yes') }}</option>
<option value="0">{{ __('bookingproduct::app.admin.catalog.products.no') }}</option>
</select>
<span class="control-error" v-if="errors.has('booking[available_every_week]')">@{{ errors.first('booking[available_every_week]') }}</span>
</div>
<div v-if="! parseInt(booking.available_every_week)">
<div class="control-group" :class="[errors.has('booking[available_from]') ? 'has-error' : '']">
<label class="required">{{ __('bookingproduct::app.admin.catalog.products.available-from') }}</label>
<datetime>
<input type="text" v-validate="'required'" name="booking[available_from]" v-model="booking.available_from" class="control" data-vv-as="&quot;{{ __('bookingproduct::app.admin.catalog.products.available-from') }}&quot;"/>
</datetime>
<span class="control-error" v-if="errors.has('booking[available_every_week]')">@{{ errors.first('booking[available_every_week]') }}</span>
<span class="control-error" v-if="errors.has('booking[available_from]')">@{{ errors.first('booking[available_from]') }}</span>
</div>
<div v-if="! parseInt(booking.available_every_week)">
<div class="control-group" :class="[errors.has('booking[available_from]') ? 'has-error' : '']">
<label class="required">{{ __('bookingproduct::app.admin.catalog.products.available-from') }}</label>
<div class="control-group" :class="[errors.has('booking[available_to]') ? 'has-error' : '']">
<label class="required">{{ __('bookingproduct::app.admin.catalog.products.available-to') }}</label>
<datetime>
<input type="text" v-validate="'required'" name="booking[available_from]" v-model="booking.available_from" class="control" data-vv-as="&quot;{{ __('bookingproduct::app.admin.catalog.products.available-from') }}&quot;"/>
</datetime>
<span class="control-error" v-if="errors.has('booking[available_from]')">@{{ errors.first('booking[available_from]') }}</span>
</div>
<div class="control-group" :class="[errors.has('booking[available_to]') ? 'has-error' : '']">
<label class="required">{{ __('bookingproduct::app.admin.catalog.products.available-to') }}</label>
<datetime>
<input type="text" v-validate="'required'" name="booking[available_to]" v-model="booking.available_to" class="control" data-vv-as="&quot;{{ __('bookingproduct::app.admin.catalog.products.available-to') }}&quot;"/>
</datetime>
<span class="control-error" v-if="errors.has('booking[available_to]')">@{{ errors.first('booking[available_to]') }}</span>
</div>
<datetime>
<input type="text" v-validate="'required'" name="booking[available_to]" v-model="booking.available_to" class="control" data-vv-as="&quot;{{ __('bookingproduct::app.admin.catalog.products.available-to') }}&quot;"/>
</datetime>
<span class="control-error" v-if="errors.has('booking[available_to]')">@{{ errors.first('booking[available_to]') }}</span>
</div>
</div>
@ -116,7 +114,7 @@
return {
booking: bookingProduct ? bookingProduct : {
booking_type: 'default',
type: 'default',
location: '',

View File

@ -110,7 +110,7 @@
data: function() {
return {
tickets: @json($bookingProduct->event_tickets()->get())
tickets: @json($bookingProduct ? $bookingProduct->event_tickets()->get() : [])
}
}
});

View File

@ -31,7 +31,7 @@
<div class="control-group" :class="[errors.has('booking[qty]') ? 'has-error' : '']">
<label class="required">{{ __('bookingproduct::app.admin.catalog.products.guest-capacity') }}</label>
<input type="text" v-validate="'required|min_value:1'" name="booking[qty]" value="{{ $bookingProduct->qty }}" class="control" data-vv-as="&quot;{{ __('bookingproduct::app.admin.catalog.products.guest-limit') }}&quot;"/>
<input type="text" v-validate="'required|min_value:1'" name="booking[qty]" value="{{ $bookingProduct ? $bookingProduct->qty : 0 }}" class="control" data-vv-as="&quot;{{ __('bookingproduct::app.admin.catalog.products.guest-limit') }}&quot;"/>
<span class="control-error" v-if="errors.has('booking[qty]')">@{{ errors.first('booking[qty]') }}</span>
</div>

View File

@ -1,10 +1,12 @@
<div class="booking-info-row">
<span class="icon bp-slot-icon"></span>
<span class="title">
{{ __('bookingproduct::app.shop.products.slot-duration') }} :
@if ($bookingProduct->default_slot->duration)
<div class="booking-info-row">
<span class="icon bp-slot-icon"></span>
<span class="title">
{{ __('bookingproduct::app.shop.products.slot-duration') }} :
{{ __('bookingproduct::app.shop.products.slot-duration-in-minutes', ['minutes' => $bookingProduct->default_slot->duration]) }}
</span>
</div>
{{ __('bookingproduct::app.shop.products.slot-duration-in-minutes', ['minutes' => $bookingProduct->default_slot->duration]) }}
</span>
</div>
@endif
@include ('bookingproduct::shop.products.view.booking.slots', ['bookingProduct' => $bookingProduct])

View File

@ -47,6 +47,8 @@
this.$http.get("{{ route('booking_product.slots.index', $bookingProduct->id) }}", {params: {date: date}})
.then (function(response) {
this_this.slots = response.data.data;
this_this.errors.clear();
})
.catch (function (error) {})
}

View File

@ -1,10 +1,12 @@
<div class="booking-info-row">
<span class="icon bp-slot-icon"></span>
<span class="title">
{{ __('bookingproduct::app.shop.products.slot-duration') }} :
@if ($bookingProduct->default_slot->duration)
<div class="booking-info-row">
<span class="icon bp-slot-icon"></span>
<span class="title">
{{ __('bookingproduct::app.shop.products.slot-duration') }} :
{{ __('bookingproduct::app.shop.products.slot-duration-in-minutes', ['minutes' => $bookingProduct->default_slot->duration]) }}
</span>
</div>
{{ __('bookingproduct::app.shop.products.slot-duration-in-minutes', ['minutes' => $bookingProduct->default_slot->duration]) }}
</span>
</div>
@endif
@include ('bookingproduct::shop.products.view.booking.slots', ['bookingProduct' => $bookingProduct])

View File

@ -47,6 +47,8 @@
this.$http.get("{{ route('booking_product.slots.index', $bookingProduct->id) }}", {params: {date: date}})
.then (function(response) {
this_this.slots = response.data.data;
this_this.errors.clear();
})
.catch (function (error) {})
}

View File

@ -73,6 +73,9 @@ class CatalogRuleProduct
*/
public function insertRuleProduct($rule, $batchCount = 1000, $product = null)
{
if (! (float) $rule->discount_amount)
return;
$productIds = $this->getMatchingProductIds($rule, $product);
$rows = [];

View File

@ -98,8 +98,8 @@ class CatalogRuleProductPrice
foreach ($dates as $key => $date) {
if ((! $row->starts_from || $date >= $row->starts_from)
&& (! $row->ends_till || $date <= $row->ends_till))
{
&& (! $row->ends_till || $date <= $row->ends_till)
) {
$priceKey = $date->getTimestamp() . '-' . $productKey;
if (isset($endRuleFlags[$priceKey])) {

View File

@ -10,6 +10,7 @@ return [
*/
\Webkul\Attribute\Providers\ModuleServiceProvider::class,
\Webkul\BookingProduct\Providers\ModuleServiceProvider::class,
\Webkul\Category\Providers\ModuleServiceProvider::class,
\Webkul\Checkout\Providers\ModuleServiceProvider::class,
\Webkul\Core\Providers\ModuleServiceProvider::class,
@ -22,5 +23,6 @@ return [
\Webkul\CatalogRule\Providers\ModuleServiceProvider::class,
\Webkul\CartRule\Providers\ModuleServiceProvider::class,
\Webkul\CMS\Providers\ModuleServiceProvider::class,
\Webkul\Velocity\Providers\ModuleServiceProvider::class,
]
];

View File

@ -49,7 +49,8 @@ class ProductServiceProvider extends ServiceProvider
*
* @return void
*/
public function registerConfig(): void {
public function registerConfig(): void
{
$this->mergeConfigFrom(
dirname(__DIR__) . '/Config/product_types.php', 'product_types'
);

View File

@ -495,7 +495,7 @@ abstract class AbstractType
}
if (! (float) $this->product->special_price) {
if ($rulePrice) {
if ($rulePrice && $rulePrice->price < $this->product->price) {
$this->product->special_price = $rulePrice->price;
return true;

View File

@ -61,19 +61,19 @@ class OrderDataGrid extends DataGrid
'closure' => true,
'wrapper' => function ($value) {
if ($value->status == 'processing') {
return '<span class="badge badge-md badge-success">Processing</span>';
return '<span class="badge badge-md badge-success">' . trans('shop::app.customer.account.order.index.processing') . '</span>';
} elseif ($value->status == 'completed') {
return '<span class="badge badge-md badge-success">Completed</span>';
return '<span class="badge badge-md badge-success">' . trans('shop::app.customer.account.order.index.completed') . '</span>';
} elseif ($value->status == "canceled") {
return '<span class="badge badge-md badge-danger">Canceled</span>';
return '<span class="badge badge-md badge-danger">' . trans('shop::app.customer.account.order.index.canceled') . '</span>';
} elseif ($value->status == "closed") {
return '<span class="badge badge-md badge-info">Closed</span>';
return '<span class="badge badge-md badge-info">' . trans('shop::app.customer.account.order.index.closed') . '</span>';
} elseif ($value->status == "pending") {
return '<span class="badge badge-md badge-warning">Pending</span>';
return '<span class="badge badge-md badge-warning">' . trans('shop::app.customer.account.order.index.pending') . '</span>';
} elseif ($value->status == "pending_payment") {
return '<span class="badge badge-md badge-warning">Pending Payment</span>';
return '<span class="badge badge-md badge-warning">' . trans('shop::app.customer.account.order.index.pending-payment') . '</span>';
} elseif ($value->status == "fraud") {
return '<span class="badge badge-md badge-danger">Fraud</span>';
return '<span class="badge badge-md badge-danger">' . trans('shop::app.customer.account.order.index.fraud') . '</span>';
}
},
'filterable' => true,

View File

@ -257,7 +257,14 @@ return [
'date' => 'التاريخ',
'status' => 'الحالة',
'total' => 'المجموع',
'order_number' => 'Order Number'
'order_number' => 'رقم الأمر',
'processing' => 'معالجة',
'completed' => 'منجز',
'canceled' => 'ألغيت',
'closed' => 'مغلق',
'pending' => 'قيد الانتظار',
'pending-payment' => 'في انتظار الدفع',
'fraud' => 'تزوير'
],
'view' => [

View File

@ -257,7 +257,14 @@ return [
'date' => 'Date',
'status' => 'Status',
'total' => 'Total',
'order_number' => 'Order Number'
'order_number' => 'Order Number',
'processing' => 'Processing',
'completed' => 'Completed',
'canceled' => 'Canceled',
'closed' => 'Closed',
'pending' => 'Pending',
'pending-payment' => 'Pending Payment',
'fraud' => 'Fraud'
],
'view' => [

View File

@ -245,7 +245,14 @@ return [
'date' => 'Fecha',
'status' => 'Estado',
'total' => 'Total',
'order_number' => 'Número de pedido'
'order_number' => 'Número de pedido',
'processing' => 'Processing',
'completed' => 'Completed',
'canceled' => 'Canceled',
'closed' => 'Closed',
'pending' => 'Pending',
'pending-payment' => 'Pending Payment',
'fraud' => 'Fraud'
],
'view' => [

View File

@ -257,7 +257,14 @@ return [
'date' => 'تاریخ',
'status' => 'وضعیت',
'total' => 'جمع',
'order_number' => 'شماره سفارش'
'order_number' => 'شماره سفارش',
'processing' => 'در حال پردازش',
'completed' => 'تکمیل شد',
'canceled' => 'لغو شد',
'closed' => 'بسته شد',
'pending' => 'در انتظار',
'pending-payment' => 'در انتظار پرداخت',
'fraud' => 'تقلب'
],
'view' => [

View File

@ -262,7 +262,14 @@ return [
'date' => 'Datum',
'status' => 'Toestand',
'total' => 'Totaal',
'order_number' => 'Bestelnummer'
'order_number' => 'Bestelnummer',
'processing' => 'Processing',
'completed' => 'Completed',
'canceled' => 'Canceled',
'closed' => 'Closed',
'pending' => 'Pending',
'pending-payment' => 'Pending Payment',
'fraud' => 'Fraud'
],
'view' => [

View File

@ -244,7 +244,14 @@ return [
'order_id' => 'Pedido ID',
'date' => 'Data',
'status' => 'Status',
'total' => 'Total'
'total' => 'Total',
'processing' => 'Processing',
'completed' => 'Completed',
'canceled' => 'Canceled',
'closed' => 'Closed',
'pending' => 'Pending',
'pending-payment' => 'Pending Payment',
'fraud' => 'Fraud'
],
'view' => [

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,4 @@
{
"/js/ui.js": "/js/ui.js?id=35b3eec657974d2d70de",
"/css/ui.css": "/css/ui.css?id=0da4fe25579eeab1806d"
"/js/ui.js": "/js/ui.js?id=f4734f49f2e95bf51c83",
"/css/ui.css": "/css/ui.css?id=0895b560bbc19259cee8"
}

View File

@ -31,8 +31,8 @@ export default {
var element = this.$el.getElementsByTagName("input")[0];
this.datepicker = new Flatpickr(element, {
allowInput: true,
altFormat: "Y-m-d H:i:s",
dateFormat: "Y-m-d H:i:s",
altFormat: "Y-m-d H:i:S",
dateFormat: "Y-m-d H:i:S",
enableTime: true,
onChange: function(selectedDates, dateStr, instance) {
this_this.$emit('onChange', dateStr)

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,5 +1,5 @@
{
"/js/velocity.js": "/js/velocity.js?id=6ddbe8cf2f5f023bf2af",
"/js/velocity.js": "/js/velocity.js?id=6435683a6664cfe72d05",
"/css/velocity-admin.css": "/css/velocity-admin.css?id=612d35e452446366eef7",
"/css/velocity.css": "/css/velocity.css?id=84682d653fd625fc680a"
"/css/velocity.css": "/css/velocity.css?id=93ab8f3d857e4367cf0d"
}

View File

@ -0,0 +1,7 @@
<?php
namespace Webkul\Velocity\Contracts;
interface VelocityCustomerCompareProduct
{
}

View File

@ -78,7 +78,7 @@ class CartController extends Controller
$response = [
'status' => 'success',
'totalCartItems' => sizeof($items),
'totalCartItems' => sizeof($cart->items),
'message' => trans('shop::app.checkout.cart.item.success'),
];

View File

@ -7,7 +7,7 @@ use Webkul\Velocity\Contracts\OrderBrand as OrderBrandContract;
use Webkul\Attribute\Models\AttributeOptionProxy;
use Webkul\Category\Models\CategoryProxy;
class OrderBrands extends Model implements OrderBrandContract
class OrderBrand extends Model implements OrderBrandContract
{
protected $table = 'order_brands';

View File

@ -3,8 +3,9 @@
namespace Webkul\Velocity\Models;
use Illuminate\Database\Eloquent\Model;
use Webkul\Velocity\Contracts\VelocityCustomerCompareProduct as VelocityCustomerCompareProductContract;
class VelocityCustomerCompareProduct extends Model
class VelocityCustomerCompareProduct extends Model implements VelocityCustomerCompareProductContract
{
protected $guarded = [];
}

View File

@ -0,0 +1,10 @@
<?php
namespace Webkul\Velocity\Models;
use Konekt\Concord\Proxies\ModelProxy;
class VelocityCustomerCompareProductProxy extends ModelProxy
{
}

View File

@ -7,7 +7,11 @@ use Konekt\Concord\BaseModuleServiceProvider;
class ModuleServiceProvider extends BaseModuleServiceProvider
{
protected $models = [
\Webkul\Velocity\Models\Content::class,
\Webkul\Velocity\Models\Category::class,
\Webkul\Velocity\Models\Content::class,
\Webkul\Velocity\Models\ContentTranslation::class,
\Webkul\Velocity\Models\OrderBrand::class,
\Webkul\Velocity\Models\VelocityCustomerCompareProduct::class,
\Webkul\Velocity\Models\VelocityMetadata::class,
];
}

View File

@ -3,10 +3,6 @@
namespace Webkul\Velocity\Providers;
use Illuminate\Routing\Router;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Event;
use Illuminate\Support\Facades\Cache;
use Illuminate\Foundation\AliasLoader;
use Illuminate\Support\ServiceProvider;
use Webkul\Velocity\Facades\Velocity as VelocityFacade;
@ -58,10 +54,6 @@ class VelocityServiceProvider extends ServiceProvider
*/
protected function registerConfig()
{
// $this->mergeConfigFrom(
// dirname(__DIR__) . '/Config/system.php', 'core'
// );
$this->mergeConfigFrom(
dirname(__DIR__) . '/Config/admin-menu.php', 'menu.admin'
);

View File

@ -39,7 +39,7 @@ class CategoryRepository extends Repository
*/
function model()
{
return 'Webkul\Velocity\Models\Category';
return 'Webkul\Velocity\Contracts\Category';
}
/**

View File

@ -40,7 +40,7 @@ class ContentRepository extends Repository
*/
function model()
{
return 'Webkul\Velocity\Models\Content';
return 'Webkul\Velocity\Contracts\Content';
}
/**

View File

@ -13,6 +13,6 @@ class ContentTranslationRepository extends Repository
*/
function model()
{
return 'Webkul\Velocity\Models\ContentTranslation';
return 'Webkul\Velocity\Contracts\ContentTranslation';
}
}

View File

@ -18,7 +18,7 @@ class OrderBrandsRepository extends Repository
*/
function model()
{
return 'Webkul\Velocity\Models\OrderBrands';
return 'Webkul\Velocity\Contracts\OrderBrand';
}
}

View File

@ -13,6 +13,6 @@ class VelocityCustomerCompareProductRepository extends Repository
*/
function model()
{
return 'Webkul\Velocity\Models\VelocityCustomerCompareProduct';
return 'Webkul\Velocity\Contracts\VelocityCustomerCompareProduct';
}
}

View File

@ -13,6 +13,6 @@ class VelocityMetadataRepository extends Repository
*/
function model()
{
return 'Webkul\Velocity\Models\VelocityMetadata';
return 'Webkul\Velocity\Contracts\VelocityMetadata';
}
}

View File

@ -12,7 +12,7 @@
</form>
</template>
<script type="text/javascript">
<script>
export default {
props: [
'form',

View File

@ -15,7 +15,7 @@
]">
<slot
v-for="index in slidesCount"
v-for="index in parseInt(slidesCount)"
:name="`slide-${parseInt(index) - 1}`">
</slot>
</carousel>

View File

@ -0,0 +1,83 @@
<template>
<div class="shimmer-card-container">
<carousel-component
id="shimmer-carousel"
navigation-enabled="hide"
pagination-enabled="hide"
:slides-count="shimmerCount + 1"
:slides-per-page="shimmerCount">
<slide
:key="count"
:slot="`slide-${count}`"
v-for="count in shimmerCount">
<div class="shimmer-card">
<div class="shimmer-wrapper">
<div class="shimmer-product-image animate"></div>
<div class="comment animate"></div>
<div class="comment animate"></div>
<div class="comment animate"></div>
</div>
</div>
</slide>
</carousel-component>
</div>
</template>
<script>
export default {
props: {
'shimmerCount': {
default: 6,
type: Number,
},
},
}
</script>
<style>
.shimmer-card {
margin: 0px 10px 50px 10px;
padding: 30px 40px;
border: 2px solid #fff;
box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23);
}
.shimmer-product-image {
width: 100%;
height: 180px;
}
.comment {
height: 10px;
background: #777;
margin-top: 20px;
}
.shimmer-wrapper {
width: 0px;
animation: fullView 0.5s forwards linear;
}
@keyframes fullView {
100% {
width: 100%;
}
}
.animate {
animation : shimmer 2s infinite;
background: linear-gradient(to right, #eff1f3 4%, #e2e2e2 25%, #eff1f3 36%);
background-size: 1000px 100%;
}
@keyframes shimmer {
0% {
background-position: -1000px 0;
}
100% {
background-position: 1000px 0;
}
}
</style>

View File

@ -44,6 +44,7 @@ Vue.component('child-sidebar', require('./UI/components/child-sidebar'));
Vue.component('card-list-header', require('./UI/components/card-header'));
Vue.component('magnify-image', require('./UI/components/image-magnifier'));
Vue.component('compare-component', require('./UI/components/product-compare'));
Vue.component("shimmer-component", require("./UI/components/shimmer-component"));
Vue.component('responsive-sidebar', require('./UI/components/responsive-sidebar'));
Vue.component('product-quick-view', require('./UI/components/product-quick-view'));
Vue.component('product-quick-view-btn', require('./UI/components/product-quick-view-btn'));

View File

@ -121,7 +121,8 @@
vertical-align: middle;
}
.badge-wrapper {
.badge-wrapper,
.badge-container {
top: -2px;
left: -7px;
position: relative;
@ -133,6 +134,11 @@
background: $theme-color;
}
}
.badge-container {
left: 4px;
margin-right: 10px;
}
}
}
}
@ -435,6 +441,11 @@
.searchbar {
padding-left: 20px !important;
padding-right: 20px !important;
.compare-btn,
.wishlist-btn {
display: none;
}
}
#search-form {

View File

@ -1,7 +1,7 @@
{!! view_render_event('bagisto.admin.content.create_form_accordian.content.link.before') !!}
<div class="control-group" :class="[errors.has('page_link') ? 'has-error' : '']">
<div class="control-group" :class="[errors.has('{!!$locale!!}[page_link]') ? 'has-error' : '']">
<label for="page_link" class="required">
{{ __('velocity::app.admin.contents.content.category-slug') }}
</label>
@ -17,10 +17,10 @@
name="{{$locale}}[page_link]"
v-validate="'required|max:150'"
value="{{ $pageTarget }}"
data-vv-as="&quot;{{ __('velocity::app.admin.contents.content.page-link') }}&quot;" />
data-vv-as="&quot;{{ __('velocity::app.admin.contents.content.category-slug') }}&quot;" />
<span class="control-error" v-if="errors.has('page_link')">
@{{ errors.first('page_link') }}
<span class="control-error" v-if="errors.has('{!!$locale!!}[page_link]')">
@{{ errors.first('{!!$locale!!}[page_link]') }}
</span>
</div>

View File

@ -146,7 +146,7 @@
<header class="row velocity-divide-page vc-header header-shadow active">
<div class="vc-small-screen container" v-if="isMobile()">
<div class="row">
<div class="col-8">
<div class="col-6">
<div v-if="hamburger" class="nav-container scrollable">
<div class="wrapper" v-if="this.rootCategories">
<div class="greeting drawer-section fw6">
@ -198,19 +198,18 @@
@endforeach
<ul type="none" class="velocity-content">
<li
:key="index"
v-for="(content, index) in headerContent">
<a :href="`${$root.baseUrl}/${content.page_link}`" class="unset" v-text="content.title"></a>
<li :key="index" v-for="(content, index) in headerContent">
<a
class="unset"
v-text="content.title"
:href="`${$root.baseUrl}/${content.page_link}`">
</a>
</li>
</ul>
<ul type="none" class="category-wrapper">
<li v-for="(category, index) in $root.sharedRootCategories">
<a
class="unset"
:href="`${$root.baseUrl}/${category.slug}`">
<a class="unset" :href="`${$root.baseUrl}/${category.slug}`">
<div class="category-logo">
<img
class="category-icon"
@ -220,10 +219,7 @@
<span v-text="category.name"></span>
</a>
<i
class="rango-arrow-right"
@click="toggleSubcategories(index, $event)">
</i>
<i class="rango-arrow-right" @click="toggleSubcategories(index, $event)"></i>
</li>
</ul>
@ -447,8 +443,18 @@
<logo-component></logo-component>
</div>
<div class="right-vc-header col-4">
<a :href="`${$root.baseUrl}/customer/account/wishlist`" class="unset">
<div class="right-vc-header col-6">
<a class="compare-btn unset" href="{{ route('velocity.product.compare') }}">
<div class="badge-container" v-if="compareCount > 0">
<span class="badge" v-text="compareCount"></span>
</div>
<i class="material-icons">compare_arrows</i>
</a>
<a class="wishlist-btn unset" :href="`${isCustomer ? '{{ route('customer.wishlist.index') }}' : '{{ route('velocity.product.guest-wishlist') }}'}`">
<div class="badge-container" v-if="wishlistCount > 0">
<span class="badge" v-text="wishlistCount"></span>
</div>
<i class="material-icons">favorite_border</i>
</a>
@ -688,6 +694,7 @@
'subCategory': null,
'isSearchbar': false,
'rootCategories': true,
'isCustomer': '{{ auth()->guard('customer')->user() ? "true" : "false" }}' == "true",
}
},
@ -698,9 +705,17 @@
} else {
document.body.classList.remove('open-hamburger');
}
},
'$root.headerItemsCount': function () {
this.updateHeaderItemsCount();
}
},
created: function () {
this.updateHeaderItemsCount();
},
methods: {
openSearchBar: function () {
this.isSearchbar = !this.isSearchbar;
@ -743,6 +758,30 @@
toggleMetaInfo: function (metaKey) {
this.rootCategories = false;
this[metaKey] = !this[metaKey];
},
updateHeaderItemsCount: function () {
if (! this.isCustomer) {
let comparedItems = this.getStorageValue('compared_product');
let wishlistedItems = this.getStorageValue('wishlist_product');
if (wishlistedItems) {
this.wishlistCount = wishlistedItems.length;
}
if (comparedItems) {
this.compareCount = comparedItems.length;
}
} else {
this.$http.get(`${this.$root.baseUrl}/items-count`)
.then(response => {
this.compareCount = response.data.compareProductsCount;
this.wishlistCount = response.data.wishlistedProductsCount;
})
.catch(exception => {
console.log(this.__('error.something_went_wrong'));
});
}
}
},
});

View File

@ -6,19 +6,42 @@
@push('scripts')
<script type="text/x-template" id="category-products-template">
<div class="container-fluid remove-padding-margin" v-if="isCategory && categoryProducts.length > 0">
<card-list-header
:view-all="`${this.baseUrl}/${categoryDetails.slug}`"
:heading="categoryDetails.name">
</card-list-header>
<div class="container-fluid remove-padding-margin">
<shimmer-component v-if="isLoading && !isMobileView"></shimmer-component>
<div class="carousel-products vc-full-screen ltr" v-if="!isMobile()">
<carousel-component
slides-per-page="6"
navigation-enabled="hide"
pagination-enabled="hide"
:slides-count="categoryProducts.length"
:id="`${categoryDetails.name}-carousel`">
<template v-else-if="categoryProducts.length > 0">
<card-list-header
:heading="categoryDetails.name"
:view-all="`${this.baseUrl}/${categoryDetails.slug}`">
</card-list-header>
<div class="carousel-products vc-full-screen ltr" v-if="!isMobileView">
<carousel-component
slides-per-page="6"
navigation-enabled="hide"
pagination-enabled="hide"
:slides-count="categoryProducts.length"
:id="`${categoryDetails.name}-carousel`">
<slide
:key="index"
:slot="`slide-${index}`"
v-for="(product, index) in categoryProducts">
<product-card
:list="list"
:product="product">
</product-card>
</slide>
</carousel-component>
</div>
<div class="carousel-products vc-small-screen" v-else>
<carousel-component
slides-per-page="2"
navigation-enabled="hide"
pagination-enabled="hide"
:slides-count="categoryProducts.length"
:id="`${categoryDetails.name}-carousel`">
<slide
:key="index"
@ -29,28 +52,10 @@
:product="product">
</product-card>
</slide>
</carousel-component>
</div>
</carousel-component>
</div>
</template>
<div class="carousel-products vc-small-screen" v-else>
<carousel-component
slides-per-page="2"
navigation-enabled="hide"
pagination-enabled="hide"
:slides-count="categoryProducts.length"
:id="`${categoryDetails.name}-carousel`">
<slide
:key="index"
:slot="`slide-${index}`"
v-for="(product, index) in categoryProducts">
<product-card
:list="list"
:product="product">
</product-card>
</slide>
</carousel-component>
</div>
</div>
</script>
@ -59,13 +64,16 @@
Vue.component('category-products', {
template: '#category-products-template',
props: [
'categorySlug'
'categorySlug',
],
data: function () {
return {
isLoading: true,
isCategory: false,
heading: 'customer',
categoryProducts: [],
isMobileView: this.$root.isMobile(),
}
},
@ -91,8 +99,13 @@
// });
// }, 0);
}
this.isLoading = false;
})
.catch(error => {});
.catch(error => {
this.isLoading = false;
console.log(this.__('error.something_went_wrong'));
});
}
}
})

View File

@ -6,49 +6,54 @@
@push('scripts')
<script type="text/x-template" id="featured-products-template">
<div class="container-fluid featured-products" v-if="featuredProducts.length > 0">
<card-list-header heading="{{ __('shop::app.home.featured-products') }}">
</card-list-header>
<div class="container-fluid featured-products">
<shimmer-component v-if="isLoading && !isMobileView"></shimmer-component>
<div class="carousel-products vc-full-screen ltr">
<carousel-component
slides-per-page="6"
navigation-enabled="hide"
pagination-enabled="hide"
id="fearured-products-carousel"
:slides-count="featuredProducts.length">
<template v-else-if="featuredProducts.length > 0">
<card-list-header heading="{{ __('shop::app.home.featured-products') }}">
</card-list-header>
<slide
:key="index"
:slot="`slide-${index}`"
v-for="(product, index) in featuredProducts">
<product-card
:list="list"
:product="product">
</product-card>
</slide>
</carousel-component>
</div>
<div class="carousel-products vc-full-screen ltr" v-if="!isMobileView">
<carousel-component
slides-per-page="6"
navigation-enabled="hide"
pagination-enabled="hide"
id="fearured-products-carousel"
:slides-count="featuredProducts.length">
<div class="carousel-products vc-small-screen">
<carousel-component
slides-per-page="2"
navigation-enabled="hide"
pagination-enabled="hide"
id="fearured-products-carousel"
:slides-count="featuredProducts.length">
<slide
:key="index"
:slot="`slide-${index}`"
v-for="(product, index) in featuredProducts">
<product-card
:list="list"
:product="product">
</product-card>
</slide>
</carousel-component>
</div>
<div class="carousel-products vc-small-screen" v-else>
<carousel-component
slides-per-page="2"
navigation-enabled="hide"
pagination-enabled="hide"
id="fearured-products-carousel"
:slides-count="featuredProducts.length">
<slide
:key="index"
:slot="`slide-${index}`"
v-for="(product, index) in featuredProducts">
<product-card
:list="list"
:product="product">
</product-card>
</slide>
</carousel-component>
</div>
</template>
<slide
:key="index"
:slot="`slide-${index}`"
v-for="(product, index) in featuredProducts">
<product-card
:list="list"
:product="product">
</product-card>
</slide>
</carousel-component>
</div>
</div>
</script>
@ -59,7 +64,9 @@
data: function () {
return {
'list': false,
'isLoading': true,
'featuredProducts': [],
'isMobileView': this.$root.isMobile(),
}
},
@ -73,8 +80,13 @@
.then(response => {
if (response.data.status)
this.featuredProducts = response.data.products;
this.isLoading = false;
})
.catch(error => {
this.isLoading = false;
console.log(this.__('error.something_went_wrong'));
})
.catch(error => {})
}
}
})

View File

@ -59,7 +59,8 @@
{!! view_render_event('bagisto.shop.home.content.before') !!}
@if ($velocityMetaData)
{!! DbView::make($velocityMetaData)->field('home_page_content')->render() !!}
{{-- {!! DbView::make($velocityMetaData)->field('home_page_content')->render() !!} --}}
@include('shop::home.featured-products')
@else
@include('shop::home.advertisements.advertisement-four')
@include('shop::home.featured-products')

View File

@ -6,25 +6,74 @@
@push('scripts')
<script type="text/x-template" id="new-products-template">
<div class="container-fluid" v-if="newProducts.length > 0">
<card-list-header heading="{{ __('shop::app.home.new-products') }}">
</card-list-header>
<div class="container-fluid">
<shimmer-component v-if="isLoading && !isMobileView"></shimmer-component>
{!! view_render_event('bagisto.shop.new-products.before') !!}
<template v-else-if="newProducts.length > 0">
<card-list-header heading="{{ __('shop::app.home.new-products') }}">
</card-list-header>
@if ($showRecentlyViewed)
@push('css')
<style>
.recently-viewed {
padding-right: 0px;
}
</style>
@endpush
{!! view_render_event('bagisto.shop.new-products.before') !!}
<div class="row ltr">
<div class="col-9 no-padding carousel-products vc-full-screen with-recent-viewed" v-if="!isMobileDevice">
@if ($showRecentlyViewed)
@push('css')
<style>
.recently-viewed {
padding-right: 0px;
}
</style>
@endpush
<div class="row ltr">
<div class="col-9 no-padding carousel-products vc-full-screen with-recent-viewed" v-if="!isMobileView">
<carousel-component
slides-per-page="5"
navigation-enabled="hide"
pagination-enabled="hide"
id="new-products-carousel"
:slides-count="newProducts.length">
<slide
:key="index"
:slot="`slide-${index}`"
v-for="(product, index) in newProducts">
<product-card
:list="list"
:product="product">
</product-card>
</slide>
</carousel-component>
</div>
<div class="col-12 no-padding carousel-products vc-small-screen" v-else>
<carousel-component
slides-per-page="2"
navigation-enabled="hide"
pagination-enabled="hide"
id="new-products-carousel"
:slides-count="newProducts.length">
<slide
:key="index"
:slot="`slide-${index}`"
v-for="(product, index) in newProducts">
<product-card
:list="list"
:product="product">
</product-card>
</slide>
</carousel-component>
</div>
@include ('shop::products.list.recently-viewed', [
'quantity' => 3,
'addClass' => 'col-lg-3 col-md-12',
])
</div>
@else
<div class="carousel-products vc-full-screen" v-if="!isMobileView">
<carousel-component
slides-per-page="5"
slides-per-page="6"
navigation-enabled="hide"
pagination-enabled="hide"
id="new-products-carousel"
@ -42,7 +91,7 @@
</carousel-component>
</div>
<div class="col-12 no-padding carousel-products vc-small-screen" v-else>
<div class="carousel-products vc-small-screen" v-else>
<carousel-component
slides-per-page="2"
navigation-enabled="hide"
@ -61,55 +110,10 @@
</slide>
</carousel-component>
</div>
@endif
@include ('shop::products.list.recently-viewed', [
'quantity' => 3,
'addClass' => 'col-lg-3 col-md-12',
])
</div>
@else
<div class="carousel-products vc-full-screen" v-if="!isMobileDevice">
<carousel-component
slides-per-page="6"
navigation-enabled="hide"
pagination-enabled="hide"
id="new-products-carousel"
:slides-count="newProducts.length">
<slide
:key="index"
:slot="`slide-${index}`"
v-for="(product, index) in newProducts">
<product-card
:list="list"
:product="product">
</product-card>
</slide>
</carousel-component>
</div>
<div class="carousel-products vc-small-screen" v-else>
<carousel-component
slides-per-page="2"
navigation-enabled="hide"
pagination-enabled="hide"
id="new-products-carousel"
:slides-count="newProducts.length">
<slide
:key="index"
:slot="`slide-${index}`"
v-for="(product, index) in newProducts">
<product-card
:list="list"
:product="product">
</product-card>
</slide>
</carousel-component>
</div>
@endif
{!! view_render_event('bagisto.shop.new-products.after') !!}
{!! view_render_event('bagisto.shop.new-products.after') !!}
</template>
</div>
</script>
@ -120,8 +124,9 @@
data: function () {
return {
'list': false,
'isLoading': true,
'newProducts': [],
'isMobileDevice': this.$root.isMobile(),
'isMobileView': this.$root.isMobile(),
}
},
@ -134,9 +139,14 @@
this.$http.get(`${this.baseUrl}/category-details?category-slug=new-products&count={{ $count }}`)
.then(response => {
if (response.data.status)
this.newProducts = response.data.products
this.newProducts = response.data.products;
this.isLoading = false;
})
.catch(error => {
this.isLoading = false;
console.log(this.__('error.something_went_wrong'));
})
.catch(error => {})
}
}
})

View File

@ -90,10 +90,10 @@
$('#mail_port').append('<div class="form-error">' + data.errors.mail_port + '</div>');
}
if (data.errors.mail_encryption) {
$('#mail_encryption').addClass('has-error');
$('#mail_encryption').append('<div class="form-error">' + data.errors.mail_encryption + '</div>');
}
// if (data.errors.mail_encryption) {
// $('#mail_encryption').addClass('has-error');
// $('#mail_encryption').append('<div class="form-error">' + data.errors.mail_encryption + '</div>');
// }
if (data.errors.mail_from) {
$('#mail_from').addClass('has-error');

View File

@ -11,16 +11,16 @@ $data = array();
if (empty($_POST['mail_driver']))
$errors['mail_driver'] = 'Please select the mail driver.';
if (empty($_POST['mail_host']))
$errors['mail_host'] = 'Please enter the hostname for this outgoing mail server.';
if (empty($_POST['mail_port']))
$errors['mail_port'] = 'Please enter the port for this outgoing mail server.';
$errors['mail_port'] = 'Please enter the port for this outgoing mail server.';
// if (empty($_POST['mail_encryption']))
// $errors['mail_encryption'] = 'Please select the encryption method for this outgoing mail server.';
if (empty($_POST['mail_encryption']))
$errors['mail_encryption'] = 'Please select the encryption method for this outgoing mail server.';
if (empty($_POST['mail_from']))
$errors['mail_from'] = 'Please enter the email address for this store.';

View File

@ -1,19 +1,19 @@
<table class="action" align="center" width="100%" cellpadding="0" cellspacing="0">
<tr>
<td align="center">
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td align="center">
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td>
<a href="{{ $url }}" class="button button-{{ $color ?? 'blue' }}" target="_blank">{{ $slot }}</a>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<table class="action" align="center" width="100%" cellpadding="0" cellspacing="0" role="presentation">
<tr>
<td align="center">
<table width="100%" border="0" cellpadding="0" cellspacing="0" role="presentation">
<tr>
<td align="center">
<table border="0" cellpadding="0" cellspacing="0" role="presentation">
<tr>
<td>
<a href="{{ $url }}" class="button button-{{ $color ?? 'primary' }}" target="_blank">{{ $slot }}</a>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>

View File

@ -1,11 +1,11 @@
<tr>
<td>
<table class="footer" align="center" width="570" cellpadding="0" cellspacing="0">
<tr>
<td class="content-cell" align="center">
{{ Illuminate\Mail\Markdown::parse($slot) }}
</td>
</tr>
</table>
</td>
<td>
<table class="footer" align="center" width="570" cellpadding="0" cellspacing="0" role="presentation">
<tr>
<td class="content-cell" align="center">
{{ Illuminate\Mail\Markdown::parse($slot) }}
</td>
</tr>
</table>
</td>
</tr>

View File

@ -1,7 +1,7 @@
<tr>
<td class="header">
<a href="{{ $url }}">
{{ $slot }}
</a>
</td>
<td class="header">
<a href="{{ $url }}">
{{ $slot }}
</a>
</td>
</tr>

View File

@ -1,54 +1,54 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<style>
@media only screen and (max-width: 600px) {
.inner-body {
width: 100% !important;
}
<style>
@media only screen and (max-width: 600px) {
.inner-body {
width: 100% !important;
}
.footer {
width: 100% !important;
}
}
.footer {
width: 100% !important;
}
}
@media only screen and (max-width: 500px) {
.button {
width: 100% !important;
}
}
</style>
@media only screen and (max-width: 500px) {
.button {
width: 100% !important;
}
}
</style>
<table class="wrapper" width="100%" cellpadding="0" cellspacing="0">
<tr>
<td align="center">
<table class="content" width="100%" cellpadding="0" cellspacing="0">
{{ $header ?? '' }}
<table class="wrapper" width="100%" cellpadding="0" cellspacing="0" role="presentation">
<tr>
<td align="center">
<table class="content" width="100%" cellpadding="0" cellspacing="0" role="presentation">
{{ $header ?? '' }}
<!-- Email Body -->
<tr>
<td class="body" width="100%" cellpadding="0" cellspacing="0">
<table class="inner-body" align="center" width="570" cellpadding="0" cellspacing="0">
<!-- Body content -->
<tr>
<td class="content-cell">
{{ Illuminate\Mail\Markdown::parse($slot) }}
<!-- Email Body -->
<tr>
<td class="body" width="100%" cellpadding="0" cellspacing="0">
<table class="inner-body" align="center" width="570" cellpadding="0" cellspacing="0" role="presentation">
<!-- Body content -->
<tr>
<td class="content-cell">
{{ Illuminate\Mail\Markdown::parse($slot) }}
{{ $subcopy ?? '' }}
</td>
</tr>
</table>
</td>
</tr>
{{ $subcopy ?? '' }}
</td>
</tr>
</table>
</td>
</tr>
{{ $footer ?? '' }}
</table>
</td>
</tr>
</table>
{{ $footer ?? '' }}
</table>
</td>
</tr>
</table>
</body>
</html>

View File

@ -1,27 +1,27 @@
@component('mail::layout')
{{-- Header --}}
@slot('header')
@component('mail::header', ['url' => config('app.url')])
{{ config('app.name') }}
@endcomponent
@endslot
{{-- Body --}}
{{ $slot }}
{{-- Subcopy --}}
@isset($subcopy)
@slot('subcopy')
@component('mail::subcopy')
{{ $subcopy }}
@endcomponent
@endslot
@endisset
{{-- Footer --}}
@slot('footer')
@component('mail::footer')
&copy; {{ date('Y') }} {{ config('app.name') }}. All rights reserved.
@endcomponent
@endslot
{{-- Header --}}
@slot('header')
@component('mail::header', ['url' => config('app.url')])
{{ config('app.name') }}
@endcomponent
@endslot
{{-- Body --}}
{{ $slot }}
{{-- Subcopy --}}
@isset($subcopy)
@slot('subcopy')
@component('mail::subcopy')
{{ $subcopy }}
@endcomponent
@endslot
@endisset
{{-- Footer --}}
@slot('footer')
@component('mail::footer')
© {{ date('Y') }} {{ config('app.name') }}. @lang('All rights reserved.')
@endcomponent
@endslot
@endcomponent

View File

@ -1,13 +1,14 @@
<table class="panel" width="100%" cellpadding="0" cellspacing="0">
<tr>
<td class="panel-content">
<table width="100%" cellpadding="0" cellspacing="0">
<tr>
<td class="panel-item">
{{ Illuminate\Mail\Markdown::parse($slot) }}
</td>
</tr>
</table>
</td>
</tr>
<table class="panel" width="100%" cellpadding="0" cellspacing="0" role="presentation">
<tr>
<td class="panel-content">
<table width="100%" cellpadding="0" cellspacing="0" role="presentation">
<tr>
<td class="panel-item">
{{ Illuminate\Mail\Markdown::parse($slot) }}
</td>
</tr>
</table>
</td>
</tr>
</table>

View File

@ -1,7 +1,7 @@
<table class="promotion" align="center" width="100%" cellpadding="0" cellspacing="0">
<tr>
<td align="center">
{{ Illuminate\Mail\Markdown::parse($slot) }}
</td>
</tr>
<table class="promotion" align="center" width="100%" cellpadding="0" cellspacing="0" role="presentation">
<tr>
<td align="center">
{{ Illuminate\Mail\Markdown::parse($slot) }}
</td>
</tr>
</table>

View File

@ -1,7 +1,7 @@
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<table width="100%" border="0" cellpadding="0" cellspacing="0" role="presentation">
<tr>
<td align="center">
<table border="0" cellpadding="0" cellspacing="0">
<table border="0" cellpadding="0" cellspacing="0" role="presentation">
<tr>
<td>
<a href="{{ $url }}" class="button button-green" target="_blank">{{ $slot }}</a>

View File

@ -1,7 +1,7 @@
<table class="subcopy" width="100%" cellpadding="0" cellspacing="0">
<tr>
<td>
{{ Illuminate\Mail\Markdown::parse($slot) }}
</td>
</tr>
<table class="subcopy" width="100%" cellpadding="0" cellspacing="0" role="presentation">
<tr>
<td>
{{ Illuminate\Mail\Markdown::parse($slot) }}
</td>
</tr>
</table>

View File

@ -1,13 +1,15 @@
/* Base */
body, body *:not(html):not(style):not(br):not(tr):not(code) {
font-family: Avenir, Helvetica, sans-serif;
body,
body *:not(html):not(style):not(br):not(tr):not(code) {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif,
'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';
box-sizing: border-box;
}
body {
background-color: #f5f8fa;
color: #74787E;
background-color: #f8fafc;
color: #74787e;
height: 100%;
hyphens: auto;
line-height: 1.4;
@ -30,7 +32,7 @@ blockquote {
}
a {
color: #3869D4;
color: #3869d4;
}
a img {
@ -40,7 +42,7 @@ a img {
/* Typography */
h1 {
color: #2F3133;
color: #3d4852;
font-size: 19px;
font-weight: bold;
margin-top: 0;
@ -48,7 +50,7 @@ h1 {
}
h2 {
color: #2F3133;
color: #3d4852;
font-size: 16px;
font-weight: bold;
margin-top: 0;
@ -56,7 +58,7 @@ h2 {
}
h3 {
color: #2F3133;
color: #3d4852;
font-size: 14px;
font-weight: bold;
margin-top: 0;
@ -64,7 +66,7 @@ h3 {
}
p {
color: #74787E;
color: #3d4852;
font-size: 16px;
line-height: 1.5em;
margin-top: 0;
@ -82,7 +84,7 @@ img {
/* Layout */
.wrapper {
background-color: #f5f8fa;
background-color: #f8fafc;
margin: 0;
padding: 0;
width: 100%;
@ -118,9 +120,9 @@ img {
/* Body */
.body {
background-color: #FFFFFF;
border-bottom: 1px solid #EDEFF2;
border-top: 1px solid #EDEFF2;
background-color: #ffffff;
border-bottom: 1px solid #edeff2;
border-top: 1px solid #edeff2;
margin: 0;
padding: 0;
width: 100%;
@ -130,7 +132,7 @@ img {
}
.inner-body {
background-color: #FFFFFF;
background-color: #ffffff;
margin: 0 auto;
padding: 0;
width: 570px;
@ -142,7 +144,7 @@ img {
/* Subcopy */
.subcopy {
border-top: 1px solid #EDEFF2;
border-top: 1px solid #edeff2;
margin-top: 25px;
padding-top: 25px;
}
@ -164,7 +166,7 @@ img {
}
.footer p {
color: #AEAEAE;
color: #aeaeae;
font-size: 12px;
text-align: center;
}
@ -180,13 +182,13 @@ img {
}
.table th {
border-bottom: 1px solid #EDEFF2;
border-bottom: 1px solid #edeff2;
padding-bottom: 8px;
margin: 0;
}
.table td {
color: #74787E;
color: #74787e;
font-size: 15px;
line-height: 18px;
padding: 10px 0;
@ -212,34 +214,37 @@ img {
.button {
border-radius: 3px;
box-shadow: 0 2px 3px rgba(0, 0, 0, 0.16);
color: #FFF;
color: #fff;
display: inline-block;
text-decoration: none;
-webkit-text-size-adjust: none;
}
.button-blue {
background-color: #3097D1;
border-top: 10px solid #3097D1;
border-right: 18px solid #3097D1;
border-bottom: 10px solid #3097D1;
border-left: 18px solid #3097D1;
.button-blue,
.button-primary {
background-color: #3490dc;
border-top: 10px solid #3490dc;
border-right: 18px solid #3490dc;
border-bottom: 10px solid #3490dc;
border-left: 18px solid #3490dc;
}
.button-green {
background-color: #2ab27b;
border-top: 10px solid #2ab27b;
border-right: 18px solid #2ab27b;
border-bottom: 10px solid #2ab27b;
border-left: 18px solid #2ab27b;
.button-green,
.button-success {
background-color: #38c172;
border-top: 10px solid #38c172;
border-right: 18px solid #38c172;
border-bottom: 10px solid #38c172;
border-left: 18px solid #38c172;
}
.button-red {
background-color: #bf5329;
border-top: 10px solid #bf5329;
border-right: 18px solid #bf5329;
border-bottom: 10px solid #bf5329;
border-left: 18px solid #bf5329;
.button-red,
.button-error {
background-color: #e3342f;
border-top: 10px solid #e3342f;
border-right: 18px solid #e3342f;
border-bottom: 10px solid #e3342f;
border-left: 18px solid #e3342f;
}
/* Panels */
@ -249,7 +254,7 @@ img {
}
.panel-content {
background-color: #EDEFF2;
background-color: #f1f5f8;
padding: 16px;
}
@ -265,8 +270,8 @@ img {
/* Promotions */
.promotion {
background-color: #FFFFFF;
border: 2px dashed #9BA2AB;
background-color: #ffffff;
border: 2px dashed #9ba2ab;
margin: 0;
margin-bottom: 25px;
margin-top: 25px;

View File

@ -3,7 +3,7 @@
@if (! empty($greeting))
# {{ $greeting }}
@else
@if ($level == 'error')
@if ($level === 'error')
# @lang('Whoops!')
@else
# @lang('Hello!')
@ -21,13 +21,11 @@
<?php
switch ($level) {
case 'success':
$color = 'green';
break;
case 'error':
$color = 'red';
$color = $level;
break;
default:
$color = 'blue';
$color = 'primary';
}
?>
@component('mail::button', ['url' => $actionUrl, 'color' => $color])
@ -45,20 +43,22 @@
@if (! empty($salutation))
{{ $salutation }}
@else
@lang('Regards'),<br>{{ config('app.name') }}
@lang('Regards'),<br>
{{ config('app.name') }}
@endif
{{-- Subcopy --}}
@isset($actionText)
@component('mail::subcopy')
@slot('subcopy')
@lang(
"If youre having trouble clicking the \":actionText\" button, copy and paste the URL below\n".
'into your web browser: [:actionURL](:actionURL)',
'into your web browser: [:displayableActionUrl](:actionURL)',
[
'actionText' => $actionText,
'actionURL' => $actionUrl
'actionURL' => $actionUrl,
'displayableActionUrl' => $displayableActionUrl,
]
)
@endcomponent
@endslot
@endisset
@endcomponent
@endcomponent

View File

@ -1,44 +1,46 @@
@if ($paginator->hasPages())
<ul class="pagination" role="navigation">
{{-- Previous Page Link --}}
@if ($paginator->onFirstPage())
<li class="page-item disabled" aria-disabled="true" aria-label="@lang('pagination.previous')">
<span class="page-link" aria-hidden="true">&lsaquo;</span>
</li>
@else
<li class="page-item">
<a class="page-link" href="{{ $paginator->previousPageUrl() }}" rel="prev" aria-label="@lang('pagination.previous')">&lsaquo;</a>
</li>
@endif
{{-- Pagination Elements --}}
@foreach ($elements as $element)
{{-- "Three Dots" Separator --}}
@if (is_string($element))
<li class="page-item disabled" aria-disabled="true"><span class="page-link">{{ $element }}</span></li>
<nav>
<ul class="pagination">
{{-- Previous Page Link --}}
@if ($paginator->onFirstPage())
<li class="page-item disabled" aria-disabled="true" aria-label="@lang('pagination.previous')">
<span class="page-link" aria-hidden="true">&lsaquo;</span>
</li>
@else
<li class="page-item">
<a class="page-link" href="{{ $paginator->previousPageUrl() }}" rel="prev" aria-label="@lang('pagination.previous')">&lsaquo;</a>
</li>
@endif
{{-- Array Of Links --}}
@if (is_array($element))
@foreach ($element as $page => $url)
@if ($page == $paginator->currentPage())
<li class="page-item active" aria-current="page"><span class="page-link">{{ $page }}</span></li>
@else
<li class="page-item"><a class="page-link" href="{{ $url }}">{{ $page }}</a></li>
@endif
@endforeach
@endif
@endforeach
{{-- Pagination Elements --}}
@foreach ($elements as $element)
{{-- "Three Dots" Separator --}}
@if (is_string($element))
<li class="page-item disabled" aria-disabled="true"><span class="page-link">{{ $element }}</span></li>
@endif
{{-- Next Page Link --}}
@if ($paginator->hasMorePages())
<li class="page-item">
<a class="page-link" href="{{ $paginator->nextPageUrl() }}" rel="next" aria-label="@lang('pagination.next')">&rsaquo;</a>
</li>
@else
<li class="page-item disabled" aria-disabled="true" aria-label="@lang('pagination.next')">
<span class="page-link" aria-hidden="true">&rsaquo;</span>
</li>
@endif
</ul>
{{-- Array Of Links --}}
@if (is_array($element))
@foreach ($element as $page => $url)
@if ($page == $paginator->currentPage())
<li class="page-item active" aria-current="page"><span class="page-link">{{ $page }}</span></li>
@else
<li class="page-item"><a class="page-link" href="{{ $url }}">{{ $page }}</a></li>
@endif
@endforeach
@endif
@endforeach
{{-- Next Page Link --}}
@if ($paginator->hasMorePages())
<li class="page-item">
<a class="page-link" href="{{ $paginator->nextPageUrl() }}" rel="next" aria-label="@lang('pagination.next')">&rsaquo;</a>
</li>
@else
<li class="page-item disabled" aria-disabled="true" aria-label="@lang('pagination.next')">
<span class="page-link" aria-hidden="true">&rsaquo;</span>
</li>
@endif
</ul>
</nav>
@endif

View File

@ -1,44 +1,46 @@
@if ($paginator->hasPages())
<ul class="pagination" role="navigation">
{{-- Previous Page Link --}}
@if ($paginator->onFirstPage())
<li class="disabled" aria-disabled="true" aria-label="@lang('pagination.previous')">
<span aria-hidden="true">&lsaquo;</span>
</li>
@else
<li>
<a href="{{ $paginator->previousPageUrl() }}" rel="prev" aria-label="@lang('pagination.previous')">&lsaquo;</a>
</li>
@endif
{{-- Pagination Elements --}}
@foreach ($elements as $element)
{{-- "Three Dots" Separator --}}
@if (is_string($element))
<li class="disabled" aria-disabled="true"><span>{{ $element }}</span></li>
<nav>
<ul class="pagination">
{{-- Previous Page Link --}}
@if ($paginator->onFirstPage())
<li class="disabled" aria-disabled="true" aria-label="@lang('pagination.previous')">
<span aria-hidden="true">&lsaquo;</span>
</li>
@else
<li>
<a href="{{ $paginator->previousPageUrl() }}" rel="prev" aria-label="@lang('pagination.previous')">&lsaquo;</a>
</li>
@endif
{{-- Array Of Links --}}
@if (is_array($element))
@foreach ($element as $page => $url)
@if ($page == $paginator->currentPage())
<li class="active" aria-current="page"><span>{{ $page }}</span></li>
@else
<li><a href="{{ $url }}">{{ $page }}</a></li>
@endif
@endforeach
@endif
@endforeach
{{-- Pagination Elements --}}
@foreach ($elements as $element)
{{-- "Three Dots" Separator --}}
@if (is_string($element))
<li class="disabled" aria-disabled="true"><span>{{ $element }}</span></li>
@endif
{{-- Next Page Link --}}
@if ($paginator->hasMorePages())
<li>
<a href="{{ $paginator->nextPageUrl() }}" rel="next" aria-label="@lang('pagination.next')">&rsaquo;</a>
</li>
@else
<li class="disabled" aria-disabled="true" aria-label="@lang('pagination.next')">
<span aria-hidden="true">&rsaquo;</span>
</li>
@endif
</ul>
{{-- Array Of Links --}}
@if (is_array($element))
@foreach ($element as $page => $url)
@if ($page == $paginator->currentPage())
<li class="active" aria-current="page"><span>{{ $page }}</span></li>
@else
<li><a href="{{ $url }}">{{ $page }}</a></li>
@endif
@endforeach
@endif
@endforeach
{{-- Next Page Link --}}
@if ($paginator->hasMorePages())
<li>
<a href="{{ $paginator->nextPageUrl() }}" rel="next" aria-label="@lang('pagination.next')">&rsaquo;</a>
</li>
@else
<li class="disabled" aria-disabled="true" aria-label="@lang('pagination.next')">
<span aria-hidden="true">&rsaquo;</span>
</li>
@endif
</ul>
</nav>
@endif

View File

@ -1,25 +1,27 @@
@if ($paginator->hasPages())
<ul class="pagination" role="navigation">
{{-- Previous Page Link --}}
@if ($paginator->onFirstPage())
<li class="page-item disabled" aria-disabled="true">
<span class="page-link">@lang('pagination.previous')</span>
</li>
@else
<li class="page-item">
<a class="page-link" href="{{ $paginator->previousPageUrl() }}" rel="prev">@lang('pagination.previous')</a>
</li>
@endif
<nav>
<ul class="pagination">
{{-- Previous Page Link --}}
@if ($paginator->onFirstPage())
<li class="page-item disabled" aria-disabled="true">
<span class="page-link">@lang('pagination.previous')</span>
</li>
@else
<li class="page-item">
<a class="page-link" href="{{ $paginator->previousPageUrl() }}" rel="prev">@lang('pagination.previous')</a>
</li>
@endif
{{-- Next Page Link --}}
@if ($paginator->hasMorePages())
<li class="page-item">
<a class="page-link" href="{{ $paginator->nextPageUrl() }}" rel="next">@lang('pagination.next')</a>
</li>
@else
<li class="page-item disabled" aria-disabled="true">
<span class="page-link">@lang('pagination.next')</span>
</li>
@endif
</ul>
{{-- Next Page Link --}}
@if ($paginator->hasMorePages())
<li class="page-item">
<a class="page-link" href="{{ $paginator->nextPageUrl() }}" rel="next">@lang('pagination.next')</a>
</li>
@else
<li class="page-item disabled" aria-disabled="true">
<span class="page-link">@lang('pagination.next')</span>
</li>
@endif
</ul>
</nav>
@endif

View File

@ -1,17 +1,19 @@
@if ($paginator->hasPages())
<ul class="pagination" role="navigation">
{{-- Previous Page Link --}}
@if ($paginator->onFirstPage())
<li class="disabled" aria-disabled="true"><span>@lang('pagination.previous')</span></li>
@else
<li><a href="{{ $paginator->previousPageUrl() }}" rel="prev">@lang('pagination.previous')</a></li>
@endif
<nav>
<ul class="pagination">
{{-- Previous Page Link --}}
@if ($paginator->onFirstPage())
<li class="disabled" aria-disabled="true"><span>@lang('pagination.previous')</span></li>
@else
<li><a href="{{ $paginator->previousPageUrl() }}" rel="prev">@lang('pagination.previous')</a></li>
@endif
{{-- Next Page Link --}}
@if ($paginator->hasMorePages())
<li><a href="{{ $paginator->nextPageUrl() }}" rel="next">@lang('pagination.next')</a></li>
@else
<li class="disabled" aria-disabled="true"><span>@lang('pagination.next')</span></li>
@endif
</ul>
{{-- Next Page Link --}}
@if ($paginator->hasMorePages())
<li><a href="{{ $paginator->nextPageUrl() }}" rel="next">@lang('pagination.next')</a></li>
@else
<li class="disabled" aria-disabled="true"><span>@lang('pagination.next')</span></li>
@endif
</ul>
</nav>
@endif