diff options
| author | horus | 2018-02-13 20:19:46 +0100 |
|---|---|---|
| committer | horus | 2018-02-13 20:19:46 +0100 |
| commit | 0a0730479e92eafa08ce58964a8f1db8f46abf83 (patch) | |
| tree | f8697b63be933883d3f7e18a9e31057e690afe09 /site | |
| parent | ee0a03f9e733b6c20ac3b576b8d655455790fbc5 (diff) | |
| download | alkobote-0a0730479e92eafa08ce58964a8f1db8f46abf83.tar.gz | |
Implements basic search with LIKE query. (website)
Diffstat (limited to 'site')
| -rw-r--r-- | site/app/Http/Controllers/SearchController.php | 80 | ||||
| -rw-r--r-- | site/public/css/colors.css | 10 | ||||
| -rw-r--r-- | site/public/css/custom.css | 11 | ||||
| -rw-r--r-- | site/resources/views/layouts/base.blade.php | 2 | ||||
| -rw-r--r-- | site/resources/views/search.blade.php | 204 | ||||
| -rw-r--r-- | site/resources/views/snippets/navbar.blade.php | 17 | ||||
| -rw-r--r-- | site/resources/views/snippets/sortbuttons.blade.php | 20 | ||||
| -rw-r--r-- | site/routes/web.php | 2 |
8 files changed, 331 insertions, 15 deletions
diff --git a/site/app/Http/Controllers/SearchController.php b/site/app/Http/Controllers/SearchController.php new file mode 100644 index 0000000..bb79bae --- /dev/null +++ b/site/app/Http/Controllers/SearchController.php @@ -0,0 +1,80 @@ +<?php +namespace App\Http\Controllers; +use Illuminate\Http\Request; +use App\Helpers\CryptoHelper; + +use Illuminate\Support\Facades\DB; +use App\Http\Controllers\Controller; + +use Illuminate\Support\Facades\Input; + +use Cookie; + +class SearchController extends Controller { + /** + * Shows the index page. + * + * @return Response + */ + public function showPage(Request $request) { + + /* + * Sorting + */ + $sort_by = Input::get("sort"); + if ( is_null($sort_by) ) { + $sort_by = $request->cookie("sort"); + } + switch ($sort_by) { + case("price"): + $sort_by = "discounted_price"; + break; + case("discounted_price"): + $sort_by = "discounted_price"; + break; + case("name"): + $sort_by = "name"; + break; + case("shop"): + $sort_by = "shop"; + break; + case("procent"): + $sort_by = "procent"; + break; + case("time"): + $sort_by = "created_at"; + break; + case("created_at"): + $sort_by = "created_at"; + break; + default: + $sort_by = "created_at"; + break; + } + Cookie::queue(Cookie::make('sort', $sort_by, 60*24)); + + $order_by = $request->input("order"); + if ( is_null($order_by) ) { + $order_by = $request->cookie("order"); + } + if ( "desc" != $order_by ) { + $order_by = "asc"; + } + Cookie::queue(Cookie::make('order', $order_by, 60*24)); + + $query = Input::get("q"); + $q = "%" . $this->escapeLike($query) . "%"; + $data = DB::table('all_view')->where('name', 'like', $q)->orWhere('spirit_type', 'like', $q)->orderBy($sort_by, $order_by)->simplePaginate(20); + #$data = DB::table('whisky_view')->orderBy('procent', 'DESC')->limit(100)->simplePaginate(20); + #var_dump($data); exit; + + return view('search', ['data' => $data, 'search_phrase' => $query ]); + } + + private function escapeLike($string) { + $search = array('%', '_'); + $replace = array('\%', '\_'); + return str_replace($search, $replace, $string); + } + +} diff --git a/site/public/css/colors.css b/site/public/css/colors.css index be2d738..0cf48d2 100644 --- a/site/public/css/colors.css +++ b/site/public/css/colors.css @@ -37,3 +37,13 @@ a.u:hover, .page-link:hover { color: #142639 !important; } +.btn-primary { + color: #142639 !important; + background-color: #1289A7 !important; + border: 1px solid #142639 !important; +} +.btn-secondary:hover { + background-color: #d1d8e0 !important; + color: #142639 !important; + border: 1px solid #142639 !important; +} diff --git a/site/public/css/custom.css b/site/public/css/custom.css index 3fe47d0..016e282 100644 --- a/site/public/css/custom.css +++ b/site/public/css/custom.css @@ -110,3 +110,14 @@ footer { .footer-link { padding-left: 0px !important; } +.navbar-small { + font-size: 70% !important; +} +.search-btn-bg-white { + /* + */ + background-color: rgba(255,255,255,0.05)!important; +} +.search-btn-bg-white:hover { + background-color: rgba(255,255,255,.15)!important; +} diff --git a/site/resources/views/layouts/base.blade.php b/site/resources/views/layouts/base.blade.php index 4ebaff6..491d324 100644 --- a/site/resources/views/layouts/base.blade.php +++ b/site/resources/views/layouts/base.blade.php @@ -6,7 +6,7 @@ <meta name="description" content=""> <meta name="author" content=""> <link rel="icon" href="/favicon.ico"> - <title>Angebote | Fuselkoenig.de</title> + <title>@yield('header') | Fuselkoenig.de</title> <!-- <link href="/css/bootstrap.css" rel="stylesheet"> diff --git a/site/resources/views/search.blade.php b/site/resources/views/search.blade.php new file mode 100644 index 0000000..bf0fdca --- /dev/null +++ b/site/resources/views/search.blade.php @@ -0,0 +1,204 @@ +@extends('layouts.base') + +@section('header') +<?php +if ( "" == $search_phrase) { + echo "Suchen..."; +} else { +?> +Sie haben nach {{ ucfirst($search_phrase) }} gesucht ({{$data->count()}} Treffer) +<?php +} +?> +@endsection + +@section('content') + <div class="container"> + <div class="jumbotron p-3 p-md-5 text-white rounded bg-dark bbg-white ttext-dark box-shadow"> + <div class="col-md-6 px-0"> + <h1 class="display-4 font-italic"> +<?php +if ( "" == $search_phrase) { + echo "Suchen..."; +} else { +?> +Sie haben nach <strong><u>{{ ucfirst($search_phrase) }}</u></strong> gesucht... <ssmall>({{$data->count()}} Treffer)</ssmall> +<?php +} +?> +</h1> + <!--p class="lead my-3">Finde immer die günstigsten Angebote im Bereich Spirituosen. Täglich neue Schnäppchen.</p--> + <p class="lead mb-0"><a href="/" class="text-white font-weight-bold">Zurück zur Übersicht...</a></p> + </div> + </div> + +<?php +if ( "" == $search_phrase || !$data->count()) { + /* Suchform */ + + if ( !$data->count() ) { + /* Keine Ergebnisse */ +?> + <div class="alert alert-warning" role="alert"> + <h4 class="alert-heading">Nichts gefunden</h4> + Leider hat Ihre Suche nach <strong>{{ $search_phrase }}</strong> keine Ergebnisse ergeben. Bitte versuchen sie es erneut mit einem anderen Begriff. + </div> +<?php + /* Ende Keine Ergebnisse */ + } +?> + <form action="/search"> + <div class="form-group"> + <label for=""></label> + <input type="text" class="form-control" name="q" id="search_form" aria-describedby="suchform-help" placeholder="Hier nach der gewünschten Spirituose suchen, zB Glenfiddich" required> + <small id="emailHelp" class="form-text text-muted">Suche nach der gewünschten Spirituose.</small> + </div> + <button type="submit" class="btn btn-secondary">Suchen</button> + </form> +<?php + + /* Ende Suchform */ + +} else { + + /* Zeigt Suchergebnisse */ + +?> +@include('snippets.sortbuttons') +<?php + + $count = 0; + foreach( $data as $offer) { + + if ( $count % 2 == 0) { +?> +<!-- .row --> + <div class="row mb-2"> +<?php + } + +?> + <div class="col-md-6 col-sm-12" id="{{ $offer->name }}"> + <div class="card flex-md-row mb-4 box-shadow h-md-250 h-sm-500"> + + <!-- >= md --> + <div class="card-body d-none d-md-flex flex-row align-items-start"> + <div class="card-img-overlay" title="{{$offer->name}} :: {{ $offer->shop }}"> + <p class="card-text bg-danger float-right rounded off-badge">{{ $offer->procent}}%</p> +<!-- + <p class="card-text h-100 float-right"> + <span class="bg-danger ffloat-right rounded off-badge">{{ $offer->procent}}%</span> + <span class="created_at d-flex ffloat-right rounded">{{ date("d.m.y", $offer->created_at) }}</span> + </p> +--> + + <!--p class="card-text created_at h-100 float-right d-flex fflex-column justify-content-end">{{ $offer->created_at}}</p--> + </div> + <div class="card-img-overlay w-55"> + <div class="d-inline align-items-start text-left w-100 mb-2"> + <strong class="text-primary">{{ $offer->spirit_type }}</strong> + <a class="text-dark float-right" href="{{ $offer->shop_url }}">{{ $offer->shop }}</a> + </div> + + <h4 class="mb-0 hide-overflow h-45"> + <a class="text-dark ttext-truncate hide-overflow" href="#{{ $offer->name }}" title="{{$offer->name}}" >{{ $offer->name }}</a> + <span class="text-fade-out"></span> + </h4> + + <p class="card-text mb-auto text-success w-100"><del class="text-danger">{{ TF::fF($offer->original_price) . "€" }}</del> <strong class="ffloat-right">{{ TF::fF($offer->discounted_price) . "€" }}*</strong> + <span class="float-right text-muted">{{ TF::fF($offer->base_price ) }}€/L</span> + </p> + <div class="mb-1 text-muted w-100"> + <span class="float-right">{{ TF::fF($offer->volume) . " Liter" }}</span><span>{{ TF::fF($offer->abv) . "%" }} Alk.</span> + </div> + <a class="u" href="{{ $offer->url }}">Jetzt bestellen</a> + <p class="text-muted text-small w-100 nnmt-10"> + Versand: {{ TF::fF($offer->shipping_costs) }}€ <span class=" float-right">Gratis ab {{ $offer->free_shipping }}</span> + <br> +<!-- + <span class=" float-right">{{ date("d.m.Y", $offer->created_at) }}</span> +--> + <span class=" float-right">* Preis vom {{ strftime("%d. %B", $offer->created_at) }}</span> + </p> + </div> + </div> + <img class="card-img-right flex-auto d-none d-md-block border-left-0 img-thumbnail" src="{{ $offer->image_url }}" alt="{{ $offer->name }}" title="{{$offer->name}} :: {{ $offer->shop }}"> + + <!-- <= sm --> + <!-- Maybe make the image a link + <a href="{{ $offer->url}}"> + </a> + --> + <img class="card-img-top flex-auto d-sm-block img-thumbnail d-md-none" src="{{ $offer->image_url }}" alt="{{ $offer->name }}" title="{{$offer->name}} :: {{ $offer->shop }}"> + <div class="card-body .d-md-none d-lg-none d-xl-none d-xs-flex flex-column align-items-start"> +<!-- + <div class="h-100 card-img-overlay"> + <p class="card-text bg-danger float-right rounded" style="color: white; font-size: 150%; padding-right: 10px; padding-left:10px; opacity: 0.9;">{{ $offer->procent}}%</p> + </div> +--> + <div class="flex-column bg-dark-opacity" > + <div class="d-inline align-items-start text-left w-100 mb-2"> + <p class="card-text bg-danger rounded off-badge text-center" title="{{$offer->name}} :: {{ $offer->shop }}"><strong>{{ $offer->procent}}%</strong> gesenkt</p> + <a class="text-dark float-right text-dotted" href="{{ $offer->shop_url }}">{{ $offer->shop }}</a> + </div> + <div class="d-block align-items-start text-left w-100 mb-2"> + <strong class="text-primary">{{ $offer->spirit_type }}</strong> + </div> + <h3 class="mb-0 d-inline-block hide-overflow h-100"> + <a class="text-dark ttext-truncate" href="#{{ $offer->name }}" title="{{$offer->name}}" >{{ $offer->name }}</a> + </h3> + + <div class="mb-1 text-muted w-100"> + <span class="float-right">{{ TF::fF($offer->volume) . " Liter" }}</span><span>{{ TF::fF($offer->abv) . "%" }} Alk.</span> + </div> + + <p class="card-text mb-auto text-success w-100"><del class="text-danger">{{ TF::fF($offer->original_price) . "€" }}</del> <strong class="ffloat-right">{{ TF::fF($offer->discounted_price) . "€" }}*</strong> + <span class="float-right text-muted">{{ TF::fF($offer->base_price ) }}€/L</span> + </p> + <strong><a href="{{ $offer->url }}" class="text-large">Jetzt bestellen</a></strong> + <p class="text-muted text-small w-100 nmt-10"> + Versand: {{ TF::fF($offer->shipping_costs) }}€ <span class=" float-right">Gratis ab {{ $offer->free_shipping }}</span> + <br> + <span class=" float-right">* Preis vom {{ strftime("%d. %B", $offer->created_at) }}</span> + </p> + </div> + </div> + </div> + </div> + +<?php + + + if ( $count % 2 == 1) { +?> + <!-- ./row --> + </div> +<?php + } + + $count++; + + } + + // schließt den div bei ungerade einträgen + if ( $count % 2 == 1) { +?> + <!-- ./row --> + </div> +<?php + } + +?> + + {{ $data->links() }} + +<?php +/* Ende Suchergebnisse */ +} +?> + +<!-- ./container --> + </div> + +@endsection + diff --git a/site/resources/views/snippets/navbar.blade.php b/site/resources/views/snippets/navbar.blade.php index 0bb2a9b..722836e 100644 --- a/site/resources/views/snippets/navbar.blade.php +++ b/site/resources/views/snippets/navbar.blade.php @@ -1,7 +1,7 @@ <header> <!-- Fixed navbar --> <nav class="navbar navbar-expand-md navbar-dark ffixed-top bg-primary nnavbar-light"> - <a class="navbar-brand" href="/">Alkobote.de</a> + <a class="navbar-brand" href="/">Angebote <br><small class="float-right font-italic navbar-small">auf Fuselkönig.de</small></a> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarCollapse" aria-controls="navbarCollapse" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> @@ -35,10 +35,19 @@ </li> </ul> --> - <form class="form-inline mt-2 mt-md-0"> - <input class="form-control mr-sm-2" type="text" placeholder="Suchen… zB Glenfiddich" aria-label="Search"> - <button class="btn btn-outline-success my-2 my-sm-0" type="submit">Suchen</button> + <form class="form-inline mt-2 mt-md-0" action="/search"> + <input class="form-control mr-sm-2" name="q" type="text" placeholder="Suchen… zB Glenfiddich" aria-label="Search"> + <button class="btn btn-outline-success my-2 my-sm-0 search-btn-bg-white" type="submit">Suchen</button> </form> +<!-- + <ul class="navbar-nav ml-2"> + <li class="nav-item {{ Request::is('misc') ? 'active' : '' }}"> + <a class="nav-link active" href="/feeds">Feeds</a> + </li> + <li class="nav-item divider"> + </li> + </ul> +--> </div> </nav> </header> diff --git a/site/resources/views/snippets/sortbuttons.blade.php b/site/resources/views/snippets/sortbuttons.blade.php index bf99649..22f7f02 100644 --- a/site/resources/views/snippets/sortbuttons.blade.php +++ b/site/resources/views/snippets/sortbuttons.blade.php @@ -8,8 +8,8 @@ Preis </button> <div class="dropdown-menu" aria-labelledby="dropdownMenuButton"> - <a class="dropdown-item" href="?sort=price&order=asc">Niedrigster Preis</a> - <a class="dropdown-item" href="?sort=price&order=desc">Höchster Preis</a> + <a class="dropdown-item" href="?sort=price&order=asc{!! Request::is('search') ? '&q=' : '' !!}{{ Request::is('search') ? $search_phrase : '' }}">Niedrigster Preis</a> + <a class="dropdown-item" href="?sort=price&order=desc{!! Request::is('search') ? '&q=' : '' !!}{{ Request::is('search') ? $search_phrase : '' }}">Höchster Preis</a> </div> </div> <div class="dropdown mr-2"> @@ -17,8 +17,8 @@ Name </button> <div class="dropdown-menu" aria-labelledby="dropdownMenuButton"> - <a class="dropdown-item" href="?sort=name&order=asc">Alphabetisch</a> - <a class="dropdown-item" href="?sort=name&order=desc">Umgekehrt</a> + <a class="dropdown-item" href="?sort=name&order=asc{!! Request::is('search') ? '&q=' : '' !!}{{ Request::is('search') ? $search_phrase : '' }}">Alphabetisch</a> + <a class="dropdown-item" href="?sort=name&order=desc{!! Request::is('search') ? '&q=' : '' !!}{{ Request::is('search') ? $search_phrase : '' }}">Umgekehrt</a> </div> </div> <div class="dropdown mr-2"> @@ -26,8 +26,8 @@ Shop </button> <div class="dropdown-menu" aria-labelledby="dropdownMenuButton"> - <a class="dropdown-item" href="?sort=shop&order=asc">Alphabetisch</a> - <a class="dropdown-item" href="?sort=shop&order=desc">Umgekehrt</a> + <a class="dropdown-item" href="?sort=shop&order=asc{!! Request::is('search') ? '&q=' : '' !!}{{ Request::is('search') ? $search_phrase : '' }}">Alphabetisch</a> + <a class="dropdown-item" href="?sort=shop&order=desc{!! Request::is('search') ? '&q=' : '' !!}{{ Request::is('search') ? $search_phrase : '' }}">Umgekehrt</a> </div> </div> </div> @@ -37,8 +37,8 @@ Preisnachlass </button> <div class="dropdown-menu" aria-labelledby="dropdownMenuButton"> - <a class="dropdown-item" href="?sort=procent&order=asc">Niedrigster Preisnachlass</a> - <a class="dropdown-item" href="?sort=procent&order=desc">Höchster Preisnachlass</a> + <a class="dropdown-item" href="?sort=procent&order=asc{!! Request::is('search') ? '&q=' : '' !!}{{ Request::is('search') ? $search_phrase : '' }}">Niedrigster Preisnachlass</a> + <a class="dropdown-item" href="?sort=procent&order=desc{!! Request::is('search') ? '&q=' : '' !!}{{ Request::is('search') ? $search_phrase : '' }}">Höchster Preisnachlass</a> </div> </div> <div class="dropdown"> @@ -46,8 +46,8 @@ Aktualität </button> <div class="dropdown-menu" aria-labelledby="dropdownMenuButton"> - <a class="dropdown-item" href="?sort=time&order=desc">Neueste zuerst</a> - <a class="dropdown-item" href="?sort=time&order=asc">Älteste zuerst</a> + <a class="dropdown-item" href="?sort=time&order=desc{!! Request::is('search') ? '&q=' : '' !!}{{ Request::is('search') ? $search_phrase : '' }}">Neueste zuerst</a> + <a class="dropdown-item" href="?sort=time&order=asc{!! Request::is('search') ? '&q=' : '' !!}{{ Request::is('search') ? $search_phrase : '' }}">Älteste zuerst</a> </div> </div> </div> diff --git a/site/routes/web.php b/site/routes/web.php index 4c64112..f8efd13 100644 --- a/site/routes/web.php +++ b/site/routes/web.php @@ -20,6 +20,8 @@ Route::get('/rum', 'OfferController@showPage')->name('rum'); Route::get('/misc', 'OfferController@showPage')->name('misc'); Route::get('/all', 'OfferController@showPage')->name('all'); +Route::get('/search', 'SearchController@showPage')->name('search'); + Route::get('/feeds', 'PageFeedController@showPage')->name('feed'); Route::get('/whisky/feed', 'FeedController@showPage')->name('whisky_feed'); |
