From 3fe0381d28d9c5844c82d908b77d3aa4b0aca737 Mon Sep 17 00:00:00 2001 From: horus Date: Fri, 7 Jan 2022 14:02:05 +0100 Subject: first release of kategorischeraperitif.de --- app/Cocktail.php | 21 ++ app/Http/Controllers/.IndexController.php.swp | Bin 0 -> 12288 bytes app/Http/Controllers/CocktailController.php | 49 +++++ app/Http/Controllers/IndexController.php | 44 +++- app/Http/Controllers/ListOfferController.php | 4 +- app/Ingredient.php | 19 ++ app/Libraries/Helper.php | 27 +++ config/database.php | 15 ++ resources/views/angebote_index.blade.php | 142 ++++++++++++ resources/views/cocktail_index.blade.php | 108 +++++++++ resources/views/cocktail_list.blade.php | 92 ++++++++ resources/views/index.blade.php | 244 ++++++++++++++++----- resources/views/layouts/base.blade.php | 15 ++ resources/views/offers.blade.php | 4 +- resources/views/search.blade.php | 2 +- resources/views/snippets/breadcrumbs.blade.php | 32 ++- resources/views/snippets/navbar.blade.php | 97 +++++--- .../views/snippets/spirittypesbuttons.blade.php | 2 +- resources/views/url | 33 +++ routes/web.php | 34 +-- 20 files changed, 861 insertions(+), 123 deletions(-) create mode 100644 app/Cocktail.php create mode 100644 app/Http/Controllers/.IndexController.php.swp create mode 100644 app/Http/Controllers/CocktailController.php create mode 100644 app/Ingredient.php create mode 100644 app/Libraries/Helper.php create mode 100644 resources/views/angebote_index.blade.php create mode 100644 resources/views/cocktail_index.blade.php create mode 100644 resources/views/cocktail_list.blade.php create mode 100644 resources/views/url diff --git a/app/Cocktail.php b/app/Cocktail.php new file mode 100644 index 0000000..31f40c1 --- /dev/null +++ b/app/Cocktail.php @@ -0,0 +1,21 @@ +hasMany('App\Ingredient'); + } +} + diff --git a/app/Http/Controllers/.IndexController.php.swp b/app/Http/Controllers/.IndexController.php.swp new file mode 100644 index 0000000..52ff3e9 Binary files /dev/null and b/app/Http/Controllers/.IndexController.php.swp differ diff --git a/app/Http/Controllers/CocktailController.php b/app/Http/Controllers/CocktailController.php new file mode 100644 index 0000000..f876dfe --- /dev/null +++ b/app/Http/Controllers/CocktailController.php @@ -0,0 +1,49 @@ +count(); + return view('cocktail_index', [ "cocktail_count" => $cocktail_count ]); + } + + public function search(Request $request) { + + $ingredients = $request->input("i"); + + $cocktails = new Cocktail; + + foreach($ingredients as $q) { + $q = Helper::escapeLike($q); + $q = "%".$q."%"; + $cocktails = $cocktails->where(function($query) use ($q){ + $query->whereHas("getIngredients", function ($query) use ($q){ + $query->where('name', 'like', $q); + }); + }); + } + + $count = $cocktails->count(); + + $search_phrase = ""; + foreach(array_filter($ingredients) as $term) { + if ( $search_phrase != "" ) + $search_phrase = $search_phrase . " und "; + $search_phrase = $search_phrase . ucwords($term); + } + $search_phrase = rtrim($search_phrase, " und "); + + return view('cocktail_list', [ "cocktails" => $cocktails, "count" => $count, "search_terms" => array_filter($ingredients), "search_phrase" => $search_phrase ]); + } +} diff --git a/app/Http/Controllers/IndexController.php b/app/Http/Controllers/IndexController.php index d6931ba..24c5615 100644 --- a/app/Http/Controllers/IndexController.php +++ b/app/Http/Controllers/IndexController.php @@ -8,18 +8,47 @@ use App\Http\Controllers\Controller; use Illuminate\Support\Facades\Cache; +use App\Cocktail; +use App\Ingredient; +use App\Libraries\Helper; + class IndexController extends Controller { /** * Shows the index page. * * @return Response */ - public function showPage(Request $request) { + public function angebote(Request $request) { - if ( Cache::has('index') ) { - return Cache::get('index'); + if ( Cache::has('angebote_index') ) { + return Cache::get('angebote_index'); } else { + $views = array("whisky", "wodka", "gin", "rum", "misc"); + + $data = $this->getAngeboteData($request); + + $count = DB::select("SELECT count(*) as count FROM all_view")[0]; + + $cached_data = view('angebote_index', ['data' => $data, 'views' => $views, 'hits' => $count])->render(); + Cache::put('angebote_index', $cached_data, 6000); // 100 minutes + + return $cached_data; + } + } + + public function index(Request $request) { + $views = array("whisky", "wodka", "gin", "rum", "misc"); + $data = $this->getAngeboteData($request); + $count = DB::select("SELECT count(*) as count FROM all_view")[0]; + + $cocktails = new Cocktail; + $cocktail_count = $cocktails->count(); + + return view('index', ['data' => $data, 'views' => $views, 'hits' => $count, 'cocktail_count' => $cocktail_count])->render(); + } + + private function getAngeboteData(Request $request) { $views = array("whisky", "wodka", "gin", "rum", "misc"); $query = ""; @@ -51,13 +80,6 @@ class IndexController extends Controller { $data = DB::select($query); - $count = DB::select("SELECT count(*) as count FROM all_view")[0]; - - $cached_data = view('index', ['data' => $data, 'views' => $views, 'hits' => $count])->render(); - - Cache::put('index', $cached_data, 6000); // 100 minutes - - return $cached_data; - } + return $data; } } diff --git a/app/Http/Controllers/ListOfferController.php b/app/Http/Controllers/ListOfferController.php index 70f0cab..52ae0a0 100644 --- a/app/Http/Controllers/ListOfferController.php +++ b/app/Http/Controllers/ListOfferController.php @@ -57,7 +57,7 @@ class ListOfferController extends Controller { /* * Database query */ - $view_name = \Request::route()->getName(); + $view_name = ltrim(\Request::route()->getName(), "angebote_"); /** * Cache output @@ -78,7 +78,7 @@ class ListOfferController extends Controller { # Only used on misc_view, all_view and search. $spirit_types = DB::select('SELECT DISTINCT spirit_type FROM ' . $view_name . '_view ' . ' ORDER BY spirit_type' ); - $rss_feed = $view_name . "/feed/"; + $rss_feed = "/angebote/" . $view_name . "/feed/"; $query_string = ""; $query_params = $request->except('page'); foreach( $query_params as $key => $value) { diff --git a/app/Ingredient.php b/app/Ingredient.php new file mode 100644 index 0000000..67ef6ad --- /dev/null +++ b/app/Ingredient.php @@ -0,0 +1,19 @@ +belongsTo('App\Cocktail'); + } +} diff --git a/app/Libraries/Helper.php b/app/Libraries/Helper.php new file mode 100644 index 0000000..1e9741e --- /dev/null +++ b/app/Libraries/Helper.php @@ -0,0 +1,27 @@ +format("Y-m-d"); + } + + public static function contains($array, $str) { + foreach($array as $item) { + if ( str_contains(strtolower($str), strtolower($item) ) ) { + return true; + } + } + return false; + } +} diff --git a/config/database.php b/config/database.php index cab5d06..7451147 100644 --- a/config/database.php +++ b/config/database.php @@ -54,6 +54,21 @@ return [ 'engine' => null, ], + 'mysql2' => [ + 'driver' => 'mysql', + 'host' => env('DB_HOST_SECOND', '127.0.0.1'), + 'port' => env('DB_PORT_SECOND', '3306'), + 'database' => env('DB_DATABASE_SECOND', 'forge'), + 'username' => env('DB_USERNAME_SECOND', 'forge'), + 'password' => env('DB_PASSWORD_SECOND', ''), + 'unix_socket' => env('DB_SOCKET_SECOND', ''), + 'charset' => 'utf8mb4', + 'collation' => 'utf8mb4_unicode_ci', + 'prefix' => '', + 'strict' => true, + 'engine' => null, + ], + 'pgsql' => [ 'driver' => 'pgsql', 'host' => env('DB_HOST', '127.0.0.1'), diff --git a/resources/views/angebote_index.blade.php b/resources/views/angebote_index.blade.php new file mode 100644 index 0000000..3507fd4 --- /dev/null +++ b/resources/views/angebote_index.blade.php @@ -0,0 +1,142 @@ +@extends('layouts.base') + +@section('header') +Angebote +@endsection + +@section('css') + +@endsection + + +@section('description') +Auf der Suche nach einem Gin, Whisky oder vielleicht einem guten Champagner? Lass dich inspirieren und schaue, was momentan im Angebot ist. Stöbere unter {{$hits->count }} verschiedenen Sonderangeboten. +@endsection + +@section('content') +
+
+ +
+ +
+ + +@if ( empty($data) ) +
+

Keine Angebote

+ Momentan liegen keine Angebote vor. Probieren Sie es später noch einmal. +
+@else + + @foreach( $data as $offer) +spirit_type), $views) ) { + $offer->url = "misc"; + $offer->angebotsname = "weiteren Angeboten"; + $offer->linktext = "Weitere günstige Angebote entdecken und bis zu " . $offer->procent . "% sparen."; + $offer->spirit_type = "Verschiedenes"; + } else { + $offer->url = lcfirst($offer->url) ; + $offer->angebotsname = "den " . $offer->angebotsname . "-Angeboten"; + $offer->linktext = "Finde den günstigsten ". $offer->spirit_type ." und spare bis zu " . $offer->procent . "%."; + } +?> + @if ( $loop->index % 2 == 0) +
+ @endif + + + + @if ( $loop->index % 2 == 1 ) +
+ @endif + + @if ( $loop->last && ($loop->index % 2 == 0) ) +
+ @endif + + + @endforeach + +@endif + +

Was passiert hier?

+

+Auf dieser Webseite kuratiere ich die aktuellen Sonderangebote der wichtigsten Spirituosenhändler. Neue Angebote werden automatisch erkannt und hinzugefügt; nicht mehr gültige Angebote werden entfernt. +

+

Wie häufig werden die Angebote aktualisiert?

+

+Mehrmals täglich. +

+

Gibt es Push-Nachrichten?

+

+Noch nicht. Momentan ist die einzige Möglichkeit den Angeboten via RSS-Feed zu folgen. Mitteilungen per Push, E-Mail oder Twitter sind jedoch geplant. +
+Wenn du Interesse an einem Twitter-Feed, Newsletter oder ähnliches hast, schreib mir doch eine kurze, formlose Mail. Je mehr Leute mir schreiben, desto eher kann ich die Wünsche auch umsetzen. +

+

+Anregungen? Kritik? Wünsche? Einfach mir eine Mail schreiben. +

+ +
+@endsection diff --git a/resources/views/cocktail_index.blade.php b/resources/views/cocktail_index.blade.php new file mode 100644 index 0000000..16156e3 --- /dev/null +++ b/resources/views/cocktail_index.blade.php @@ -0,0 +1,108 @@ +@extends('layouts.base') + +@section('header') +Cocktailsuche +@endsection + +@section('css') + + + +@endsection + +@section('content') +@include('snippets.breadcrumbs') + +@if ( "cocktail_index" == Request::route()->getName() ) + +
+ + +
+ @endif +@endsection diff --git a/resources/views/cocktail_list.blade.php b/resources/views/cocktail_list.blade.php new file mode 100644 index 0000000..7165b9f --- /dev/null +++ b/resources/views/cocktail_list.blade.php @@ -0,0 +1,92 @@ +@extends('layouts.base') + +@section('header') +Du hast nach {{ implode(" und ", $search_terms) }} gesucht: {{$count}} Cocktails gefunden +@endsection + +@section('styles') +@endsection + +@section('content') +@include('snippets.breadcrumbs') + +
+ +
+ +
+

+ {{ $count }} Treffer +

+
+

+ Du hast nach + + @foreach( $search_terms as $term ) + @if ( !$loop->first ) + und + @endif + {{ $term }} + @endforeach + + gesucht. +

+

+ Zurück zur Suche +

+
+
+ +
+ @foreach( $cocktails->get() as $cocktail) +
+

+ + {{ $cocktail->name}} + +

+
+ @if ( ! is_null($cocktail->getIngredients()) ) +

+ @foreach ( $cocktail->getIngredients()->get() as $ing) + @php + if ( \App\Libraries\Helper::contains($search_terms, $ing->name) ) { + echo ""; + @endphp + {{ $ing->name }} + @php + echo ""; + } else { + @endphp + {{ $ing->name }} + @php + } + @endphp +
+ @endforeach +

+ + @endif + +
+
+ +
+ @endforeach + + @if ($count != 0) +
+ +
+ @endif + +appends(Request::input())->links() }} + */ ?> + +
+@endsection diff --git a/resources/views/index.blade.php b/resources/views/index.blade.php index 5eda16c..7104e7b 100644 --- a/resources/views/index.blade.php +++ b/resources/views/index.blade.php @@ -1,56 +1,121 @@ @extends('layouts.base') @section('header') -Angebote +Startseite @endsection @section('css') -@endsection - -@section('description') -Auf der Suche nach einem Gin, Whisky oder vielleicht einem guten Champagner? Lass dich inspirieren und schaue, was momentan im Angebot ist. Stöbere unter {{$hits->count }} verschiedenen Sonderangeboten. @endsection @section('content')
-
- -
-
+
+ +
+ +
+ + + + + + + + + + + -

