Skip to content

Commit

Permalink
Property based filtering functionality has been added
Browse files Browse the repository at this point in the history
- Shop controller/routes have been renamed to product
- Product index/category are sharing the code
- Product properties are shown on product single page
- Categories menu has been moved from sidebar to horizontal/dark menu
- Reorganized shop front product views
  • Loading branch information
fulopattila122 committed Feb 10, 2019
1 parent 722e323 commit ef2cf16
Show file tree
Hide file tree
Showing 21 changed files with 260 additions and 162 deletions.
48 changes: 48 additions & 0 deletions app/Http/Controllers/ProductController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
<?php

namespace App\Http\Controllers;

use App\Http\Requests\ProductIndexRequest;
use Vanilo\Category\Contracts\Taxon;
use Vanilo\Category\Models\TaxonomyProxy;
use Vanilo\Framework\Search\ProductFinder;
use Vanilo\Product\Contracts\Product;
use Vanilo\Properties\Models\PropertyProxy;

class ProductController extends Controller
{
/** @var ProductFinder */
private $productFinder;

public function __construct(ProductFinder $productFinder)
{
$this->productFinder = $productFinder;
}

public function index(ProductIndexRequest $request, string $taxonomyName = null, Taxon $taxon = null)
{
$taxonomies = TaxonomyProxy::get();
$properties = PropertyProxy::get();

if ($taxon) {
$this->productFinder->withinTaxon($taxon);
}

foreach ($request->filters($properties) as $property => $values) {
$this->productFinder->havingPropertyValuesByName($property, $values);
}

return view('product.index', [
'products' => $this->productFinder->getResults(),
'taxonomies' => $taxonomies,
'taxon' => $taxon,
'properties' => $properties,
'filters' => $request->filters($properties)
]);
}

public function show(Product $product)
{
return view('product.show', ['product' => $product]);
}
}
38 changes: 0 additions & 38 deletions app/Http/Controllers/ShopController.php

This file was deleted.

34 changes: 34 additions & 0 deletions app/Http/Requests/ProductIndexRequest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Collection;

class ProductIndexRequest extends FormRequest
{
public function filters(Collection $properties)
{
$filters = [];

foreach ($this->query() as $propertySlug => $values) {
if ($properties->contains(function ($property) use ($propertySlug) {
return $property->slug == $propertySlug;
})) {
$filters[$propertySlug] = is_array($values) ? $values : [$values];
}
}

return $filters;
}

public function authorize()
{
return true;
}

public function rules()
{
return [];
}
}
28 changes: 14 additions & 14 deletions composer.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions resources/views/cart/show.blade.php
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
@extends('layouts.app')

@section('breadcrumbs')
<li class="breadcrumb-item"><a href="{{ route('shop.index') }}">Shop Home</a></li>
<li class="breadcrumb-item"><a href="{{ route('product.index') }}">All Products</a></li>
<li class="breadcrumb-item">Cart</li>
@stop

Expand Down Expand Up @@ -42,7 +42,7 @@
<tr>
<td width="55"><img src="{{ $item->product->getThumbnailUrl() ?: '/images/product.jpg' }}" class="product-image"/></td>
<td>
<a href="{{ route('shop.product', $item->product) }}">
<a href="{{ route('product.show', $item->product) }}">
{{ $item->product->getName() }}
</a></td>
<td>{{ format_price($item->price) }}</td>
Expand Down Expand Up @@ -77,7 +77,7 @@
</div>

<p>
<a href="{{ route('shop.index') }}" class="btn-lg pl-0">Continue Shopping</a>
<a href="{{ route('product.index') }}" class="btn-lg pl-0">Continue Shopping</a>
</p>

</div>
Expand Down
2 changes: 1 addition & 1 deletion resources/views/checkout/show.blade.php
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
@extends('layouts.app')

@section('breadcrumbs')
<li class="breadcrumb-item"><a href="{{ route('shop.index') }}">Shop Home</a></li>
<li class="breadcrumb-item"><a href="{{ route('product.index') }}">All Products</a></li>
<li class="breadcrumb-item"><a href="{{ route('cart.show') }}">Cart</a></li>
<li class="breadcrumb-item">Checkout</li>

