diff options
| author | horus | 2018-02-13 14:28:40 +0100 |
|---|---|---|
| committer | horus | 2018-02-13 14:28:40 +0100 |
| commit | ef460c65ab5e6e3bfdb27ef596d00fc93314eb72 (patch) | |
| tree | 9d6f969d2d554af07568808f5977e346176b4f20 | |
| parent | 62f478feda37fb116ccede1481f80b1bea88fc04 (diff) | |
| download | alkobote-ef460c65ab5e6e3bfdb27ef596d00fc93314eb72.tar.gz | |
Adds RSS-Feeds.
| -rw-r--r-- | site/app/Http/Controllers/FeedController.php | 89 | ||||
| -rw-r--r-- | site/app/Http/Controllers/PageFeedController.php | 34 | ||||
| -rw-r--r-- | site/composer.json | 3 | ||||
| -rw-r--r-- | site/composer.lock | 62 | ||||
| -rw-r--r-- | site/public/css/custom.css | 3 | ||||
| -rw-r--r-- | site/resources/views/feeds.blade.php | 107 | ||||
| -rw-r--r-- | site/resources/views/layouts/base.blade.php | 4 | ||||
| -rw-r--r-- | site/resources/views/offer.blade.php | 4 | ||||
| -rw-r--r-- | site/resources/views/snippets/footer.blade.php | 15 | ||||
| -rw-r--r-- | site/resources/views/snippets/navbar.blade.php | 9 | ||||
| -rw-r--r-- | site/routes/web.php | 10 |
11 files changed, 336 insertions, 4 deletions
diff --git a/site/app/Http/Controllers/FeedController.php b/site/app/Http/Controllers/FeedController.php new file mode 100644 index 0000000..7ac39c1 --- /dev/null +++ b/site/app/Http/Controllers/FeedController.php @@ -0,0 +1,89 @@ +<?php +namespace App\Http\Controllers; +use Illuminate\Http\Request; +use App\Helpers\CryptoHelper; + +use Illuminate\Support\Facades\DB; +use App\Http\Controllers\Controller; + +use Cookie; +use Carbon; +use Illuminate\Support\Facades\Input; + +class FeedController extends Controller { + /** + * Shows the index page. + * + * @return Response + */ + public function showPage(Request $request) { + + /* + * Sorting + */ + $sort_by = Input::get("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; + } + + $order_by = $request->input("order"); + if ( "desc" != $order_by ) { + $order_by = "asc"; + } + + /* + * Database query + */ + $view_name = str_replace("_feed", "", \Request::route()->getName()); + #$data = DB::table($view_name . '_view')->orderBy('created_at', 'DESC')->limit(100)->get(); + $data = DB::table($view_name . '_view')->orderBy($sort_by, $order_by)->limit(20)->get(); + + /* + * For strftime(). + */ + setlocale(LC_TIME, 'de_DE.utf8'); + + $feed = \App::make("feed"); + + $feed->title = "Sonderangebote"; + $feed->description = 'Finde immer die günstigsten Angebote im Bereich Spirituosen. Täglich neue Schnäppchen.'; + $feed->logo = 'https://fuselkoenig.de/favicon.ico'; + $feed->link = url('feed'); + $feed->setDateFormat('timestamp'); // 'datetime', 'timestamp' or 'carbon' + $feed->pubdate = $data[0]->created_at; + $feed->lang = 'de'; + $feed->setShortening(true); // true or false + $feed->setTextLimit(5000); // maximum length of description text + + foreach ( $data as $offer ) { + $desc = '<p><img src="'.$offer->image_url.'"></p><p><strong>'.$offer->spirit_type.'</strong><br>Statt ' . \TF::fF($offer->original_price) . '€ nur noch ' . \TF::fF($offer->discounted_price) . "€ (".$offer->procent."% Rabatt)."; + $feed->add($offer->name, $offer->shop, $offer->url, $offer->created_at, $desc, $offer->name); + } + + return $feed->render('atom'); + + } +} diff --git a/site/app/Http/Controllers/PageFeedController.php b/site/app/Http/Controllers/PageFeedController.php new file mode 100644 index 0000000..e29c8ca --- /dev/null +++ b/site/app/Http/Controllers/PageFeedController.php @@ -0,0 +1,34 @@ +<?php +namespace App\Http\Controllers; +use Illuminate\Http\Request; +use App\Helpers\CryptoHelper; + +use Illuminate\Support\Facades\DB; +use App\Http\Controllers\Controller; + +class PageFeedController extends Controller { + /** + * Shows the index page. + * + * @return Response + */ + public function showPage(Request $request) { + + + $views = array("whisky", "wodka", "gin", "rum", "misc", "all"); + $query = ""; + + foreach($views as $view) { + if ($query != "") { + $query .= " UNION "; + } + $query .= "(SELECT name, image_url, spirit_type, spirit_type AS url, spirit_type AS feedname, '' AS linktext, created_at FROM ". $view ."_view WHERE original_price > 19.98 ORDER BY created_at DESC LIMIT 1)"; + } + # todo: schlägt manchmal fehl + $query .= " UNION (SELECT name, image_url, spirit_type, spirit_type AS url, spirit_type AS feedname, '' AS linktext, created_at FROM ". $view ."_view WHERE original_price > 19.98 AND (procent < (SELECT MAX(procent) FROM all_view)) ORDER BY procent LIMIT 1)"; + + $data = DB::select($query); + + return view('feeds', ['data' => $data, 'views' => $views]); + } +} diff --git a/site/composer.json b/site/composer.json index 27695dc..39587c4 100644 --- a/site/composer.json +++ b/site/composer.json @@ -8,7 +8,8 @@ "php": ">=7.1.3", "fideloper/proxy": "~4.0", "laravel/framework": "5.6.*", - "laravel/tinker": "~1.0" + "laravel/tinker": "~1.0", + "roumen/feed": "^2.12" }, "require-dev": { "filp/whoops": "~2.0", diff --git a/site/composer.lock b/site/composer.lock index 6116aa7..c48b766 100644 --- a/site/composer.lock +++ b/site/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "content-hash": "bf3c948f982e4ea5ec2fcaef27270719", + "content-hash": "1ff6dde5a4092d06ccfcce8fc2b7d989", "packages": [ { "name": "dnoegel/php-xdg-base-dir", @@ -1264,6 +1264,66 @@ "time": "2018-01-20T00:28:24+00:00" }, { + "name": "roumen/feed", + "version": "v2.12.1", + "source": { + "type": "git", + "url": "https://github.com/Laravelium/laravel-feed.git", + "reference": "1fd410a282b489c94ebc6b993f161a9447fda172" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Laravelium/laravel-feed/zipball/1fd410a282b489c94ebc6b993f161a9447fda172", + "reference": "1fd410a282b489c94ebc6b993f161a9447fda172", + "shasum": "" + }, + "require": { + "illuminate/support": "5.6.*", + "php": ">=7.1.3" + }, + "require-dev": { + "phpunit/phpunit": "~7.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Roumen\\Feed\\FeedServiceProvider" + ], + "aliases": { + "Feed": "Roumen\\Feed\\Feed" + } + } + }, + "autoload": { + "psr-0": { + "Roumen\\Feed": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roumen Damianoff", + "email": "roumen@damianoff.com", + "homepage": "https://damianoff.com", + "role": "Developer" + } + ], + "description": "A simple feed generator for Laravel.", + "homepage": "https://laravelium.com", + "keywords": [ + "atom", + "feed", + "generator", + "laravel", + "rss" + ], + "time": "2018-02-07T20:50:19+00:00" + }, + { "name": "swiftmailer/swiftmailer", "version": "v6.0.2", "source": { diff --git a/site/public/css/custom.css b/site/public/css/custom.css index 742b363..3fe47d0 100644 --- a/site/public/css/custom.css +++ b/site/public/css/custom.css @@ -107,3 +107,6 @@ footer { padding-right: 5px; opacity: 0.9; } +.footer-link { + padding-left: 0px !important; +} diff --git a/site/resources/views/feeds.blade.php b/site/resources/views/feeds.blade.php new file mode 100644 index 0000000..8914967 --- /dev/null +++ b/site/resources/views/feeds.blade.php @@ -0,0 +1,107 @@ +@extends('layouts.base') + +@section('content') + <div class="container"> + <div class="jumbotron p-3 p-md-5 text-white rounded bg-dark"> + <div class="col-md-6 px-0"> + <h1 class="display-4 font-italic">Angebote als RSS Feeds</h1> + <p class="lead my-3">Finde immer die günstigsten Angebote im Bereich Spirituosen, praktischerweise als RSS-Feed direkt aufs Handy.</p> + <p class="lead mb-0"><a href="/" class="text-white font-weight-bold">Zurück zur Übersicht...</a></p> + </div> + </div> + + +<?php + +$count = 0; + +foreach( $data as $offer) { + + + if ( $count == 5 ) { + // last card + $offer->feedname = "Feed aller Angebote"; + $offer->linktext = "Zum Feed aller Angebote."; + $offer->url = "all"; + $offer->spirit_type = "Alle Angebote"; + } else if ( !in_array(strtolower($offer->spirit_type), $views) ) { + // card of misc offers + $offer->url = "misc"; + $offer->feedname = "Feed der weiteren Angebote"; + $offer->linktext = "Zum Feed der weiteren Angebote."; + $offer->spirit_type = "Verschiedenes"; + } else { + // main cards + $offer->url = lcfirst($offer->url) ; + $offer->feedname = $offer->feedname . "-Feed"; + $offer->linktext = "Zum ". $offer->spirit_type ." Feed"; + } + $offer->url = $offer->url . "/feed/"; + + if ( $count % 2 == 0) { +?> + <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"> + <img class="card-img-top flex-auto d-xs-block d-sm-block img-thumbnail d-md-none" src="{{ $offer->image_url }}" alt="{{ $offer->name }}" title="{{ $offer->name }}"> + <div class="card-body d-flex flex-column align-items-start"> + <div class="d-inline align-items-start text-left w-100 mb-2"> + <strong class="text-dark">{{ $offer->spirit_type }}</strong> + </div> + <h3 class="mb-0 d-inline-block h-100"> + <a class="text-dark" href="/{{ $offer->url }}"> + Hier geht es zum {{ $offer->feedname }} + </a> + </h3> + + <a class="w-100 u" href="/{{ $offer->url }}" style="word-wrap: none;">{{ $offer->linktext }}</a> + </div> + <img data-href="/{{ $offer->url }}" class="card-img-right border-left-0 img-thumbnail d-none d-xs-none d-md-block float-right js-link-replacement" src="{{ $offer->image_url }}" alt="{{ $offer->name }}" title="{{ $offer->name }}"> + </div> +</div> + +<?php + + + if ( $count % 2 == 1) { +?> + </div> +<?php + } + + $count++; + +} + +// schließt den row div wieder bei ungerade anzahl +if ( $count % 2 == 1) { +?> + </div> +<?php +} +?> + + </div> + +@endsection + + +@section('scripts') +<script> +$(".js-link-replacement").hover(function(){ + $(this).css( 'cursor', 'pointer' ); +}, +function(){ + $(this).css( 'cursor', 'inherit'); +}); + +$(".js-link-replacement").click(function(){ + window.location.href = $(this).data("href"); +}); +</script> +@endsection diff --git a/site/resources/views/layouts/base.blade.php b/site/resources/views/layouts/base.blade.php index 13d35dc..4ebaff6 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>Alkobote</title> + <title>Angebote | Fuselkoenig.de</title> <!-- <link href="/css/bootstrap.css" rel="stylesheet"> @@ -18,6 +18,8 @@ <link href="/css/custom.css" rel="stylesheet"> <link href="/css/colors.css" rel="stylesheet"> + + @yield('feed') @yield('css') </head> diff --git a/site/resources/views/offer.blade.php b/site/resources/views/offer.blade.php index 82b109c..387949f 100644 --- a/site/resources/views/offer.blade.php +++ b/site/resources/views/offer.blade.php @@ -1,5 +1,9 @@ @extends('layouts.base') +@section('feed') + {!! Feed::link(url($spirit_type . '/feed'), 'atom', 'Feed von ' . $spirit_type, 'de') !!} +@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"> diff --git a/site/resources/views/snippets/footer.blade.php b/site/resources/views/snippets/footer.blade.php index c0365a4..1d52914 100644 --- a/site/resources/views/snippets/footer.blade.php +++ b/site/resources/views/snippets/footer.blade.php @@ -5,7 +5,20 @@ <div class="card-body"> <h4>Links</h4> - <a href="#/impressum">Impressum</a> + + <ul class="list-group"> + <li class="list-group-item footer-link"> + <a href="/feeds/">Feeds</a> + </li> + <li class="list-group-item footer-link"> + <a href="https://www.fuselkoenig.de//">Blog</a> + </li> + <li class="list-group-item footer-link"> + <a href="https://www.fuselkoenig.de/impressum">Impressum</a> + </li> + <li class="list-group-item footer-link"> + <a href="https://www.fuselkoenig.de/kontakt">Kontakt</a> + </li> </div> </div> <div class="col ffooter-col"> diff --git a/site/resources/views/snippets/navbar.blade.php b/site/resources/views/snippets/navbar.blade.php index 51387da..0bb2a9b 100644 --- a/site/resources/views/snippets/navbar.blade.php +++ b/site/resources/views/snippets/navbar.blade.php @@ -26,6 +26,15 @@ <a class="nav-link" href="/misc">Verschiedenes {!! Request::is('misc') ? ' <span class="sr-only">(current)</span>' : ''!!}</a> </li> </ul> +<!-- + <ul class="navbar-nav mr-2"> + <li class="nav-item {{ Request::is('misc') ? 'active' : '' }}"> + <a class="nav-link" href="/feeds">Feeds {!! Request::is('feeds') ? ' <span class="sr-only">(current)</span>' : ''!!}</a> + </li> + <li class="nav-item divider"> + </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> diff --git a/site/routes/web.php b/site/routes/web.php index 65a1237..4c64112 100644 --- a/site/routes/web.php +++ b/site/routes/web.php @@ -18,6 +18,16 @@ Route::get('/wodka', 'OfferController@showPage')->name('wodka'); Route::get('/gin', 'OfferController@showPage')->name('gin'); Route::get('/rum', 'OfferController@showPage')->name('rum'); Route::get('/misc', 'OfferController@showPage')->name('misc'); +Route::get('/all', 'OfferController@showPage')->name('all'); + +Route::get('/feeds', 'PageFeedController@showPage')->name('feed'); + +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('/welcome', function () { return view('welcome'); |