Was passiert hier?

-

-Auf dieser Webseite kuratiere ich die aktuellen Sonderangebote der wichtigsten Spirituosenhändler. Neue Angebote werden automatisch erkannt und hinzugefügt; nicht mehr gültige Angebote werden entfernt. -

-

Wie häufig werden die Angebote aktualisiert?

-

-Mehrmals täglich. -

-

Gibt es Push-Nachrichten?

-

-Noch nicht. Momentan ist die einzige Möglichkeit den Angeboten via RSS-Feed zu folgen. Mitteilungen per Push, E-Mail oder Twitter sind jedoch geplant. -
-Wenn du Interesse an einem Twitter-Feed, Newsletter oder ähnliches hast, schreib mir doch eine kurze, formlose Mail. Je mehr Leute mir schreiben, desto eher kann ich die Wünsche auch umsetzen. -

-

-Anregungen? Kritik? Wünsche? Einfach mir eine Mail schreiben. -

-
-
+ + @endsection diff --git a/resources/views/layouts/base.blade.php b/resources/views/layouts/base.blade.php index 15e905e..8656393 100644 --- a/resources/views/layouts/base.blade.php +++ b/resources/views/layouts/base.blade.php @@ -27,12 +27,27 @@ .main-header { background-image: url("/img/angebote_background.jpg");"); } + .ttaxonomy-card { + box-shadow: inherit !important; + } @yield('feed') @yield('css') + + diff --git a/resources/views/offers.blade.php b/resources/views/offers.blade.php index ea5fac4..479d5dd 100644 --- a/resources/views/offers.blade.php +++ b/resources/views/offers.blade.php @@ -19,11 +19,11 @@

 
- {{ ucwords($offer->spirit_type) }} + {{ ucwords($offer->spirit_type) }}
Verkauft von
- {{ ucwords($offer->shop ) }} + {{ ucwords($offer->shop ) }}

diff --git a/resources/views/search.blade.php b/resources/views/search.blade.php index 231dd16..0481726 100644 --- a/resources/views/search.blade.php +++ b/resources/views/search.blade.php @@ -24,7 +24,7 @@ Finde den besten Deal Leider hat Ihre Suche nach {{ ucwords($search_phrase) }} keine Ergebnisse ergeben. Bitte versuchen sie es erneut mit einem anderen Begriff.

-
+
diff --git a/resources/views/snippets/breadcrumbs.blade.php b/resources/views/snippets/breadcrumbs.blade.php index 736982e..5149a93 100644 --- a/resources/views/snippets/breadcrumbs.blade.php +++ b/resources/views/snippets/breadcrumbs.blade.php @@ -1,6 +1,6 @@ @isset($spirit_type) @endisset @isset($search_phrase) @@ -8,37 +8,56 @@ $breadcrumb = "Suche nach " . $search_phrase; ?> @endisset + +@php +if ( ! isset($breadcrumb) && str_contains(Request::route()->getName(), "cocktail") ) + $breadcrumb = "Cocktails" +@endphp +
diff --git a/resources/views/snippets/navbar.blade.php b/resources/views/snippets/navbar.blade.php index a423a53..8172eae 100644 --- a/resources/views/snippets/navbar.blade.php +++ b/resources/views/snippets/navbar.blade.php @@ -1,53 +1,87 @@ + + +
-

-

Finde den besten Deal in Sachen Spirituosen

+

+@php +if ( str_contains(Request::route()->getName(), 'angebot') ){ +@endphp +

+@php +} else if ( str_contains(Request::route()->getName(), 'cocktail') ){ +@endphp + +@php +} else { +@endphp + +@php +} +@endphp + +

+@php +if ( str_contains(Request::route()->getName(), 'angebot') ){ +@endphp +Finde den besten Deal in Sachen Spirituosen +@php +} else if ( str_contains(Request::route()->getName(), 'cocktail') ){ +@endphp + Inoffizielle Suchmaschine für schlimmerdurst.net +@php +} else { +@endphp + Essen macht satt, trinken macht glücklich. +@php +} +@endphp +

- +@php +if ( str_contains(Request::route()->getName(), 'angebot') ){ +@endphp +
+@php +} +@endphp
diff --git a/resources/views/snippets/spirittypesbuttons.blade.php b/resources/views/snippets/spirittypesbuttons.blade.php index 1f2cf5e..c5942f5 100644 --- a/resources/views/snippets/spirittypesbuttons.blade.php +++ b/resources/views/snippets/spirittypesbuttons.blade.php @@ -5,7 +5,7 @@ if ( isset($spirit_types) && 0 < count($spirit_types) ) { - {{ $o->spirit_type }} + {{ $o->spirit_type }} diff --git a/resources/views/url b/resources/views/url new file mode 100644 index 0000000..1af1c05 --- /dev/null +++ b/resources/views/url @@ -0,0 +1,33 @@ +./offers.blade.php: {{ ucwords($offer->spirit_type) }} {{ $offer->shop }} +./offers.blade.php:

{{ $offer->procent}} %

+./offers.blade.php: +./offers.blade.php: {{ ucwords($offer->spirit_type) }} +./offers.blade.php: {{ ucwords($offer->shop ) }} +./offers.blade.php:

{{ $offer->name }}

+./offers.blade.php: Neuer Preis: {{ TF::fF($offer->discounted_price) }} € +./offers.blade.php: @if ( 1 <= $offer->volume || 0.7 > $offer->volume ) +./offers.blade.php: ({{ TF::fF($offer->volume )}} Liter) +./offers.blade.php: statt {{ TF::fF($offer->original_price) }} € +./offers.blade.php: {{ TF::fF($offer->base_price ) }} € / Liter +./offers.blade.php: Alkohol: {{ TF::fF($offer->abv) }} % +./offers.blade.php: Volumen: {{ TF::fF($offer->volume) }} Liter +./offers.blade.php: Versand: {{ TF::fF($offer->shipping_costs) }} € +./offers.blade.php: Zum Shop +./offers.blade.php: Preis vom {{ strftime("%d. %B %Y", $offer->created_at) }} +./angebote_index.blade.php: if ( !in_array(strtolower($offer->spirit_type), $views) ) { +./angebote_index.blade.php: $offer->url = "misc"; +./angebote_index.blade.php: $offer->angebotsname = "weiteren Angeboten"; +./angebote_index.blade.php: $offer->linktext = "Weitere günstige Angebote entdecken und bis zu " . $offer->procent . "% sparen."; +./angebote_index.blade.php: $offer->spirit_type = "Verschiedenes"; +./angebote_index.blade.php: $offer->url = lcfirst($offer->url) ; +./angebote_index.blade.php: $offer->angebotsname = "den " . $offer->angebotsname . "-Angeboten"; +./angebote_index.blade.php: $offer->linktext = "Finde den günstigsten ". $offer->spirit_type ." und spare bis zu " . $offer->procent . "%."; +./angebote_index.blade.php:
+./angebote_index.blade.php:
+./angebote_index.blade.php:

{{ $offer->procent}} %

+./angebote_index.blade.php: +./angebote_index.blade.php: +./angebote_index.blade.php: {{ ucfirst($offer->spirit_type) }} +./angebote_index.blade.php: +./angebote_index.blade.php:

Hier geht es zu {{ $offer->angebotsname }}

+./angebote_index.blade.php:

{{ $offer->linktext }}

diff --git a/routes/web.php b/routes/web.php index d0d7211..f61e10e 100644 --- a/routes/web.php +++ b/routes/web.php @@ -11,23 +11,27 @@ | */ -Route::get('/', 'IndexController@showPage')->name('index'); +Route::get('/cocktails', 'CocktailController@index')->name('cocktail_index'); +Route::get('/cocktails/search', 'CocktailController@search')->name('cocktail_search'); -Route::get('/whisky', 'ListOfferController@showPage')->name('whisky'); -Route::get('/wodka', 'ListOfferController@showPage')->name('wodka'); -Route::get('/gin', 'ListOfferController@showPage')->name('gin'); -Route::get('/rum', 'ListOfferController@showPage')->name('rum'); -Route::get('/misc', 'ListOfferController@showPage')->name('misc'); -Route::get('/all', 'ListOfferController@showPage')->name('all'); +Route::get('/angebote', 'IndexController@angebote')->name('angebote_index'); +Route::get('/', 'IndexController@index')->name('index'); -Route::get('/search', 'SearchController@showPage')->name('search'); +Route::get('/angebote/whisky', 'ListOfferController@showPage')->name('angebote_whisky'); +Route::get('/angebote/wodka', 'ListOfferController@showPage')->name('angebote_wodka'); +Route::get('/angebote/gin', 'ListOfferController@showPage')->name('angebote_gin'); +Route::get('/angebote/rum', 'ListOfferController@showPage')->name('angebote_rum'); +Route::get('/angebote/misc', 'ListOfferController@showPage')->name('angebote_misc'); +Route::get('/angebote/all', 'ListOfferController@showPage')->name('angebote_all'); -Route::get('/whisky/feed', 'FeedController@showPage')->name('whisky_feed'); -Route::get('/wodka/feed', 'FeedController@showPage')->name('wodka_feed'); -Route::get('/gin/feed', 'FeedController@showPage')->name('gin_feed'); -Route::get('/rum/feed', 'FeedController@showPage')->name('rum_feed'); -Route::get('/misc/feed', 'FeedController@showPage')->name('misc_feed'); -Route::get('/all/feed', 'FeedController@showPage')->name('all_feed'); -Route::get('/search/feed', 'FeedController@showPage')->name('search_feed'); +Route::get('/angebote/search', 'SearchController@showPage')->name('angebote_search'); + +Route::get('/angebote/whisky/feed', 'FeedController@showPage')->name('whisky_feed'); +Route::get('/angebote/wodka/feed', 'FeedController@showPage')->name('wodka_feed'); +Route::get('/angebote/gin/feed', 'FeedController@showPage')->name('gin_feed'); +Route::get('/angebote/rum/feed', 'FeedController@showPage')->name('rum_feed'); +Route::get('/angebote/misc/feed', 'FeedController@showPage')->name('misc_feed'); +Route::get('/angebote/all/feed', 'FeedController@showPage')->name('all_feed'); +Route::get('/angebote/search/feed', 'FeedController@showPage')->name('search_feed'); Route::get('/_/api/lookup', 'LookupController@showPage')->name('lookup'); -- cgit v1.2.3