Expand Down
4 changes: 2 additions & 2 deletions resources/views/checkout/thankyou.blade.php
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
@extends('layouts.app')

@section('breadcrumbs')
<li class="breadcrumb-item"><a href="{{ route('shop.index') }}">Shop Home</a></li>
<li class="breadcrumb-item"><a href="{{ route('product.index') }}">All Products</a></li>
<li class="breadcrumb-item"><a href="{{ route('cart.show') }}">Cart</a></li>
<li class="breadcrumb-item">Checkout</li>
<li class="breadcrumb-item">Order Complete</li>
Expand All @@ -26,7 +26,7 @@
</ol>

<div>
<a href="{{ route('shop.index') }}" class="btn btn-info">All right!</a>
<a href="{{ route('product.index') }}" class="btn btn-info">All right!</a>
</div>

</div>
Expand Down
5 changes: 3 additions & 2 deletions resources/views/layouts/app.blade.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
<!-- Right Side Of Navbar -->
<ul class="navbar-nav ml-auto">
<li class="nav-item">
<a class="nav-link" href="{{ route('shop.index') }}">Shop</a>
<a class="nav-link" href="{{ route('product.index') }}">Shop</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{{ route('cart.show') }}">Cart
Expand Down Expand Up @@ -88,8 +88,9 @@
<main class="py-4">

<div class="container">
@yield('categories-menu')
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<ol class="breadcrumb bg-transparent">
@yield('breadcrumbs')
</ol>
</nav>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
<?php
$stack = [];
$stack[] = [
'url' => route('shop.category', [$taxon->taxonomy->slug, $taxon]),
'url' => route('product.category', [$taxon->taxonomy->slug, $taxon]),
'label' => $taxon->name
];
$parent = $taxon;
while ($parent = $parent->parent) {
$stack[] = [
'url' => route('shop.category', [$parent->taxonomy->slug, $parent]),
'url' => route('product.category', [$parent->taxonomy->slug, $parent]),
'label' => $parent->name
];
}
Expand Down
78 changes: 78 additions & 0 deletions resources/views/product/index.blade.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
@extends('layouts.app')

@section('categories-menu')
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="categoriesMenu">
<ul class="navbar-nav">
@foreach($taxonomies as $taxonomy)
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button"
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
{{ $taxonomy->name }}
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdown">
@include('product.index._category_level', ['taxons' => $taxonomy->rootLevelTaxons()])
</div>
</li>
@endforeach
</ul>
</div>
</nav>
@stop

@section('breadcrumbs')
<li class="breadcrumb-item"><a href="{{ route('product.index') }}">All Products</a></li>
@if($taxon)
@include('product._breadcrumbs')
@endif
@stop

@section('content')
<div class="container">
<div class="row">

<div class="col-md-3">
@include('product.index._filters', ['properties' => $properties, 'filters' => $filters])
</div>

<div class="col-md-9">
@if($taxon && $products->isEmpty() && $taxon->children->count())
<div class="card card-default mb-4">
<div class="card-header">{{ $taxon->name }} Subcategories</div>

<div class="card-body">
<div class="row">
@foreach($taxon->children as $child)
<div class="col-12 col-sm-6 col-md-4 mb-4">
@include('product.index._category', ['taxon' => $child])
</div>
@endforeach
</div>
</div>
</div>
@endif

@if(!$products->isEmpty())
<div class="card card-default">
<div class="card-header">{{ $taxon ? 'Products in ' . $taxon->name : 'All Products' }}</div>

<div class="card-body">
<div class="row">

@foreach($products as $product)
<div class="col-12 col-sm-6 col-md-4 mb-4">
@include('product.index._product')
</div>
@endforeach

</div>
</div>
</div>
@endif
</div>
</div>
</div>
@endsection
5 changes: 5 additions & 0 deletions resources/views/product/index/_category.blade.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<article class="card shadow-sm">
<div class="card-body">
<h5><a href="{{ route('product.category', [$taxon->taxonomy->name, $taxon]) }}">{{ $taxon->name }}</a></h5>
</div>
</article>
Loading

0 comments on commit ef2cf16

Please sign in to comment.