|
|
@ -49,7 +49,7 @@ Route::group(['middleware' => ['web']], function () {
|
|||
'view' => 'admin::customers.orders.index'
|
||||
])->name('admin.customer.orders.index');
|
||||
|
||||
Route::get('customer/reviews', 'Webkul\Shop\Http\Controllers\ReviewController@index')->defaults('_config',[
|
||||
Route::get('customer/reviews', 'Webkul\Product\Http\Controllers\ReviewController@index')->defaults('_config',[
|
||||
'view' => 'admin::customers.review.index'
|
||||
])->name('admin.customer.review.index');
|
||||
|
||||
|
|
@ -61,11 +61,11 @@ Route::group(['middleware' => ['web']], function () {
|
|||
'redirect' => 'admin.customer.index'
|
||||
])->name('admin.customer.store');
|
||||
|
||||
Route::get('customer/reviews/edit/{id}', 'Webkul\Shop\Http\Controllers\ReviewController@edit')->defaults('_config',[
|
||||
Route::get('customer/reviews/edit/{id}', 'Webkul\Product\Http\Controllers\ReviewController@edit')->defaults('_config',[
|
||||
'view' => 'admin::customers.review.edit'
|
||||
])->name('admin.customer.review.edit');
|
||||
|
||||
Route::put('customer/reviews/edit/{id}', 'Webkul\Shop\Http\Controllers\ReviewController@update')->defaults('_config', [
|
||||
Route::put('customer/reviews/edit/{id}', 'Webkul\Product\Http\Controllers\ReviewController@update')->defaults('_config', [
|
||||
'redirect' => 'admin.customer.review.index'
|
||||
])->name('admin.customer.review.update');
|
||||
|
||||
|
|
@ -73,7 +73,7 @@ Route::group(['middleware' => ['web']], function () {
|
|||
'view' => 'admin::customers.edit'
|
||||
])->name('admin.customer.edit');
|
||||
|
||||
Route::put('customer/reviews/edit/{id}', 'Webkul\Core\Http\Controllers\CustomerController@update')->defaults('_config', [
|
||||
Route::put('customer/edit/{id}', 'Webkul\Core\Http\Controllers\CustomerController@update')->defaults('_config', [
|
||||
'redirect' => 'admin.customer.index'
|
||||
])->name('admin.customer.update');
|
||||
|
||||
|
|
|
|||
|
|
@ -113,7 +113,7 @@ class EventServiceProvider extends ServiceProvider
|
|||
$acl->add('catalog.products', 'Products', 'admin.catalog.products.index', 1);
|
||||
|
||||
$acl->add('catalog.categories', 'Categories', 'admin.catalog.categories.index', 1);
|
||||
|
||||
|
||||
$acl->add('configuration', 'Configure', 'admin.account.edit', 5);
|
||||
|
||||
$acl->add('settings', 'Settings', 'admin.users.index', 6);
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
@section('content')
|
||||
<div class="content">
|
||||
<?php $locale = request()->get('locale') ?: app()->getLocale(); ?>
|
||||
|
||||
|
||||
<form method="POST" action="" @submit.prevent="onSubmit">
|
||||
|
||||
<div class="page-header">
|
||||
|
|
@ -121,7 +121,7 @@
|
|||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</form>
|
||||
</div>
|
||||
@stop
|
||||
|
|
@ -63,8 +63,13 @@
|
|||
|
||||
<div class="control-group">
|
||||
<label for="name" >{{ __('admin::app.customers.customers.customer_group') }}</label>
|
||||
<?php $selectedOption = $customer->customerGroup->id ?>
|
||||
|
||||
@if(!is_null($customer->customer_group_id))
|
||||
<?php $selectedOption = $customer->customerGroup->id ?>
|
||||
@endif
|
||||
|
||||
<select class="control" name="customer_group_id">
|
||||
|
||||
@foreach($customerGroup as $group)
|
||||
<option value="{{ $group->id }}" {{ $selectedOption == $group->id ? 'selected' : '' }}>
|
||||
{{ $group->group_name}}
|
||||
|
|
|
|||
|
|
@ -45,11 +45,11 @@
|
|||
<div class="control-group">
|
||||
<label for="name" >{{ __('admin::app.customers.reviews.status') }}</label>
|
||||
<select class="control" name="status">
|
||||
<option value="1">
|
||||
1
|
||||
<option value="pending" {{ $review->status == "pending" ? 'selected' : ''}}>
|
||||
pending
|
||||
</option>
|
||||
<option value="2">
|
||||
2
|
||||
<option value="approved" {{ $review->status == "approved" ? 'selected' : '' }}>
|
||||
approved
|
||||
</option>
|
||||
</select>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,13 @@
|
|||
@extends('admin::layouts.content')
|
||||
|
||||
@section('page_title')
|
||||
{{ __('admin::app.catalog.categories.edit-title') }}
|
||||
@stop
|
||||
|
||||
@section('content')
|
||||
<div class="content">
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
@stop
|
||||
|
|
@ -140,7 +140,7 @@ class Core
|
|||
|
||||
$channel = $this->getCurrentChannel();
|
||||
|
||||
$currencyCode = $channel->base_currency;
|
||||
$currencyCode = $channel->base_currency->code;
|
||||
|
||||
return currency($price, $currencyCode);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ namespace Webkul\Customer\Http\Controllers;
|
|||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\Response;
|
||||
use Webkul\Customer\Repositories\CustomerRepository;
|
||||
use Webkul\Product\Repositories\ProductReviewRepository as ProductReview;
|
||||
use Webkul\Customer\Models\Customer;
|
||||
use Auth;
|
||||
|
||||
|
|
@ -27,14 +28,29 @@ class CustomerController extends Controller
|
|||
protected $_config;
|
||||
protected $customer;
|
||||
|
||||
/**
|
||||
* ProductReviewRepository object
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $productReview;
|
||||
|
||||
public function __construct(CustomerRepository $customer)
|
||||
/**
|
||||
* Create a new controller instance.
|
||||
*
|
||||
* @param Webkul\Product\Repositories\ProductReviewRepository $productReview
|
||||
* @return void
|
||||
*/
|
||||
|
||||
public function __construct(CustomerRepository $customer , ProductReview $productReview)
|
||||
{
|
||||
$this->middleware('customer');
|
||||
|
||||
$this->_config = request('_config');
|
||||
|
||||
$this->customer = $customer;
|
||||
|
||||
$this->productReview = $productReview;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -141,7 +157,12 @@ class CustomerController extends Controller
|
|||
}
|
||||
|
||||
public function reviews() {
|
||||
return view($this->_config['view']);
|
||||
|
||||
$id = auth()->guard('customer')->user()->id;
|
||||
|
||||
$reviews = $this->productReview->getCustomerReview($id);
|
||||
|
||||
return view($this->_config['view'],compact('reviews'));
|
||||
}
|
||||
|
||||
public function address() {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<?php
|
||||
|
||||
namespace Webkul\Core\Http\Controllers;
|
||||
namespace Webkul\Product\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\Response;
|
||||
|
|
@ -53,29 +53,43 @@ class ReviewController extends Controller
|
|||
$this->_config = request('_config');
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
return view($this->_config['view']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for editing the specified resource.
|
||||
*
|
||||
* @param int $id
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function store(Request $request , $id)
|
||||
{
|
||||
$this->validate(request(), [
|
||||
'comment' => 'required',
|
||||
]);
|
||||
public function edit($id)
|
||||
{
|
||||
$review = $this->productReview->find($id);
|
||||
|
||||
$input=$request->all();
|
||||
return view($this->_config['view'],compact('review'));
|
||||
}
|
||||
|
||||
$input['product_id']=$id;
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param int $id
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function update(Request $request, $id)
|
||||
{
|
||||
|
||||
$input['customer_id']=1;
|
||||
$this->productReview->update(request()->all(), $id);
|
||||
|
||||
$this->productReview->create($input);
|
||||
|
||||
session()->flash('success', 'Review submitted successfully.');
|
||||
session()->flash('success', 'Review updated successfully.');
|
||||
|
||||
return redirect()->route($this->_config['redirect']);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -4,6 +4,7 @@ namespace Webkul\Product\Models;
|
|||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Webkul\Customer\Models\Customer;
|
||||
use Webkul\Product\Models\Product;
|
||||
|
||||
class ProductReview extends Model
|
||||
{
|
||||
|
|
@ -16,4 +17,12 @@ class ProductReview extends Model
|
|||
{
|
||||
return $this->belongsTo(Customer::class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the product.
|
||||
*/
|
||||
public function product()
|
||||
{
|
||||
return $this->belongsTo(Product::class);
|
||||
}
|
||||
}
|
||||
|
|
@ -56,7 +56,7 @@ class Review extends AbstractProduct
|
|||
*/
|
||||
public function getTotalRating($product)
|
||||
{
|
||||
return $product->reviews()->where('status',1)->sum('rating');
|
||||
return $product->reviews()->where('status','approved')->sum('rating');
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -101,7 +101,7 @@ class Review extends AbstractProduct
|
|||
$link = $_SERVER['PHP_SELF'];
|
||||
$link_array = explode('/',$link);
|
||||
$last=end($link_array);
|
||||
$itemPerPage = $last*5;
|
||||
$itemPerPage = 1*5;
|
||||
return $product->reviews()->where('status',1)->paginate($itemPerPage);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,8 +1,10 @@
|
|||
<?php
|
||||
<?php
|
||||
|
||||
namespace Webkul\Product\Repositories;
|
||||
|
||||
|
||||
use Illuminate\Container\Container as App;
|
||||
use Webkul\Core\Eloquent\Repository;
|
||||
use Webkul\Product\Repositories\ProductRepository;
|
||||
|
||||
/**
|
||||
* Product Review Reposotory
|
||||
|
|
@ -11,7 +13,29 @@ use Webkul\Core\Eloquent\Repository;
|
|||
* @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com)
|
||||
*/
|
||||
class ProductReviewRepository extends Repository
|
||||
{
|
||||
{
|
||||
/**
|
||||
* ProductImageRepository object
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $product;
|
||||
|
||||
/**
|
||||
* Create a new controller instance.
|
||||
*
|
||||
* @param Webkul\Product\Repositories\ProductRepository $product
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(
|
||||
ProductRepository $product,
|
||||
App $app)
|
||||
{
|
||||
$this->product = $product;
|
||||
|
||||
parent::__construct($app);
|
||||
}
|
||||
|
||||
/**
|
||||
* Specify Model class name
|
||||
*
|
||||
|
|
@ -21,4 +45,16 @@ class ProductReviewRepository extends Repository
|
|||
{
|
||||
return 'Webkul\Product\Models\ProductReview';
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve review for customerId
|
||||
*
|
||||
* @param int $customerId
|
||||
*/
|
||||
function getCustomerReview($customerId)
|
||||
{
|
||||
$reviews = $this->model->where('customer_id',$customerId)->with('product')->get();
|
||||
|
||||
return $reviews;
|
||||
}
|
||||
}
|
||||
|
|
@ -52,6 +52,8 @@ class ProductController extends Controller
|
|||
{
|
||||
$product = $this->product->findBySlugOrFail($slug);
|
||||
|
||||
return view($this->_config['view'], compact('product'));
|
||||
$customer = auth()->guard('customer')->user();
|
||||
|
||||
return view($this->_config['view'], compact('product','customer'));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -94,7 +94,7 @@ class ReviewController extends Controller
|
|||
|
||||
$customer_id = auth()->guard('customer')->user()->id;
|
||||
|
||||
$data['status']=0;
|
||||
$data['status']='pending';
|
||||
$data['product_id']=$id;
|
||||
$data['customer_id']=$customer_id;
|
||||
|
||||
|
|
|
|||
|
|
@ -51,12 +51,12 @@ Route::group(['middleware' => ['web']], function () {
|
|||
])->name('shop.reviews.create');
|
||||
|
||||
Route::post('/product/{slug}/review', 'Webkul\Shop\Http\Controllers\ReviewController@store')->defaults('_config', [
|
||||
'redirect' => 'shop.reviews.index'
|
||||
'redirect' => 'customer.reviews.index'
|
||||
])->name('shop.reviews.store');
|
||||
|
||||
Route::post('/reviews/create/{slug}', 'Webkul\Shop\Http\Controllers\ReviewController@store')->defaults('_config', [
|
||||
'redirect' => 'admin.reviews.index'
|
||||
])->name('admin.reviews.store');
|
||||
// Route::post('/reviews/create/{slug}', 'Webkul\Shop\Http\Controllers\ReviewController@store')->defaults('_config', [
|
||||
// 'redirect' => 'admin.reviews.index'
|
||||
// ])->name('admin.reviews.store');
|
||||
|
||||
|
||||
//customer routes starts here
|
||||
|
|
|
|||
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="32px" height="32px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<!-- Generator: Sketch 50 (54983) - http://www.bohemiancoding.com/sketch -->
|
||||
<title>icon-filter</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<defs></defs>
|
||||
<g id="icon-filter" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<path d="M7.49822126,6.5 L7.49822126,9.98513267 L15.5,16.270847 L15.5,23.4152305 L16.5,22.8438019 L16.5,16.2644683 L24.5100795,10.0607155 L24.5100795,6.5 L7.49822126,6.5 Z" id="Path-2" stroke="#242424" stroke-width="3"></path>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 690 B |
|
|
@ -0,0 +1,13 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="32px" height="32px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<!-- Generator: Sketch 50 (54983) - http://www.bohemiancoding.com/sketch -->
|
||||
<title>icon-sort</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<defs></defs>
|
||||
<g id="icon-sort" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="Group" transform="translate(5.000000, 6.000000)" fill="#242424">
|
||||
<polygon id="Path-8" points="13 0 16 0 16 13 19.689148 9.24692068 21.3605633 11.9273017 13 20.3403711"></polygon>
|
||||
<polygon id="Path-8-Copy" points="9 20 6 20 6 7.34037112 2.67141528 11.0934504 0.660888672 9.02355957 9 0"></polygon>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 800 B |
|
|
@ -29,4 +29,28 @@
|
|||
background-image:URL('../images/icon-list-view.svg');
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
}
|
||||
|
||||
.sort-icon {
|
||||
background-image:URL('../images/icon-sort.svg');
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
}
|
||||
|
||||
.filter-icon {
|
||||
background-image:URL('../images/icon-filter.svg');
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
}
|
||||
|
||||
.whishlist-icon {
|
||||
background-image:URL('../images/wishlist.svg');
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
}
|
||||
|
||||
.share-icon {
|
||||
background-image:URL('../images/icon-share.svg');
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
}
|
||||
|
|
@ -1 +1,44 @@
|
|||
<h1>Customer Reviews page</h1>
|
||||
@inject ('productImageHelper', 'Webkul\Product\Product\ProductImage')
|
||||
|
||||
@extends('shop::layouts.master')
|
||||
@section('content-wrapper')
|
||||
<div class="account-content">
|
||||
@include('shop::customers.account.partials.sidemenu')
|
||||
|
||||
<div class="cusomer-section">
|
||||
|
||||
<h1> Reviews</h1>
|
||||
|
||||
@foreach($reviews as $review)
|
||||
<div class="customer-section-info">
|
||||
|
||||
<?php $images = $productImageHelper->getGalleryImages($review->product); ?>
|
||||
|
||||
<div class="pro-img">
|
||||
<img src="{{ $images[0]['small_image_url'] }}" />
|
||||
</div>
|
||||
|
||||
<div class="pro-discription">
|
||||
|
||||
<div class="title">
|
||||
{{ $review->product->name }}
|
||||
</div>
|
||||
|
||||
<div class="rating">
|
||||
@for($i=0 ; $i < $review->rating ; $i++)
|
||||
<span class="icon star-icon"></span>
|
||||
@endfor
|
||||
</div>
|
||||
|
||||
<div class="discription">
|
||||
{{ $review->comment }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@endforeach
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@endsection
|
||||
|
|
@ -147,14 +147,8 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="header-bottom">
|
||||
<div class="header-bottom" id="header-bottom">
|
||||
@include('shop::layouts.header.nav-menu.navmenu')
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
@push('scripts')
|
||||
<script>
|
||||
|
||||
</script>
|
||||
@endpush
|
||||
|
|
@ -1 +1 @@
|
|||
<button class="btn btn-lg btn-primary addtocart">Add to Cart</button>
|
||||
<button class="btn btn-lg btn-primary addtocart">ADD TO CART</button>
|
||||
|
|
@ -0,0 +1 @@
|
|||
<button class="btn btn-lg btn-primary buynow">BUY NOW!</button>
|
||||
|
|
@ -44,4 +44,90 @@
|
|||
|
||||
</div>
|
||||
|
||||
@stop
|
||||
@stop
|
||||
|
||||
|
||||
@push('scripts')
|
||||
|
||||
<script>
|
||||
|
||||
window.onload = function() {
|
||||
|
||||
var sort = document.getElementById("sort");
|
||||
var filter = document.getElementById("filter");
|
||||
|
||||
sort.addEventListener("click", myFunction);
|
||||
filter.addEventListener("click", myFunction);
|
||||
|
||||
function myFunction(){
|
||||
|
||||
let className = document.getElementById(this.id).className;
|
||||
var productGrid = document.getElementsByClassName('product-grid max-3-col');
|
||||
var filterLayered = document.getElementsByClassName('layered-filter-wrapper');
|
||||
var sortLimiter = document.getElementsByClassName('reponsive-sorter-limiter');
|
||||
|
||||
if(className === 'icon filter-icon'){
|
||||
|
||||
for(let i=0 ; i < filterLayered.length ; i++){
|
||||
filterLayered[i].style.display="block";
|
||||
filterLayered[i].style.padding="20px";
|
||||
filterLayered[i].style.width="100%";
|
||||
filterLayered[i].style.marginTop = "-100px";
|
||||
}
|
||||
for(let i=0 ; i < productGrid.length ; i++){
|
||||
productGrid[i].style.display = "none";
|
||||
}
|
||||
for(let i=0 ; i < sortLimiter.length ; i++){
|
||||
sortLimiter[i].style.display = "none";
|
||||
}
|
||||
|
||||
filter.classList.remove('icon', 'filter-icon');
|
||||
filter.classList.add('icon', 'cross-icon');
|
||||
sort.classList.remove('icon', 'cross-icon');
|
||||
sort.classList.remove('icon', 'sort-icon');
|
||||
sort.classList.add('icon', 'sort-icon');
|
||||
|
||||
}else if(className === 'icon sort-icon'){
|
||||
|
||||
for(let i=0 ; i < filterLayered.length ; i++){
|
||||
filterLayered[i].style.display="none";
|
||||
}
|
||||
for(let i=0 ; i < productGrid.length ; i++){
|
||||
productGrid[i].style.display = "none";
|
||||
}
|
||||
for(let i=0 ; i < sortLimiter.length ; i++){
|
||||
sortLimiter[i].style.display = "flex";
|
||||
sortLimiter[i].style.justifyContent = "space-between";
|
||||
}
|
||||
|
||||
sort.classList.remove('icon', 'sort-icon');
|
||||
sort.classList.add('icon', 'cross-icon');
|
||||
filter.classList.remove('icon', 'cross-icon');
|
||||
filter.classList.remove('icon', 'filter-icon');
|
||||
filter.classList.add('icon', 'filter-icon');
|
||||
|
||||
}else {
|
||||
|
||||
for(let i=0 ; i < productGrid.length ; i++){
|
||||
productGrid[i].style.display = "grid";
|
||||
}
|
||||
for(let i=0 ; i < filterLayered.length ; i++){
|
||||
filterLayered[i].style.display="none";
|
||||
}
|
||||
for(let i=0 ; i < sortLimiter.length ; i++){
|
||||
sortLimiter[i].style.display = "none";
|
||||
}
|
||||
|
||||
sort.classList.remove('icon', 'cross-icon');
|
||||
filter.classList.remove('icon', 'cross-icon');
|
||||
sort.classList.remove('icon', 'sort-icon');
|
||||
filter.classList.remove('icon', 'filter-icon');
|
||||
sort.classList.add('icon', 'sort-icon');
|
||||
filter.classList.add('icon', 'filter-icon');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
@endpush
|
||||
|
|
@ -11,9 +11,9 @@
|
|||
</div>
|
||||
|
||||
<div class="product-information">
|
||||
|
||||
|
||||
<div class="product-name">
|
||||
|
||||
|
||||
{{ $product->id }}
|
||||
|
||||
<a href="" title="{{ $product->name }}">
|
||||
|
|
@ -24,13 +24,13 @@
|
|||
<div class="product-description">
|
||||
{{ $product->short_description }}
|
||||
</div>
|
||||
|
||||
|
||||
@include ('shop::products.price', ['product' => $product])
|
||||
|
||||
@include ('shop::products.review', ['product' => $product])
|
||||
|
||||
@include ('shop::products.add-to', ['product' => $product])
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
|
@ -3,13 +3,13 @@
|
|||
<div class="layered-filter-wrapper">
|
||||
|
||||
<layered-navigation></layered-navigation>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
@push('scripts')
|
||||
<script type="text/x-template" id="layered-navigation-template">
|
||||
<div>
|
||||
|
||||
|
||||
<div class="filter-title">
|
||||
{{ __('shop::app.products.layered-nav-title') }}
|
||||
</div>
|
||||
|
|
@ -17,7 +17,7 @@
|
|||
<div class="filter-content">
|
||||
|
||||
<div class="filter-attributes">
|
||||
|
||||
|
||||
<filter-attribute-item v-for='(attribute, index) in attributes' :attribute="attribute" :key="index" :index="index" @onFilterAdded="addFilters(attribute.code, $event)" :appliedFilterValues="appliedFilters[attribute.code]">
|
||||
</filter-attribute-item>
|
||||
|
||||
|
|
@ -58,7 +58,7 @@
|
|||
</ol>
|
||||
|
||||
<div class="price-range-wrapper" v-if="attribute.type == 'price'">
|
||||
<vue-slider
|
||||
<vue-slider
|
||||
ref="slider"
|
||||
v-model="sliderConfig.value"
|
||||
:process-style="sliderConfig.processStyle"
|
||||
|
|
@ -86,9 +86,9 @@
|
|||
|
||||
created () {
|
||||
var urlParams = new URLSearchParams(window.location.search);
|
||||
|
||||
|
||||
var entries = urlParams.entries();
|
||||
|
||||
|
||||
for(pair of entries) {
|
||||
this.appliedFilters[pair[0]] = pair[1].split(',');
|
||||
}
|
||||
|
|
@ -99,7 +99,7 @@
|
|||
if(filters.length) {
|
||||
this.appliedFilters[attributeCode] = filters;
|
||||
} else {
|
||||
delete this.appliedFilters[attributeCode];
|
||||
delete this.appliedFilters[attributeCode];
|
||||
}
|
||||
|
||||
this.applyFilter()
|
||||
|
|
@ -107,7 +107,7 @@
|
|||
|
||||
applyFilter () {
|
||||
var params = [];
|
||||
|
||||
|
||||
for(key in this.appliedFilters) {
|
||||
params.push(key + '=' + this.appliedFilters[key].join(','))
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,11 +3,15 @@
|
|||
<div class="top-toolbar">
|
||||
|
||||
<div class="page-info">
|
||||
{{ __('shop::app.products.pager-info', ['showing' => $products->firstItem() . '-' . $products->lastItem(), 'total' => $products->total()]) }}
|
||||
<span>
|
||||
{{ __('shop::app.products.pager-info', ['showing' => $products->firstItem() . '-' . $products->lastItem(), 'total' => $products->total()]) }}
|
||||
</span>
|
||||
|
||||
<span>Men</span>
|
||||
</div>
|
||||
|
||||
<div class="pager">
|
||||
|
||||
|
||||
<div class="view-mode">
|
||||
@if ($toolbarHelper->isModeActive('grid'))
|
||||
<span class="grid-view">
|
||||
|
|
@ -28,6 +32,15 @@
|
|||
<i class="icon list-view-icon"></i>
|
||||
</a>
|
||||
@endif
|
||||
|
||||
<div class="sort-filter">
|
||||
|
||||
<i class="icon sort-icon" id="sort" ></i>
|
||||
|
||||
<i class="icon filter-icon" id="filter"></i>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="sorter">
|
||||
|
|
@ -61,7 +74,44 @@
|
|||
|
||||
</select>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="reponsive-sorter-limiter">
|
||||
|
||||
<div class="sorter">
|
||||
<label>{{ __('shop::app.products.sort-by') }}</label>
|
||||
|
||||
<select onchange="window.location.href = this.value">
|
||||
|
||||
@foreach ($toolbarHelper->getAvailableOrders() as $key => $order)
|
||||
|
||||
<option value="{{ $toolbarHelper->getOrderUrl($key) }}" {{ $toolbarHelper->isOrderCurrent($key) ? 'selected' : '' }}>
|
||||
{{ __('shop::app.products.' . $order) }}
|
||||
</option>
|
||||
|
||||
@endforeach
|
||||
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="limiter">
|
||||
<label>{{ __('shop::app.products.show') }}</label>
|
||||
|
||||
<select onchange="window.location.href = this.value">
|
||||
|
||||
@foreach ($toolbarHelper->getAvailableLimits() as $limit)
|
||||
|
||||
<option value="{{ $toolbarHelper->getLimitUrl($limit) }}" {{ $toolbarHelper->isLimitCurrent($limit) ? 'selected' : '' }}>
|
||||
{{ $limit }}
|
||||
</option>
|
||||
|
||||
@endforeach
|
||||
|
||||
</select>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
|
@ -3,10 +3,10 @@
|
|||
@inject ('priceHelper', 'Webkul\Product\Product\Price')
|
||||
|
||||
@if ($product->type == 'configurable')
|
||||
|
||||
|
||||
<span class="price-label">{{ __('shop::app.products.price-label') }}</span>
|
||||
|
||||
<span class="final-price">{{ core()->currency($priceHelper->getMinimalPrice($product)) }}</span>
|
||||
<span class="final-price">{{ core()->currency($priceHelper->getMinimalPrice($product)) }}</span>
|
||||
|
||||
@else
|
||||
|
||||
|
|
@ -18,7 +18,7 @@
|
|||
|
||||
@else
|
||||
|
||||
<span>{{ core()->currency($product->price) }}</span>
|
||||
<span>{{ core()->currency($product->price) }}</span>
|
||||
|
||||
@endif
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,7 @@
|
|||
<div class="cart-fav-seg">
|
||||
|
||||
@include ('shop::products.add-to-cart', ['product' => $product])
|
||||
|
||||
@include ('shop::products.buy-now')
|
||||
|
||||
</div>
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
|
||||
<div class="icon share-icon">
|
||||
<a href="#"></a>
|
||||
</div>
|
||||
|
|
@ -24,7 +24,7 @@
|
|||
<span>{{ $product->name }}</span>
|
||||
</div>
|
||||
|
||||
@include ('shop::products.review', ['product' => $product])
|
||||
{{-- @include ('shop::products.review', ['product' => $product]) --}}
|
||||
|
||||
@include ('shop::products.price', ['product' => $product])
|
||||
|
||||
|
|
@ -76,3 +76,44 @@
|
|||
</section>
|
||||
|
||||
@endsection
|
||||
|
||||
|
||||
<style>
|
||||
|
||||
.header {
|
||||
position: sticky;
|
||||
top: 16px;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
|
||||
@push('scripts')
|
||||
|
||||
<script>
|
||||
|
||||
window.onscroll = function() {scrollFunction()};
|
||||
|
||||
function scrollFunction() {
|
||||
|
||||
var scrollTop = window.pageYOffset
|
||||
|
||||
var elems = document.getElementById("header-bottom");
|
||||
|
||||
if(scrollTop > 200){
|
||||
|
||||
elems.style.display = "none";
|
||||
|
||||
}else {
|
||||
elems.style.display = "block";
|
||||
}
|
||||
|
||||
console.log(scrollTop);
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
@endpush
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@
|
|||
<select v-validate="'required'" class="control" :name="['super_attribute[' + attribute.id + ']']" :disabled="attribute.disabled" @change="configure(attribute, $event.target.value)" :id="['attribute_' + attribute.id]">
|
||||
|
||||
<option v-for='(option, index) in attribute.options' :value="option.id">@{{ option.label }}</option>
|
||||
|
||||
|
||||
</select>
|
||||
|
||||
<span class="control-error" v-if="errors.has('super_attribute[' + attribute.id + ']')">
|
||||
|
|
@ -41,17 +41,17 @@
|
|||
</div>
|
||||
</script>
|
||||
|
||||
<?php $config = $configurableOptionHelper->getConfigurationConfig($product) ?>
|
||||
{{-- <?php $config = $configurableOptionHelper->getConfigurationConfig($product) ?> --}}
|
||||
|
||||
<script>
|
||||
|
||||
|
||||
Vue.component('product-options', {
|
||||
|
||||
template: '#product-options-template',
|
||||
|
||||
data: () => ({
|
||||
config: @json($config),
|
||||
|
||||
|
||||
childAttributes: [],
|
||||
|
||||
selectedProductId: '',
|
||||
|
|
@ -207,7 +207,7 @@
|
|||
element.selectedIndex = "0";
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
getAttributeOptions (attributeId) {
|
||||
var this_this = this,
|
||||
options;
|
||||
|
|
@ -215,7 +215,7 @@
|
|||
this.config.attributes.forEach(function(attribute, index) {
|
||||
if (attribute.id == attributeId) {
|
||||
options = attribute.options;
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
return options;
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
<div class="product-image-group">
|
||||
|
||||
<product-gallery></product-gallery>
|
||||
@include ('shop::products.add-to')
|
||||
@include ('shop::products.product-add')
|
||||
</div>
|
||||
@push('scripts')
|
||||
|
||||
|
|
@ -32,8 +32,13 @@
|
|||
|
||||
<img :src="currentLargeImageUrl" />
|
||||
|
||||
<div class="icon whishlist-icon"> </div>
|
||||
|
||||
@include ('shop::products.sharelinks')
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</script>
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
@inject ('reviewHelper', 'Webkul\Product\Product\Review')
|
||||
|
||||
@if ($total = $reviewHelper->getTotalReviews($product))
|
||||
<div class="rating-reviews">
|
||||
<div class="rating-header">
|
||||
|
|
@ -17,7 +16,7 @@
|
|||
@for ($i = 1; $i <= round($reviewHelper->getAverageRating($product)); $i++)
|
||||
|
||||
<span class="icon star-icon"></span>
|
||||
|
||||
|
||||
@endfor
|
||||
</span>
|
||||
|
||||
|
|
@ -27,15 +26,17 @@
|
|||
|
||||
</div>
|
||||
|
||||
@if(!is_null($customer))
|
||||
<a href="{{ route('shop.reviews.create', $product->url_key) }}" class="btn btn-lg btn-primary">
|
||||
{{ __('shop::app.products.write-review-btn') }}
|
||||
</a>
|
||||
@endif
|
||||
|
||||
</div>
|
||||
|
||||
<div class="reviews">
|
||||
|
||||
@foreach ($reviewHelper->getReviews($product)->paginate(5) as $review)
|
||||
@foreach ($reviewHelper->getReviews($product)->paginate(10) as $review)
|
||||
<div class="review">
|
||||
<div class="title">
|
||||
{{ $review->title }}
|
||||
|
|
@ -45,7 +46,7 @@
|
|||
@for ($i = 1; $i <= $review->rating; $i++)
|
||||
|
||||
<span class="icon star-icon"></span>
|
||||
|
||||
|
||||
@endfor
|
||||
</span>
|
||||
|
||||
|
|
@ -55,7 +56,7 @@
|
|||
|
||||
<div class="reviewer-details">
|
||||
<span class="by">
|
||||
{{ __('shop::app.products.by', ['name' => $review->customer->name]) }},
|
||||
{{ __('shop::app.products.by', ['name' => $review->customer->name]) }},
|
||||
</span>
|
||||
|
||||
<span class="when">
|
||||
|
|
|
|||
|
After Width: | Height: | Size: 4.4 KiB |
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="32px" height="32px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<!-- Generator: Sketch 50 (54983) - http://www.bohemiancoding.com/sketch -->
|
||||
<title>icon-filter</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<defs></defs>
|
||||
<g id="icon-filter" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<path d="M7.49822126,6.5 L7.49822126,9.98513267 L15.5,16.270847 L15.5,23.4152305 L16.5,22.8438019 L16.5,16.2644683 L24.5100795,10.0607155 L24.5100795,6.5 L7.49822126,6.5 Z" id="Path-2" stroke="#242424" stroke-width="3"></path>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 690 B |
|
|
@ -0,0 +1,13 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="32px" height="32px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<!-- Generator: Sketch 50 (54983) - http://www.bohemiancoding.com/sketch -->
|
||||
<title>icon-sort</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<defs></defs>
|
||||
<g id="icon-sort" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="Group" transform="translate(5.000000, 6.000000)" fill="#242424">
|
||||
<polygon id="Path-8" points="13 0 16 0 16 13 19.689148 9.24692068 21.3605633 11.9273017 13 20.3403711"></polygon>
|
||||
<polygon id="Path-8-Copy" points="9 20 6 20 6 7.34037112 2.67141528 11.0934504 0.660888672 9.02355957 9 0"></polygon>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 800 B |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 83 KiB |
|
|
@ -1,4 +1,4 @@
|
|||
{
|
||||
"/js/shop.js": "/js/shop.js",
|
||||
"/css/shop.css": "/css/shop.css"
|
||||
}
|
||||
}
|
||||
|
|
|
|||