Cookiebot / Pixel / Kategorien erweitern

This commit is contained in:
Kevin Adametz 2021-04-29 16:36:58 +02:00
parent 36872100c6
commit 7d1ee844eb
28 changed files with 464 additions and 246 deletions

View file

@ -5,7 +5,7 @@ namespace App\Http\Controllers;
use App\Models\Category;
use App\Models\IqImage;
use App\Models\ProductCategory;
use\Request;
use Request;
class CategoryController extends Controller
@ -21,7 +21,7 @@ class CategoryController extends Controller
{
$data = [
'values' => Category::all(),
'values' => Category::orderBy('pos', 'DESC')->get(),
];
return view('admin.category.index', $data);
}
@ -46,59 +46,93 @@ class CategoryController extends Controller
{
$data = Request::all();
$data['active'] = isset($data['active']) ? true : false;
$data['parent_id'] = isset($data['parent_id']) ? $data['parent_id'] : null;
if($data['id'] == "new"){
$model = Category::create($data);
}else{
$model = Category::find($data['id']);
$model->fill($data)->save();
if($data['action'] === 'save-product_category'){
if($data['id'] === 'new'){
$ProductCategory = ProductCategory::create([
'pos' => $data['pos'],
'product_id' => $data['product_id'],
'category_id' => $data['category_id'],
]);
\Session()->flash('alert-save', '1');
return redirect(route('admin_product_category_edit', [$ProductCategory->category_id]));
}else{
$ProductCategory = ProductCategory::findOrFail($data['id']);
if($ProductCategory->category_id != $data['category_id']){
abort(404);
}
$ProductCategory->pos = $data['pos'];
$ProductCategory->product_id = $data['product_id'];
$ProductCategory->save();
\Session()->flash('alert-save', '1');
return redirect(route('admin_product_category_edit', [$ProductCategory->category_id]));
}
}
$trans = [];
if(!empty($data['trans_name'])){
foreach ($data['trans_name'] as $lang => $value){
if($value && $value != null){
$trans[$lang] = $value;
if($data['action'] === 'save-form'){
$data['active'] = isset($data['active']) ? true : false;
$data['parent_id'] = isset($data['parent_id']) ? $data['parent_id'] : null;
if($data['id'] == "new"){
$model = Category::create($data);
}else{
$model = Category::find($data['id']);
$model->fill($data)->save();
}
$trans = [];
if(!empty($data['trans_name'])){
foreach ($data['trans_name'] as $lang => $value){
if($value && $value != null){
$trans[$lang] = $value;
}
}
}
}
$model->trans_name = $trans;
$model->save();
$trans = [];
if(!empty($data['trans_headline'])){
foreach ($data['trans_headline'] as $lang => $value){
if($value && $value != null){
$trans[$lang] = $value;
$model->trans_name = $trans;
$model->save();
$trans = [];
if(!empty($data['trans_headline'])){
foreach ($data['trans_headline'] as $lang => $value){
if($value && $value != null){
$trans[$lang] = $value;
}
}
}
$model->trans_headline = $trans;
$model->save();
\Session()->flash('alert-save', '1');
return redirect(route('admin_product_categories'));
}
$model->trans_headline = $trans;
$model->save();
\Session()->flash('alert-save', '1');
return redirect(route('admin_product_categories'));
}
public function delete($id){
public function delete($do, $id){
if(ProductCategory::where('category_id', $id)->count()){
\Session()->flash('alert-error', 'Eintrag wird als Produkt-Kategorie verwendet');
if($do === 'product_category'){
$model = ProductCategory::findOrFail($id);
$category = $model->category;
$model->delete();
\Session()->flash('alert-success', 'Eintrag gelöscht');
return redirect(route('admin_product_category_edit', [$category->id]));
}
if($do === 'category'){
if(ProductCategory::where('category_id', $id)->count()){
\Session()->flash('alert-error', 'Eintrag hat noch Produkte, erst löschen');
return redirect(route('admin_product_categories'));
}
if(Category::where('parent_id', $id)->count()){
\Session()->flash('alert-error', 'Eintrag wird als Haup-Kategorie verwendet');
return redirect(route('admin_product_categories'));
}
$model = Category::findOrFail($id);
$model->delete();
\Session()->flash('alert-success', 'Eintrag gelöscht');
return redirect(route('admin_product_categories'));
}
if(Category::where('parent_id', $id)->count()){
\Session()->flash('alert-error', 'Eintrag wird als Haup-Kategorie verwendet');
return redirect(route('admin_product_categories'));
}
$model = Category::findOrFail($id);
$model->delete();
\Session()->flash('alert-success', 'Eintrag gelöscht');
return redirect(route('admin_product_categories'));
}
// Upload FILE -----------------------------------------------------------------------------------------------------------------------

View file

@ -37,6 +37,7 @@ class HomeController extends Controller
if(!Auth::check()){
return redirect('login');
}
$data = [
'user' => Auth::user(),
'now' => Carbon::now(),
@ -49,12 +50,12 @@ class HomeController extends Controller
$data = Request::get('data');
$target = Request::get('target');
$response = "";
if($data === "data_protection"){
$data = [
'modal' => true,
'user_shop' => Util::getUserShop(),
'user_shop' => true,
'isMivitaShop' => false,
];
$response = view('legal.data_protect_de', $data)->render();
}
@ -133,6 +134,7 @@ class HomeController extends Controller
$data = [
'modal' => false,
'user_shop' => Util::getUserShop(),
'isMivitaShop' => Util::isMivitaShop(),
];
return view('legal.data_protected', $data);
}

View file

@ -48,7 +48,6 @@ class ProductController extends Controller
}else{
$model = Product::findOrFail($id);
}
$country_for_prices = Country::where('own_eur', '=', true)->orWhere('currency', '=', true)->get();
$data = [
'product' => $model,
@ -59,7 +58,6 @@ class ProductController extends Controller
public function store()
{
$data = Request::all();
$rules = array(

View file

@ -7,6 +7,7 @@ use App\Http\Controllers\Controller;
use App\Models\Category;
use App\Models\IqSite;
use App\Models\Product;
use App\Models\ProductCategory;
use App\Services\Util;
class SiteController extends Controller
@ -41,7 +42,6 @@ class SiteController extends Controller
}
public function site($site, $subsite = false, $product_slug = false)
{
$subsite = trim($subsite, '/');
$product_slug = trim($product_slug, '/');
if($product_slug){
@ -71,13 +71,18 @@ class SiteController extends Controller
$headline_image = $category->iq_image;
}
$product_categories = ProductCategory::where('category_id', $category->id)->whereHas('product', function ($query) use ($category) {
$query->where('active', true)->where('show_at', '<=', 1);
})->orderBy('pos', 'DESC')->get();
$data = [
'user_shop' => Util::getUserShop(),
'subsite' => $subsite,
'categories' => Category::where('active', true)->orderBy('pos', 'ASC')->get(),
'products' => Product::whereHas('categories', function ($query) use ($category) {
$query->where('category_id', '=', $category->id);
})->where('active', true)->where('show_at', '<=', 1)->orderBy('pos', 'DESC')->get(),
'categories' => Category::where('active', true)->orderBy('pos', 'DESC')->get(),
'products' => false,
'product_categories' => $product_categories,
'p_count' => Product::where('active', true)->where('show_at', '<=', 1)->count(),
'headline' => $category->getLang('headline'),
'headline_image' => $headline_image,
@ -89,8 +94,9 @@ class SiteController extends Controller
$data = [
'user_shop' => Util::getUserShop(),
'subsite' => 'alle-produkte',
'categories' => Category::where('active', true)->orderBy('pos', 'ASC')->get(),
'products' => Product::where('active', true)->where('show_at', '<=', 1)->orderBy('pos', 'ASC')->get(),
'categories' => Category::where('active', true)->orderBy('pos', 'DESC')->get(),
'products' => Product::where('active', true)->where('show_at', '<=', 1)->orderBy('pos', 'DESC')->get(),
'product_categories' => false,
'p_count' => Product::where('active', true)->where('show_at', '<=', 1)->count(),
'headline' => 'Produktwelt',
'headline_image' => false,

View file

@ -36,7 +36,6 @@ class Subdomain
}
\Session::put('user_shop', $user_shop);
\Session::put('user_shop_domain', config('app.protocol').$user_shop->slug.".".config('app.domain').config('app.tld_care'));
Config::set('app.url', $user_shop->slug.".".config('app.domain').config('app.tld_care'));
return $next($request);
}

View file

@ -79,7 +79,7 @@ class Category extends Model
public function product_categories()
{
return $this->hasMany('App\Models\ProductCategory', 'category_id', 'id');
return $this->hasMany('App\Models\ProductCategory', 'category_id', 'id')->orderBy('pos', 'DESC');
}

View file

@ -220,7 +220,7 @@ class Product extends Model
}
public function categories(){
return $this->hasMany('App\Models\ProductCategory', 'product_id', 'id');
return $this->hasMany('App\Models\ProductCategory', 'product_id', 'id')->orderBy('pos', 'DESC');
}
public function images(){

View file

@ -29,7 +29,7 @@ class ProductCategory extends Model
protected $table = 'product_categories';
protected $fillable = [
'product_id', 'category_id',
'product_id', 'category_id', 'pos'
];
public function product()

View file

@ -135,7 +135,7 @@ class HTMLHelper
}
public static function getCategoriesOptions($ids = array(), $all = true){
$values = Category::where('active', 1)->get();
$values = Category::where('active', 1)->orderBy('pos', 'DESC')->get();
$ret = "";
if($all){
$ret .= '<option value="">'.__('no').'</option>\n';

View file

@ -228,6 +228,12 @@ class Util
}
return url($uri);
}
public static function isMivitaShop(){
return \Config::get('app.url') === config('app.domain').config('app.tld_shop');
}
public static function sanitize($string, $force_lowercase = true, $anal = false, $substr = false)
{
$strip = array("~", "`", "!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "_", "=", "+", "[", "{", "]",

View file

@ -16,6 +16,7 @@ class CreateProductCategoriesTable extends Migration
Schema::create('product_categories', function (Blueprint $table) {
$table->increments('id');
$table->unsignedTinyInteger('pos')->nullable()->default(0);
$table->unsignedInteger('product_id')->index();
$table->unsignedInteger('category_id')->index();

View file

@ -23,6 +23,8 @@
{!! Form::open(['url' => route('admin_product_category_store'), 'class' => 'form-horizontal', 'id'=>'']) !!}
<input type="hidden" name="id" id="id" value="@if($category->id>0){{$category->id}}@else new @endif">
<input type="hidden" name="action" value="save-form">
<div class="text-left mt-0 mb-2">
<button type="submit" class="btn btn-submit">{{ __('save') }}</button>&nbsp;
@ -38,8 +40,10 @@
{!! Form::close() !!}
@include('admin.category.products')
@include('admin.category.images')
@endsection

View file

@ -27,12 +27,13 @@
</div>
<div class="form-row">
<div class="form-group col-8">
{{--<div class="form-group col-8">
<label for="parent_id" class="form-label">{{__('Hauptkategorie')}}</label>
<select class="selectpicker" data-style="btn-default" name="">
{!! HTMLHelper::getCategoriesWithoutParents($category->parent_id) !!}
</select>
</div>
--}}
<div class="form-group col-sm-4">
<label class="form-label" for="pos">{{ __('pos') }}</label>
{{ Form::text('pos', $category->pos, array('placeholder'=>__('pos'), 'class'=>'form-control', 'id'=>'pos')) }}

View file

@ -11,9 +11,11 @@
<tr>
<th style="max-width: 60px;">&nbsp;</th>
<th>{{__('Pos')}}</th>
<th>{{__('Hauptkategorie')}}</th>
<th>{{__('Kategorie')}}</th>
{{--<th>{{__('Kategorie')}}</th>--}}
<th>{{__('Headline')}}</th>
<th>{{__('Translate') }}</th>
<th>{{__('Produkte')}}</th>
{{-- <th>__('Translate') </th>--}}
<th>{{__('Status')}}</th>
<th></th>
</tr>
@ -28,11 +30,13 @@
</td>
<td>{{ $value->pos }}</td>
<td>@if($value->parent) {{ $value->parent->name }} @else {{ $value->name }} @endif</td>
<td>@if($value->parent) {{ $value->name }} @else - @endif</td>
{{-- <td>@if($value->parent) {{ $value->name }} @else - @endif</td>--}}
<td>{{ $value->headline }}</td>
<!-- <td>{{ $value->getTranNames() }}</td> -->
<td>{{ $value->product_categories->count() }}</td>
{{-- <td>{{ $value->getTranNames() }}</td> --}}
<td data-sort="{{ $value->active }}">@if($value->active) <span class="badge badge-pill badge-success"><i class="fa fa-check"></i></span>@else<span class="badge badge-pill badge-danger"><i class="fa fa-times"></i></span>@endif</td>
<td><a class="text-danger" href="{{ route('admin_product_category_delete', [$value->id]) }}" onclick="return confirm('{{__('Really delete entry?')}}');"><i class="far fa-trash-alt"></i></a></td>
<td><a class="text-danger" href="{{ route('admin_product_category_delete', ['category', $value->id]) }}" onclick="return confirm('{{__('Really delete entry?')}}');"><i class="far fa-trash-alt"></i></a></td>
</tr>
@endforeach
@ -54,16 +58,8 @@
$('.datatables-style').dataTable({
"bLengthChange": false,
"iDisplayLength": 50,
"order": [[ 1, "asc" ]],
"aoColumns": [
{ "sWidth": "8%" },
{ "sWidth": "8%" },
{ "sWidth": "19%" },
{ "sWidth": "19%" },
{ "sWidth": "30%" },
{ "sWidth": "10%" },
{ "sWidth": "8%" },
],
"order": [[ 1, "desc" ]],
"language": {
"url": "/js/German.json"
}

View file

@ -0,0 +1,123 @@
<div class="card mb-2">
<h6 class="card-header">
{{__('Produktliste')}} / {{ $category->name }}
</h6>
<div class="mt-3 ml-3">
<button type="button" class="btn btn-sm btn-primary" data-toggle="modal" data-target="#modals-categorie-products"
data-id="new"
data-pos="0"
data-produkt_id=""
>{{__('Produkt hinzufügen')}}</button>
</div>
<div class="card-datatable table-responsive">
<table class="datatables-style table table-striped table-bordered">
<thead>
<tr>
<th>ID</th>
<th>Pos</th>
<th>Produkt</th>
<th>#</th>
</tr>
</thead>
<tbody>
@foreach($category->product_categories as $product_category)
<tr>
<td>
<button type="button" class="btn icon-btn btn-sm btn-primary" data-toggle="modal" data-target="#modals-categorie-products"
data-id="{{ $product_category->id }}"
data-pos="{{ $product_category->pos }}"
data-product_id="{{ $product_category->product_id }}">
<span class="far fa-edit"></span>
</button>
</td>
<td>
{{ $product_category->pos }}
</td>
<td>
@if($product_category->product)
{{ $product_category->product->name }}
@if($product_category->product->active)
&nbsp; | &nbsp;<span class="badge badge-pill badge-success"><i class="fa fa-check"></i></span>
@else
&nbsp; | &nbsp;<span class="badge badge-pill badge-danger"><i class="fa fa-times"></i></span>
@endif
&nbsp; | &nbsp;<span class="small">{{ $product_category->product->getShowAtType() }}</span>
&nbsp; | &nbsp;<a href="{{ route('admin_product_edit', [$product_category->product->id]) }}" class="btn btn-xs btn-secondary"><i class="fa fa-eye"></i></a>
@else
-
@endif
</td>
<td>
<a class="text-danger" href="{{ route('admin_product_category_delete', ['product_category', $product_category->id]) }}" onclick="return confirm('{{__('Really delete entry?')}}');"><i class="far fa-trash-alt"></i></a>
</td>
</tr>
@endforeach
</tbody>
</table>
<div class="mt-3 ml-3">
<button type="button" class="btn btn-sm btn-primary" data-toggle="modal" data-target="#modals-categorie-products"
data-id="new"
data-pos="0"
data-produkt_id=""
>{{__('Produkt hinzufügen')}}</button>
</div>
</div>
</div>
<!-- Modal template -->
<div class="modal fade" id="modals-categorie-products">
<div class="modal-dialog">
<form class="modal-content" action="{{ route('admin_product_category_store') }}" method="post">
@csrf
<input type="hidden" name="id">
<input type="hidden" name="category_id" value="{{ $category->id }}">
<div class="modal-header">
<h5 class="modal-title"> {{__('Produkt')}} <span class="font-weight-light">{{__('create/edit')}}</span></h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>
</div>
<div class="modal-body">
<div class="form-row">
<div class="form-group col-md-12">
<label class="form-label" for="pos">{{ __('pos') }}</label>
{{ Form::text('pos', $category->pos, array('placeholder'=>__('pos'), 'class'=>'form-control')) }}
</div>
<div class="form-group col-md-12">
<label for="country_ids" class="form-label">{{__('Produkt')}}</label>
<select class="selectpicker" name="product_id" id="product_id" data-style="btn-light" data-live-search="true" required>
{!! HTMLHelper::getProductsOptions() !!}
</select>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">{{__('close')}}</button>
<button type="submit" class="btn btn-primary" name="action" value="save-product_category">{{__('save')}}</button>
</div>
</form>
</div>
</div>
<script>
$( document ).ready(function() {
$('#modals-categorie-products').on('show.bs.modal', function (event) {
var button = $(event.relatedTarget);
$(this).find(".modal-content input[name='id']").val(button.data('id'));
$(this).find(".modal-body input[name='pos']").val(button.data('pos'));
$(this).find(".modal-body select[name='product_id']").val(button.data('product_id'));
$('.selectpicker').selectpicker('refresh');
});
});
</script>

View file

@ -37,9 +37,6 @@
{!! Form::close() !!}
@include('admin.product.images')
@endsection

View file

@ -50,6 +50,10 @@
Mail: info@mivita.care<br>
<br><br>
<strong>III. Cookies</strong>
@if(!$user_shop || $isMivitaShop)
<script id="CookieDeclaration" src="https://consent.cookiebot.com/6aec027f-246a-42c9-9055-c64c82fc09fe/cd.js" type="text/javascript" async></script>
@endif
<br>
Unsere Website verwendet Cookies. Cookies sind kleine Textdateien, die über einen Internetbrowser auf einem Computersystem abgelegt und gespeichert werden.
<br>
@ -214,10 +218,21 @@
Externe Schriftarten von Google, LLC., https://www.google.com/fonts („Google Fonts“). Die Einbindung der Google Fonts erfolgt durch einen Serveraufruf bei Google (in der Regel in den USA). Die Datenschutzerklärung finden Sie hier: https://policies.google.com/privacy, Opt-Out: https://adssettings.google.com/authenticated
<br><br>
Videos der Plattform “YouTube” des Drittanbieters Google LLC, 1600 Amphitheatre Parkway, Mountain View, CA 94043, USA. Die Datenschutzerklärung finden Sie hier: https://policies.google.com/privacy, Opt-Out: https://adssettings.google.com/authenticated
<br><br>
@if(!$user_shop || $isMivitaShop)
<strong>XIII. Analyse-Tools und WerbungFacebook Pixel</strong>
<br><br>
Diese Website nutzt zur Konversionsmessung der Besucheraktions-Pixel von Facebook. Anbieter diesesDienstes ist die Facebook Ireland Limited, 4 Grand Canal Square, Dublin 2, Irland. Die erfassten Datenwerden nach Aussage von Facebook jedoch auch in die USA und in andere Drittländer übertragen.So kann das Verhalten der Seitenbesucher nachverfolgt werden, nachdem diese durch Klick auf eineFacebook-Werbeanzeige auf die Website des Anbieters weitergeleitet wurden. Dadurch können dieWirksamkeit der Facebook-Werbeanzeigen für statistische und Marktforschungszwecke ausgewertetwerden und zukünftige Werbemaßnahmen optimiert werden.Die erhobenen Daten sind für uns als Betreiber dieser Website anonym, wir können keine Rückschlüsse aufdie Identität der Nutzer ziehen. Die Daten werden aber von Facebook gespeichert und verarbeitet, sodasseine Verbindung zum jeweiligen Nutzerprofil möglich ist und Facebook die Daten für eigene Werbezwecke,entsprechend derFacebook-Datenverwendungsrichtlinie verwenden kann. Dadurch kann Facebook das Schalten vonWerbeanzeigen auf Seiten von Facebook sowie außerhalb von Facebook ermöglichen. Diese Verwendungder Daten kann von uns als Seitenbetreiber nicht beeinflusst werden.Die Nutzung von Facebook-Pixel erfolgt auf Grundlage von Art. 6 Abs. 1 lit. f DSGVO. Der Websitebetreiberhat ein berechtigtes Interesse an effektiven Werbemaßnahmen unter Einschluss der sozialen Medien.Sofern eine entsprechende Einwilligung abgefragt wurde (z. B. eine Einwilligung zur Speicherung vonCookies), erfolgt die Verarbeitung ausschließlich auf Grundlage von Art. 6 Abs. 1 lit. a DSGVO; dieEinwilligung ist jederzeit widerrufbar.Die Datenübertragung in die USA wird auf die Standardvertragsklauseln der EU-Kommission gestützt.Details finden Sie hier:https://www.facebook.com/legal/EU_data_transfer_addendum undhttps://de-de.facebook.com/help/566994660333381
<br><br>
Soweit mit Hilfe des hier beschriebenen Tools personenbezogene Daten auf unserer Website erfasst und anFacebook weitergeleitet werden, sind wir und die Facebook Ireland Limited, 4 Grand Canal Square, GrandCanal Harbour, Dublin 2, Irland gemeinsam für diese Datenverarbeitung verantwortlich (Art. 26 DSGVO).Die gemeinsame Verantwortlichkeit beschränkt sich dabei ausschließlich auf die Erfassung der Daten undderen Weitergabe an Facebook. Die nach der Weiterleitung erfolgende Verarbeitung durch Facebook istnicht Teil der gemeinsamen Verantwortung. Die uns gemeinsam obliegenden Verpflichtungen wurden ineiner Vereinbarung über gemeinsame Verarbeitung festgehalten. Den Wortlaut der Vereinbarung finden Sieunter:https://www.facebook.com/legal/controller_addendum. Laut dieser Vereinbarung sind wir für die Erteilungder Datenschutzinformationen beim Einsatz des Facebook-Tools und für die datenschutzrechtlich sichereImplementierung des Tools auf unserer Website verantwortlich. Für die Datensicherheit der Facebook-Produkte ist Facebook verantwortlich. Betroffenenrechte (z.B. Auskunftsersuchen) hinsichtlich der beiFacebook verarbeiteten Daten können Sie direkt bei Facebook geltend machen. Wenn Sie dieBetroffenenrechte bei uns geltend machen, sind wir verpflichtet, diese an Facebook weiterzuleiten.In den Datenschutzhinweisen von Facebook finden Sie weitere Hinweise zum Schutz Ihrer Privatsphäre:https://de-de.facebook.com/about/privacy/.Sie können außerdem die Remarketing-Funktion „Custom Audiences“ im Bereich Einstellungen fürWerbeanzeigen unterhttps://www.facebook.com/ads/preferences/?entry_product=ad_settings_screen deaktivieren. Dazumüssen Sie bei Facebook angemeldet sein.Wenn Sie kein Facebook Konto besitzen, können Sie nutzungsbasierte Werbung von Facebook auf derWebsite der European Interactive Digital Advertising Alliance deaktivieren:http://www.youronlinechoices.com/de/praferenzmanagement/.
<br><br>Stand: 05.04.2021
@else
Stand: 05.10.2018
Stand: 05.10.2018
@endif
<br><br>
</div>
@if(isset($modal) && $modal == true)

View file

@ -38,7 +38,7 @@
"processing": true,
"serverSide": true,
"ajax": '{!! route('user_homeparty_datatable') !!}',
"order": [[4, "asc" ]],
"order": [[3, "asc" ]],
"columns": [
{ data: 'add_card', name: 'add_card', searchable: false, orderable: false },

View file

@ -144,7 +144,7 @@
// d.filter_customer_member = $('select[name=filter_customer_member]').val();
}
},
"order": [[4, "asc" ]],
"order": [[7, "asc" ]],
"columns": [
{ data: 'picture', name: 'picture', searchable: false, width: 35 },
{ data: 'product', name: 'product' },

View file

@ -10,52 +10,68 @@
<meta name="viewport" content="width=device-width, maximum-scale=1, initial-scale=1, user-scalable=0" />
<!--[if IE]><meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1'><![endif]-->
<!-- WEB FONTS : use %7C instead of | (pipe) -->
<link href="https://fonts.googleapis.com/css?family=Open+Sans:300,400,600%7CRaleway:300,400,500,600,700%7CLato:300,400,400italic,600,700" rel="stylesheet" type="text/css" />
<!-- CORE CSS -->
<!-- REVOLUTION SLIDER -->
<link href="{{ asset('/assets/plugins/slider.revolution/css/extralayers.css') }}" rel="stylesheet" type="text/css" />
<link href="{{ asset('/assets/plugins/slider.revolution/css/settings.css') }}" rel="stylesheet" type="text/css" />
<link href="{{ asset('/assets/css/mystyle.css') }}" rel="stylesheet" type="text/css" />
<link href="{{ asset('/assets/css/custom-style.css?v1') }}" rel="stylesheet" type="text/css" />
<link href="{{ asset('assets/css/custom-forms-v2.css') }}" rel="stylesheet" type="text/css" />
<link rel="stylesheet" type="text/css" href="{{ asset('/css/cookieconsent.min.css') }}" />
<script src="{{ asset('/js/cookieconsent.min.js') }}"></script>
<script>
window.addEventListener("load", function(){
window.cookieconsent.initialise({
"palette": {
"popup": {
"background": "#b5c49b",
"text": "#ffffff"
},
"button": {
"background": "#d7d700",
"text": "#ffffff"
}
},
"content": {
"message": "{{__('This website uses cookies in order to guarantee the best possible service. With your visit to this site you agree to our use of cookies.') }}",
"dismiss": "{{__('OK')}}",
"link": "{{__('data protection')}}",
"href": "{{ url('datenschutz') }}",
"target": "_blank",
}
})});
</script>
<style type="text/css">
@if(!$user_shop)
<script id="Cookiebot" src="https://consent.cookiebot.com/uc.js" data-cbid="6aec027f-246a-42c9-9055-c64c82fc09fe" data-blockingmode="auto" type="text/javascript"></script>
<!-- Facebook Pixel Code -->
<script>
!function(f,b,e,v,n,t,s)
{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};
if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t,s)}(window, document,'script',
'https://connect.facebook.net/en_US/fbevents.js');
fbq('init', '454469462537092');
fbq('track', 'PageView');
</script>
<noscript><img height="1" width="1" style="display:none"
src="https://www.facebook.com/tr?id=454469462537092&ev=PageView&noscript=1"
/></noscript>
<!-- End Facebook Pixel Code -->
@else
<link rel="stylesheet" type="text/css" href="{{ asset('/css/cookieconsent.min.css') }}" />
<script src="{{ asset('/js/cookieconsent.min.js') }}"></script>
<script>
window.addEventListener("load", function(){
window.cookieconsent.initialise({
"palette": {
"popup": {
"background": "#b5c49b",
"text": "#ffffff"
},
"button": {
"background": "#d7d700",
"text": "#ffffff"
}
},
"content": {
"message": "{{__('This website uses cookies in order to guarantee the best possible service. With your visit to this site you agree to our use of cookies.') }}",
"dismiss": "{{__('OK')}}",
"link": "{{__('data protection')}}",
"href": "{{ url('datenschutz') }}",
"target": "_blank",
}
})});
</script>
@endif
<style type="text/css">
.text-primary {
color:#a5d0a5 !important;
}
div.side-nav ul.list-group-bordered > li.list-group-item.active > a:hover{
color: #fff !important;
}
</style>
</head>
<body class="smoothscroll enable-animation">

View file

@ -1,5 +1,4 @@
@extends('web.layouts.application')
@section('layout-content')
@include('web.layouts.includes.header')
<!-- wrapper -->

View file

@ -220,7 +220,8 @@ Videos der Plattform “YouTube” des Drittanbieters Google LLC, 1600 Amphithea
<br><br>
Stand: 05.10.2018
Stand: 01.10.2018
<br><br>
</div>

View file

@ -6,102 +6,102 @@
text-overflow: ellipsis;
}
</style>
<div class="shop-item">
<div class="shop-item">
<div class="thumbnail">
<!-- product image(s) -->
<a class="shop-item-image"
href="{{ url('/produkte/'.$subsite.'/'.$product->slug) }}">
@php ($set = 'first')
@foreach($product->imagesActive as $image)
@if($image->active)
@if($image->slug)
@if($set == 'hover')
<img class="img-responsive hidden-xs"
src="{{ route('shop_product_image', [$image->slug]) }}"
alt="{{ $product->getLang('name') }}"/>
@php($set = 'done')
@endif
<div class="thumbnail">
<!-- product image(s) -->
<a class="shop-item-image"
href="{{ url('/produkte/'.$subsite.'/'.$product->slug) }}">
@php ($set = 'first')
@foreach($product->imagesActive as $image)
@if($image->active)
@if($image->slug)
@if($set == 'hover')
<img class="img-responsive hidden-xs"
src="{{ route('shop_product_image', [$image->slug]) }}"
alt="{{ $product->getLang('name') }}"/>
@php($set = 'done')
@endif
@if($set == 'first')
<img class="img-responsive"
src="{{ route('shop_product_image', [$image->slug]) }}"
alt="{{ $product->getLang('name') }}"/>
@php($set = 'hover')
@endif
@endif
@endif
@endforeach
</a>
@if($set == 'first')
<img class="img-responsive"
src="{{ route('shop_product_image', [$image->slug]) }}"
alt="{{ $product->getLang('name') }}"/>
@php($set = 'hover')
@endif
@endif
@endif
@endforeach
</a>
</div>
</div>
@if($user_shop)
<div class="shop-item-summary text-center ">
<h2 class="product_headline2"><a href="{{ url('/produkte/'.$subsite.'/'.$product->slug) }}">{{ $product->getLang('name') }}</a></h2>
<!-- rating -->
<div class="shop-item-rating-line">
<div class="rating rating-5 size-13"><!-- rating-0 ... rating-5 --></div>
</div>
<!-- /rating -->
@if($product->price_old > 0)
<div class="shop-item-price d-block text-danger mt-2">
<del class="text-muted" style="font-size: 0.85em"> {{ $product->getFormattedPriceOld() }} </del>
{{ $product->getFormattedPrice() }}
<div style="font-size: 13px; color:#1d1d1d; font-weight: 500;">{{$product->getBasePriceFormattedFull()}}</div>
@if($user_shop)
<div class="shop-item-summary text-center ">
<h2 class="product_headline2"><a href="{{ url('/produkte/'.$subsite.'/'.$product->slug) }}">{{ $product->getLang('name') }}</a></h2>
<!-- rating -->
<div class="shop-item-rating-line">
<div class="rating rating-5 size-13"><!-- rating-0 ... rating-5 --></div>
</div>
<!-- /rating -->
@if($product->price_old > 0)
<div class="shop-item-price d-block text-danger mt-2">
<del class="text-muted" style="font-size: 0.85em"> {{ $product->getFormattedPriceOld() }} </del>
{{ $product->getFormattedPrice() }}
<div style="font-size: 13px; color:#1d1d1d; font-weight: 500;">{{$product->getBasePriceFormattedFull()}}</div>
</div>
@else
<div class="shop-item-price d-block mt-2 text-muted">
{{ $product->getFormattedPrice() }}
<div style="font-size: 13px; color:#1d1d1d; font-weight: 500;">{{$product->getBasePriceFormattedFull()}}</div>
</div>
@endif
<!-- price -->
</div>
@else
<div class="shop-item-price d-block mt-2 text-muted">
{{ $product->getFormattedPrice() }}
<div style="font-size: 13px; color:#1d1d1d; font-weight: 500;">{{$product->getBasePriceFormattedFull()}}</div>
</div>
@endif
<!-- price -->
<!-- /price -->
</div>
<!-- buttons -->
<div class="shop-item-buttons text-left">
<div class="hidden visible-xs visible-sm visible-md clearfix text-center">
<a href="{{ url(Util::getPostRoute().'card/add/'.$product->id.'/1/'.$product->slug) }}"
data-quantity="1" data-product_id="{{ $product->id }}"
aria-label="{{ $product->getLang('name') }} zu deinem Warenkorb hinzufügen"
class="btn btn-primary btn-xs btn-text-500 faa-parent animated-hover" rel="nofollow">
<i class="fa fa-cart-plus faa-horizontal"></i> In den Warenkorb
</a>
<a class="mt-2 btn btn-primary btn-xs btn-text-500 faa-parent animated-hover"
href="{{ url('/produkte/'.$subsite.'/'.$product->slug) }}">
<i class="fa fa-list faa-horizonta"></i> Details
</a>
</div>
<div class="hidden visible-lg text-left">
<a href="{{ url(Util::getPostRoute().'card/add/'.$product->id.'/1/'.$product->slug) }}"
data-quantity="1" data-product_id="{{ $product->id }}"
aria-label="{{ $product->getLang('name') }} zu deinem Warenkorb hinzufügen"
class="btn btn-primary btn-xs btn-text-500 faa-parent animated-hover" rel="nofollow">
<i class="fa fa-cart-plus faa-horizontal"></i> In den Warenkorb
</a>
<a class="float-right btn btn-primary btn-xs btn-text-500 faa-parent animated-hover"
href="{{ url('/produkte/'.$subsite.'/'.$product->slug) }}">
<i class="fa fa-list faa-horizonta"></i> Details
</a>
</div>
</div>
@else
<div class="shop-item-summary text-center ">
<h2 class=""><a href="{{ url('/produkte/'.$subsite.'/'.$product->slug) }}">{{ $product->getLang('name') }}</a></h2>
<!-- /price -->
</div>
<!-- buttons -->
<div class="shop-item-buttons text-left">
<div class="hidden visible-xs visible-sm visible-md clearfix text-center">
<a href="{{ url(Util::getPostRoute().'card/add/'.$product->id.'/1/'.$product->slug) }}"
data-quantity="1" data-product_id="{{ $product->id }}"
aria-label="{{ $product->getLang('name') }} zu deinem Warenkorb hinzufügen"
class="btn btn-primary btn-xs btn-text-500 faa-parent animated-hover" rel="nofollow">
<i class="fa fa-cart-plus faa-horizontal"></i> In den Warenkorb
</a>
<a class="mt-2 btn btn-primary btn-xs btn-text-500 faa-parent animated-hover"
href="{{ url('/produkte/'.$subsite.'/'.$product->slug) }}">
<i class="fa fa-list faa-horizonta"></i> Details
</a>
</div>
<div class="hidden visible-lg text-left">
<a href="{{ url(Util::getPostRoute().'card/add/'.$product->id.'/1/'.$product->slug) }}"
data-quantity="1" data-product_id="{{ $product->id }}"
aria-label="{{ $product->getLang('name') }} zu deinem Warenkorb hinzufügen"
class="btn btn-primary btn-xs btn-text-500 faa-parent animated-hover" rel="nofollow">
<i class="fa fa-cart-plus faa-horizontal"></i> In den Warenkorb
</a>
<a class="float-right btn btn-primary btn-xs btn-text-500 faa-parent animated-hover"
href="{{ url('/produkte/'.$subsite.'/'.$product->slug) }}">
<i class="fa fa-list faa-horizonta"></i> Details
</a>
</div>
</div>
@else
<div class="shop-item-summary text-center ">
<h2 class=""><a href="{{ url('/produkte/'.$subsite.'/'.$product->slug) }}">{{ $product->getLang('name') }}</a></h2>
<!-- rating -->
<div class="shop-item-rating-line">
<div class="rating rating-5 size-13"><!-- rating-0 ... rating-5 --></div>
</div>
<!-- /rating -->
</div>
<!-- rating -->
<div class="shop-item-rating-line">
<div class="rating rating-5 size-13"><!-- rating-0 ... rating-5 --></div>
</div>
<!-- /rating -->
</div>
<div class="shop-item-buttons text-center">
<a class="btn btn-primary btn-sm btn-text-500 faa-parent animated-hover" href="{{ url('/produkte/'.$subsite.'/'.$product->slug) }}">zum Produkt <i class="fa fa-lg fa-chevron-circle-right faa-horizontal"></i> </a>
</div>
@endif
<!-- /buttons -->
</div>
<div class="shop-item-buttons text-center">
<a class="btn btn-primary btn-sm btn-text-500 faa-parent animated-hover" href="{{ url('/produkte/'.$subsite.'/'.$product->slug) }}">zum Produkt <i class="fa fa-lg fa-chevron-circle-right faa-horizontal"></i> </a>
</div>
@endif
<!-- /buttons -->
</div>

View file

@ -67,7 +67,6 @@
src="{{ route('product_image', [$product->imagesActive->first()->slug]) }}"
width="1000" height="1500" alt="{{ $product->getLang('name') }}">
</figure>
</div>
<!-- Thumbnails (required height:100px) -->
<div data-for="zoom-primary" class="zoom-more owl-carousel owl-padding-3 featured"

View file

@ -53,17 +53,26 @@
<div class="col-md-9 col-sm-9">
<h1>{{$headline}} @if($headline_image) <img src="{{ route('iq_image', [$headline_image->slug]) }}" class="img-responsive" alt=""/> @endif</h1>
<ul class="shop-item-list row list-inline nomargin">
@if($product_categories)
@foreach($product_categories as $product_category)
@if($product_category->product)
<li class="col-lg-4 col-sm-4">
@include('web.templates.produkte-item', ['product' => $product_category->product])
</li>
@endif
@endforeach
@endif
@if($products)
@foreach($products as $product)
<!-- ITEM -->
<li class="col-lg-4 col-sm-4">
@include('web.templates.produkte-item')
</li>
<!-- /ITEM -->
@endforeach
<li class="col-lg-4 col-sm-4">
@include('web.templates.produkte-item', ['product' => $product])
</li>
@endforeach
@endif
</ul>
</div>
</div>
</div>
</section>
<!-- / -->
@endsection

View file

@ -10,46 +10,60 @@
<meta name="viewport" content="width=device-width, maximum-scale=1, initial-scale=1, user-scalable=0" />
<!--[if IE]><meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1'><![endif]-->
<!-- WEB FONTS : use %7C instead of | (pipe) -->
<link href="https://fonts.googleapis.com/css?family=Open+Sans:300,400,600%7CRaleway:300,400,500,600,700%7CLato:300,400,400italic,600,700" rel="stylesheet" type="text/css" />
<!-- CORE CSS -->
<!-- REVOLUTION SLIDER -->
<link href="{{ asset('/assets/plugins/slider.revolution/css/extralayers.css') }}" rel="stylesheet" type="text/css" />
<link href="{{ asset('/assets/plugins/slider.revolution/css/settings.css') }}" rel="stylesheet" type="text/css" />
<link href="{{ asset('/assets/css/mystyle.css') }}" rel="stylesheet" type="text/css" />
<link href="{{ asset('/assets/css/custom-style.css?v1') }}" rel="stylesheet" type="text/css" />
<link href="{{ asset('assets/css/custom-forms-v2.css') }}" rel="stylesheet" type="text/css" />
@if(Util::isMivitaShop())
<script id="Cookiebot" src="https://consent.cookiebot.com/uc.js" data-cbid="6aec027f-246a-42c9-9055-c64c82fc09fe" data-blockingmode="auto" type="text/javascript"></script>
<link rel="stylesheet" type="text/css" href="{{ asset('/css/cookieconsent.min.css') }}" />
<script src="{{ asset('/js/cookieconsent.min.js') }}"></script>
<script>
window.addEventListener("load", function(){
window.cookieconsent.initialise({
"palette": {
"popup": {
"background": "#b5c49b",
"text": "#ffffff"
<!-- Facebook Pixel Code -->
<script>
!function(f,b,e,v,n,t,s)
{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};
if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t,s)}(window, document,'script',
'https://connect.facebook.net/en_US/fbevents.js');
fbq('init', '454469462537092');
fbq('track', 'PageView');
</script>
<noscript><img height="1" width="1" style="display:none"
src="https://www.facebook.com/tr?id=454469462537092&ev=PageView&noscript=1"
/></noscript>
<!-- End Facebook Pixel Code -->
@else
<link rel="stylesheet" type="text/css" href="{{ asset('/css/cookieconsent.min.css') }}" />
<script src="{{ asset('/js/cookieconsent.min.js') }}"></script>
<script>
window.addEventListener("load", function(){
window.cookieconsent.initialise({
"palette": {
"popup": {
"background": "#b5c49b",
"text": "#ffffff"
},
"button": {
"background": "#d7d700",
"text": "#ffffff"
}
},
"button": {
"background": "#d7d700",
"text": "#ffffff"
"content": {
"message": "{{__('This website uses cookies in order to guarantee the best possible service. With your visit to this site you agree to our use of cookies.') }}",
"dismiss": "{{__('OK')}}",
"link": "{{__('data protection')}}",
"href": "{{ url('datenschutz') }}",
"target": "_blank",
}
},
"content": {
"message": "{{__('This website uses cookies in order to guarantee the best possible service. With your visit to this site you agree to our use of cookies.') }}",
"dismiss": "{{__('OK')}}",
"link": "{{__('data protection')}}",
"href": "{{ url('datenschutz') }}",
"target": "_blank",
}
})});
</script>
})});
</script>
@endif
<style type="text/css">
.text-primary {
color:#a5d0a5 !important;
}
@ -58,7 +72,6 @@
}
</style>
</head>
<body class="smoothscroll enable-animation">

View file

@ -1,5 +1,4 @@
@extends('web.user.layouts.application')
@section('layout-content')
@include('web.user.layouts.includes.header')
<!-- wrapper -->

View file

@ -319,7 +319,7 @@ Route::domain(config('app.pre_url_crm').config('app.domain').config('app.tld_car
Route::get('/admin/product/categories', 'CategoryController@index')->name('admin_product_categories');
Route::get('/admin/product/category/edit/{id}', 'CategoryController@edit')->name('admin_product_category_edit');
Route::post('/admin/product/category/store', 'CategoryController@store')->name('admin_product_category_store');
Route::get('/admin/product/category/delete/{id}', 'CategoryController@delete')->name('admin_product_category_delete');
Route::get('/admin/product/category/delete/{del}/{id}', 'CategoryController@delete')->name('admin_product_category_delete');
//products categories
Route::get('/admin/product/ingredients', 'IngredientController@index')->name('admin_product_ingredients');