summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--site/app/Http/Controllers/SearchController.php80
-rw-r--r--site/public/css/colors.css10
-rw-r--r--site/public/css/custom.css11
-rw-r--r--site/resources/views/layouts/base.blade.php2
-rw-r--r--site/resources/views/search.blade.php204
-rw-r--r--site/resources/views/snippets/navbar.blade.php17
-rw-r--r--site/resources/views/snippets/sortbuttons.blade.php20
-rw-r--r--site/routes/web.php2
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 &nbsp;&nbsp;&nbsp;&nbsp;<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');