Initial Commit
This commit is contained in:
11
resources/css/app.css
Normal file
11
resources/css/app.css
Normal file
@@ -0,0 +1,11 @@
|
||||
@import 'tailwindcss';
|
||||
|
||||
@source '../../vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php';
|
||||
@source '../../storage/framework/views/*.php';
|
||||
@source '../**/*.blade.php';
|
||||
@source '../**/*.js';
|
||||
|
||||
@theme {
|
||||
--font-sans: 'Instrument Sans', ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji',
|
||||
'Segoe UI Symbol', 'Noto Color Emoji';
|
||||
}
|
||||
1
resources/js/app.js
Normal file
1
resources/js/app.js
Normal file
@@ -0,0 +1 @@
|
||||
import './bootstrap';
|
||||
4
resources/js/bootstrap.js
vendored
Normal file
4
resources/js/bootstrap.js
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
import axios from 'axios';
|
||||
window.axios = axios;
|
||||
|
||||
window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
|
||||
63
resources/views/back/layout/auth-layout.blade.php
Normal file
63
resources/views/back/layout/auth-layout.blade.php
Normal file
@@ -0,0 +1,63 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<!-- Basic Page Info -->
|
||||
<meta charset="utf-8" />
|
||||
<title>@yield('pageTitle')</title>
|
||||
|
||||
<!-- Site favicon -->
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/back/vendors/images/apple-touch-icon.png" />
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="/back/vendors/images/favicon-32x32.png" />
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="/back/vendors/images/favicon-16x16.png" />
|
||||
|
||||
<!-- Mobile Specific Metas -->
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
|
||||
|
||||
<!-- Google Font -->
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&display=swap"
|
||||
rel="stylesheet" />
|
||||
<!-- CSS -->
|
||||
<link rel="stylesheet" type="text/css" href="/back/vendors/styles/core.css" />
|
||||
<link rel="stylesheet" type="text/css" href="/back/vendors/styles/icon-font.min.css" />
|
||||
<link rel="stylesheet" type="text/css" href="/back/vendors/styles/style.css" />
|
||||
@yield('stylesheets')
|
||||
</head>
|
||||
|
||||
<body class="login-page">
|
||||
<div class="login-header box-shadow">
|
||||
<div class="container-fluid d-flex justify-content-between align-items-center">
|
||||
<div class="brand-logo">
|
||||
<a href="/">
|
||||
<img src="/images/site/{{ isset(settings()->site_logo) ? settings()->site_logo : '' }}"
|
||||
alt="logo" />
|
||||
</a>
|
||||
</div>
|
||||
<!-- <div class="login-menu">
|
||||
<ul>
|
||||
<li><a href="register.html">Register</a></li>
|
||||
</ul>
|
||||
</div> -->
|
||||
</div>
|
||||
</div>
|
||||
<div class="login-wrap d-flex align-items-center flex-wrap justify-content-center">
|
||||
<div class="container">
|
||||
<div class="row align-items-center">
|
||||
<div class="col-md-6 col-lg-7">
|
||||
<img src="/back/vendors/images/login-page-img.png" alt="bg_image" />
|
||||
</div>
|
||||
<div class="col-md-6 col-lg-5">
|
||||
@yield('content')
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- js -->
|
||||
<script src="/back/vendors/scripts/core.js"></script>
|
||||
<script src="/back/vendors/scripts/script.min.js"></script>
|
||||
<script src="/back/vendors/scripts/process.js"></script>
|
||||
<script src="/back/vendors/scripts/layout-settings.js"></script>
|
||||
@yield('scripts')
|
||||
</body>
|
||||
|
||||
</html>
|
||||
296
resources/views/back/layout/pages-layout.blade.php
Normal file
296
resources/views/back/layout/pages-layout.blade.php
Normal file
@@ -0,0 +1,296 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<!-- Basic Page Info -->
|
||||
<meta charset="utf-8" />
|
||||
<title>@yield('pageTitle')</title>
|
||||
<meta name="csrf-token" content="{{ csrf_token() }}">
|
||||
|
||||
<!-- Site favicon -->
|
||||
<link rel="icon" type="image/png" sizes="16x16"
|
||||
whref="/images/site/{{ isset(settings()->site_favicon) ? settings()->site_favicon : '' }}" />
|
||||
|
||||
<!-- Mobile Specific Metas -->
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
|
||||
|
||||
<!-- Google Font -->
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&display=swap"
|
||||
rel="stylesheet" />
|
||||
<!-- CSS -->
|
||||
<link rel="stylesheet" type="text/css" href="{{ asset('/back/vendors/styles/core.css') }}" />
|
||||
<link rel="stylesheet" type="text/css" href="{{ asset('/back/vendors/styles/icon-font.min.css') }}" />
|
||||
<link rel="stylesheet" type="text/css" href="{{ asset('/back/vendors/styles/style.css') }}" />
|
||||
<link rel="stylesheet" href="{{ asset('/extra-assets/jquery-ui/jquery-ui.min.css') }}" />
|
||||
<link rel="stylesheet" href="{{ asset('/extra-assets/jquery-ui/jquery-ui.structure.min.css') }}" />
|
||||
<link rel="stylesheet" href="{{ asset('/extra-assets/jquery-ui/jquery-ui.theme.min.css') }}" />
|
||||
<link rel="stylesheet" type="text/css"
|
||||
href="https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/toastr.min.css" />
|
||||
@stack('stylesheets')
|
||||
@kropifyStyles
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="header">
|
||||
<div class="header-left">
|
||||
<div class="menu-icon bi bi-list"></div>
|
||||
<div class="search-toggle-icon bi bi-search" data-toggle="header_search"></div>
|
||||
|
||||
</div>
|
||||
<div class="header-right">
|
||||
<div class="dashboard-setting user-notification">
|
||||
<div class="dropdown">
|
||||
<a class="dropdown-toggle no-arrow" href="javascript:;" data-toggle="right-sidebar">
|
||||
<i class="dw dw-settings2"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
@livewire('admin.top-user-info')
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="right-sidebar">
|
||||
<div class="sidebar-title">
|
||||
<h3 class="weight-600 font-16 text-blue">
|
||||
Layout Einstellungen
|
||||
<span class="btn-block font-weight-400 font-12">User Interface Einstellungen</span>
|
||||
</h3>
|
||||
<div class="close-sidebar" data-toggle="right-sidebar-close">
|
||||
<i class="icon-copy ion-close-round"></i>
|
||||
</div>
|
||||
</div>
|
||||
<div class="right-sidebar-body customscroll">
|
||||
<div class="right-sidebar-body-content">
|
||||
<h4 class="weight-600 font-18 pb-10">Header Hintergrund</h4>
|
||||
<div class="sidebar-btn-group pb-30 mb-10">
|
||||
<a href="javascript:void(0);" class="btn btn-outline-primary header-white active">White</a>
|
||||
<a href="javascript:void(0);" class="btn btn-outline-primary header-dark">Dark</a>
|
||||
</div>
|
||||
|
||||
<h4 class="weight-600 font-18 pb-10">Sidebar Hintergrund</h4>
|
||||
<div class="sidebar-btn-group pb-30 mb-10">
|
||||
<a href="javascript:void(0);" class="btn btn-outline-primary sidebar-light active">White</a>
|
||||
<a href="javascript:void(0);" class="btn btn-outline-primary sidebar-dark">Dark</a>
|
||||
</div>
|
||||
|
||||
<h4 class="weight-600 font-18 pb-10">Menu Dropdown Icon</h4>
|
||||
<div class="sidebar-radio-group pb-10 mb-10">
|
||||
<div class="custom-control custom-radio custom-control-inline">
|
||||
<input type="radio" id="sidebaricon-1" name="menu-dropdown-icon" class="custom-control-input"
|
||||
value="icon-style-1" checked="" />
|
||||
<label class="custom-control-label" for="sidebaricon-1"><i class="fa fa-angle-down"></i></label>
|
||||
</div>
|
||||
<div class="custom-control custom-radio custom-control-inline">
|
||||
<input type="radio" id="sidebaricon-2" name="menu-dropdown-icon" class="custom-control-input"
|
||||
value="icon-style-2" />
|
||||
<label class="custom-control-label" for="sidebaricon-2"><i class="ion-plus-round"></i></label>
|
||||
</div>
|
||||
<div class="custom-control custom-radio custom-control-inline">
|
||||
<input type="radio" id="sidebaricon-3" name="menu-dropdown-icon" class="custom-control-input"
|
||||
value="icon-style-3" />
|
||||
<label class="custom-control-label" for="sidebaricon-3"><i
|
||||
class="fa fa-angle-double-right"></i></label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h4 class="weight-600 font-18 pb-10">Menu List Icon</h4>
|
||||
<div class="sidebar-radio-group pb-30 mb-10">
|
||||
<div class="custom-control custom-radio custom-control-inline">
|
||||
<input type="radio" id="sidebariconlist-1" name="menu-list-icon" class="custom-control-input"
|
||||
value="icon-list-style-1" checked="" />
|
||||
<label class="custom-control-label" for="sidebariconlist-1"><i
|
||||
class="ion-minus-round"></i></label>
|
||||
</div>
|
||||
<div class="custom-control custom-radio custom-control-inline">
|
||||
<input type="radio" id="sidebariconlist-2" name="menu-list-icon"
|
||||
class="custom-control-input" value="icon-list-style-2" />
|
||||
<label class="custom-control-label" for="sidebariconlist-2"><i class="fa fa-circle-o"
|
||||
aria-hidden="true"></i></label>
|
||||
</div>
|
||||
<div class="custom-control custom-radio custom-control-inline">
|
||||
<input type="radio" id="sidebariconlist-3" name="menu-list-icon"
|
||||
class="custom-control-input" value="icon-list-style-3" />
|
||||
<label class="custom-control-label" for="sidebariconlist-3"><i
|
||||
class="dw dw-check"></i></label>
|
||||
</div>
|
||||
<div class="custom-control custom-radio custom-control-inline">
|
||||
<input type="radio" id="sidebariconlist-4" name="menu-list-icon"
|
||||
class="custom-control-input" value="icon-list-style-4" checked="" />
|
||||
<label class="custom-control-label" for="sidebariconlist-4"><i
|
||||
class="icon-copy dw dw-next-2"></i></label>
|
||||
</div>
|
||||
<div class="custom-control custom-radio custom-control-inline">
|
||||
<input type="radio" id="sidebariconlist-5" name="menu-list-icon"
|
||||
class="custom-control-input" value="icon-list-style-5" />
|
||||
<label class="custom-control-label" for="sidebariconlist-5"><i
|
||||
class="dw dw-fast-forward-1"></i></label>
|
||||
</div>
|
||||
<div class="custom-control custom-radio custom-control-inline">
|
||||
<input type="radio" id="sidebariconlist-6" name="menu-list-icon"
|
||||
class="custom-control-input" value="icon-list-style-6" />
|
||||
<label class="custom-control-label" for="sidebariconlist-6"><i
|
||||
class="dw dw-next"></i></label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="reset-options pt-30 text-center">
|
||||
<button class="btn btn-danger" id="reset-settings">
|
||||
Einstellungen zurücksetzen
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="left-side-bar">
|
||||
<div class="brand-logo">
|
||||
<a href="/">
|
||||
<img src="/images/site/{{ isset(settings()->site_logo) ? settings()->site_logo : '' }}"
|
||||
alt="brand-logo" class="dark-logo" />
|
||||
<img src="/images/site/{{ isset(settings()->site_logo) ? settings()->site_logo : '' }}"
|
||||
alt="brand-logo" class="light-logo" />
|
||||
</a>
|
||||
<div class="close-sidebar" data-toggle="left-sidebar-close">
|
||||
<i class="ion-close-round"></i>
|
||||
</div>
|
||||
</div>
|
||||
<div class="menu-block customscroll">
|
||||
<div class="sidebar-menu">
|
||||
<ul id="accordion-menu">
|
||||
<li>
|
||||
<a href="{{ route('admin.dashboard') }}"
|
||||
class="dropdown-toggle no-arrow {{ Route::is('admin.dashboard') ? 'active' : '' }}">
|
||||
<span class="micon bi bi-house"></span><span class="mtext">Home</span>
|
||||
</a>
|
||||
</li>
|
||||
@if (auth()->user()->type == 'superAdmin')
|
||||
<li>
|
||||
<a href="{{ route('admin.categories') }}"
|
||||
class="dropdown-toggle no-arrow {{ Route::is('admin.categories') ? 'active' : '' }}">
|
||||
<span class="micon fa fa-th-list"></span><span class="mtext">Kategorien</span>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
<li class="dropdown">
|
||||
<a href="javascript:;"
|
||||
class="dropdown-toggle {{ Route::is('admin.add_posts') || Route::is('admin.posts') || Route::is('admin.edit_post') ? 'active' : '' }}">
|
||||
<span class="micon fa fa-newspaper-o"></span><span class="mtext"> Posts </span>
|
||||
</a>
|
||||
<ul class="submenu">
|
||||
<li><a href="{{ route('admin.add_post') }}"
|
||||
class="{{ Route::is('admin.add_post') ? 'active' : '' }}">Neuen
|
||||
Post</a></li>
|
||||
<li><a href="{{ route('admin.posts') }}"
|
||||
class="{{ Route::is('admin.posts') ? 'active' : '' }}">Posts</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<div class="dropdown-divider"></div>
|
||||
</li>
|
||||
<li>
|
||||
<div class="sidebar-small-cap">Einstellungen</div>
|
||||
</li>
|
||||
<li>
|
||||
<a href="{{ route('admin.profile') }}"
|
||||
class="dropdown-toggle no-arrow {{ Route::is('admin.profile') ? 'active' : '' }}">
|
||||
<span class="micon fa fa-user-circle"></span>
|
||||
<span class="mtext">Profile</span>
|
||||
</a>
|
||||
</li>
|
||||
@if (auth()->user()->type == 'superAdmin')
|
||||
<li>
|
||||
<a href="{{ route('admin.settings') }}"
|
||||
class="dropdown-toggle no-arrow {{ Route::is('admin.settings') ? 'active' : '' }}">
|
||||
<span class="micon fa fa-cogs"></span>
|
||||
<span class="mtext">Allgemein</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="{{ route('admin.slider') }}"
|
||||
class="dropdown-toggle no-arrow {{ Route::is('admin.slider') ? 'active' : '' }}">
|
||||
<span class="micon dw dw-image"></span>
|
||||
<span class="mtext">Manage Slider</span>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mobile-menu-overlay"></div>
|
||||
|
||||
<div class="main-container">
|
||||
<div class="pd-ltr-20 xs-pd-20-10">
|
||||
<div class="min-height-200px">
|
||||
<div class="">
|
||||
@yield('content')
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer-wrap pd-20 mb-20 card-box">
|
||||
DeskApp - Bootstrap 4 Admin Template By
|
||||
<a href="https://github.com/dropways" target="_blank">Ankit Hingarajiya</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- js -->
|
||||
<script src="{{ asset('/back/vendors/scripts/core.js') }}"></script>
|
||||
<script src="{{ asset('/back/vendors/scripts/script.min.js') }}"></script>
|
||||
<script src="{{ asset('/back/vendors/scripts/process.js') }}"></script>
|
||||
<script src="{{ asset('/back/vendors/scripts/layout-settings.js') }}"></script>
|
||||
<script src="{{ asset('/extra-assets/jquery-ui/jquery-ui.min.js') }}"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/toastr.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
|
||||
<script>
|
||||
toastr.options = {
|
||||
"closeButton": true,
|
||||
"newestOnTop": false,
|
||||
"progressBar": true,
|
||||
"positionClass": "toast-bottom-right",
|
||||
"preventDuplicates": false,
|
||||
"onclick": null,
|
||||
"showDuration": "300",
|
||||
"hideDuration": "1000",
|
||||
"timeOut": "5000",
|
||||
"extendedTimeOut": "1000",
|
||||
"showEasing": "swing",
|
||||
"hideEasing": "linear",
|
||||
"showMethod": "fadeIn",
|
||||
"hideMethod": "fadeOut"
|
||||
};
|
||||
|
||||
window.addEventListener("showToastr", function(event) {
|
||||
const type = event.detail[0].type; // z.B. 'success', 'error', 'info', 'warning'
|
||||
const message = event.detail[0].message; // Text der Meldung
|
||||
|
||||
const Toast = Swal.mixin({
|
||||
toast: true,
|
||||
position: "bottom-end",
|
||||
showConfirmButton: false,
|
||||
timer: 3000,
|
||||
timerProgressBar: true,
|
||||
didOpen: (toast) => {
|
||||
toast.onmouseenter = Swal.stopTimer;
|
||||
toast.onmouseleave = Swal.resumeTimer;
|
||||
}
|
||||
});
|
||||
Toast.fire({
|
||||
icon: type,
|
||||
title: message
|
||||
});
|
||||
|
||||
|
||||
// Dynamischer Aufruf: toastr.success(message), toastr.error(message) etc.
|
||||
/* if (typeof toastr[type] === 'function') {
|
||||
toastr[type](message);
|
||||
} else {
|
||||
// Fallback, falls ein unbekannter Typ kommt
|
||||
toastr.info(message);
|
||||
} */
|
||||
});
|
||||
</script>
|
||||
@kropifyScripts
|
||||
@stack('scripts')
|
||||
</body>
|
||||
|
||||
</html>
|
||||
269
resources/views/back/pages/add_post.blade.php
Normal file
269
resources/views/back/pages/add_post.blade.php
Normal file
@@ -0,0 +1,269 @@
|
||||
@extends('back.layout.pages-layout')
|
||||
@section('pageTitle', isset($pageTitle) ? $pageTitle : 'Page Title here')
|
||||
@section('content')
|
||||
<div class="page-header">
|
||||
<div class="row">
|
||||
<div class="col-md-6 col-sm-12">
|
||||
<div class="title">
|
||||
<h4>Post hinzufügen</h4>
|
||||
</div>
|
||||
<nav aria-label="breadcrumb" role="navigation">
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item">
|
||||
<a href="{{ route('admin.dashboard') }}">Home</a>
|
||||
</li>
|
||||
<li class="breadcrumb-item active" aria-current="page">
|
||||
Post erstellen
|
||||
</li>
|
||||
</ol>
|
||||
</nav>
|
||||
</div>
|
||||
<div class="col-md-6 col-sm-12 text-right">
|
||||
<a href="{{ route('admin.posts') }}" class="btn btn-primary">View all posts</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<form action="{{ route('admin.create_post') }}" method="POST" autocomplete="off" enctype="multipart/form-data"
|
||||
id="addPostForm">
|
||||
@csrf
|
||||
<div class="row">
|
||||
<div class="col-md-9">
|
||||
<div class="card card-box mb-2">
|
||||
<div class="card-body">
|
||||
<div class="form-group">
|
||||
<label for=""><b>Title:</b></label>
|
||||
<input type="text" class="form-control" name="title" placeholder="Titel angeben" />
|
||||
<span class="text-danger error-text title_error"></span>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for=""><b>Content:</b></label>
|
||||
<textarea name="content" id="content" cols="30" rows="10" class="ckeditor form-control"
|
||||
placeholder="Content eingeben"></textarea>
|
||||
<span class="text-danger error-text content_error"></span>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for=""><b>JSON FAQ:</b></label>
|
||||
<textarea name="structured_data" id="structured_data" cols="30" rows="10" class="form-control"
|
||||
placeholder="JSON FAQ eingeben"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card card-box mb-2">
|
||||
<div class="card-header weight-500">SEO</div>
|
||||
<div class="card-body">
|
||||
<div class="form-group">
|
||||
<label for=""><b>Post Meta Keywords:</b>: <small>(Separated by Komma)</small></label>
|
||||
<input type="text" class="form-control" name="meta_keywords"
|
||||
placeholder="Meta Keywords angeben" />
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for=""><b>Post Meta Beschreibung:</b></label>
|
||||
<textarea name="meta_description" id="" cols="30" rows="10" class="form-control"
|
||||
placeholder="Meta Beschreibung eingeben"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<div class="card card-box mb-2">
|
||||
<div class="card-body">
|
||||
<div class="form-group">
|
||||
<label for=""><b>Post Kategorie:</b></label>
|
||||
<select name="category" id="" class="custom-select form-control">
|
||||
<option value="">Auswählen..</option>
|
||||
{!! $categories_html !!}
|
||||
</select>
|
||||
<span class="text-danger error-text category_error"></span>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for=""><b>Post Featured Foto:</b></label>
|
||||
<input type="file" class="form-control-file form-control" name="featured_image"
|
||||
id="featured_image_input" height="auto" accept="image/png,image/jpeg, image/jpg" />
|
||||
<span class="text-danger error-text featured_image_error"></span>
|
||||
</div>
|
||||
<div class="d-block mb-3" style="max-width:250px;">
|
||||
<img src="" alt="featured_image" class="img-thumbnail" id="featured_image_preview" />
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for=""><b>Tags:</b></label>
|
||||
<input type="text" class="form-control" name="tags" data-role="tagsinput" />
|
||||
</div>
|
||||
<hr>
|
||||
<div class="form-group">
|
||||
<label for=""><b>Sichtbar:</b></label>
|
||||
<div class="custom-control custom-radio mb-5">
|
||||
<input type="radio" name="visibility" id="customRadio1" class="custom-control-input"
|
||||
value="1" checked />
|
||||
<label for="customRadio1" class="custom-control-label">Öffentlich</label>
|
||||
</div>
|
||||
<div class="custom-control custom-radio mb-5">
|
||||
<input type="radio" name="visibility" id="customRadio2" class="custom-control-input"
|
||||
value="0" />
|
||||
<label for="customRadio2" class="custom-control-label">Privat</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<button type="submit" class="btn btn-primary">Post erstellen</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
@endsection
|
||||
@push('stylesheets')
|
||||
<style>
|
||||
/* Schlichter Container */
|
||||
.bootstrap-tagsinput {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
/* Abstand zwischen Tags/Eingabe */
|
||||
width: 100%;
|
||||
min-height: 40px;
|
||||
padding: 6px 8px;
|
||||
background-color: #ffffff;
|
||||
border: 1px solid #d1d5db;
|
||||
border-radius: 6px;
|
||||
/* keine Ei-Form mehr */
|
||||
box-shadow: none;
|
||||
font-size: 14px;
|
||||
line-height: 1.4;
|
||||
cursor: text;
|
||||
}
|
||||
|
||||
/* Eingabefeld */
|
||||
.bootstrap-tagsinput input {
|
||||
border: none;
|
||||
box-shadow: none;
|
||||
outline: none;
|
||||
background: transparent;
|
||||
padding: 2px 0;
|
||||
margin: 0;
|
||||
min-width: 80px;
|
||||
max-width: 100%;
|
||||
font-size: 14px;
|
||||
color: #111827;
|
||||
}
|
||||
|
||||
/* Placeholder */
|
||||
.bootstrap-tagsinput.form-control input::-moz-placeholder {
|
||||
color: #9ca3af;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.bootstrap-tagsinput.form-control input:-ms-input-placeholder {
|
||||
color: #9ca3af;
|
||||
}
|
||||
|
||||
.bootstrap-tagsinput.form-control input::-webkit-input-placeholder {
|
||||
color: #9ca3af;
|
||||
}
|
||||
|
||||
/* Tags */
|
||||
.bootstrap-tagsinput .tag {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
padding: 2px 10px;
|
||||
border-radius: 999px;
|
||||
background: #2563eb;
|
||||
color: #ffffff;
|
||||
font-size: 13px;
|
||||
font-weight: 500;
|
||||
white-space: nowrap;
|
||||
margin: 0;
|
||||
/* Abstand kommt über gap */
|
||||
}
|
||||
|
||||
/* Remove-Icon */
|
||||
.bootstrap-tagsinput .tag [data-role="remove"] {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 14px;
|
||||
height: 14px;
|
||||
border-radius: 999px;
|
||||
cursor: pointer;
|
||||
font-size: 11px;
|
||||
line-height: 1;
|
||||
background-color: rgba(15, 23, 42, 0.25);
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
.bootstrap-tagsinput .tag [data-role="remove"]:after {
|
||||
content: "×";
|
||||
}
|
||||
|
||||
/* leichtes Hover nur auf dem Icon */
|
||||
.bootstrap-tagsinput .tag [data-role="remove"]:hover {
|
||||
background-color: rgba(15, 23, 42, 0.4);
|
||||
}
|
||||
</style>
|
||||
@endpush
|
||||
@push('scripts')
|
||||
<script src="/back/src/plugins/bootstrap-tagsinput/bootstrap-tagsinput.js"></script>
|
||||
<script src="/ckeditor/ckeditor.js"></script>
|
||||
// Image Preview
|
||||
<script>
|
||||
document.getElementById("featured_image_input").addEventListener("change", function(e) {
|
||||
const file = e.target.files[0];
|
||||
if (!file) return;
|
||||
|
||||
const reader = new FileReader();
|
||||
|
||||
reader.onload = function(event) {
|
||||
document.getElementById("featured_image_preview").src = event.target.result;
|
||||
};
|
||||
reader.readAsDataURL(file);
|
||||
});
|
||||
</script>
|
||||
// Create Post
|
||||
<script>
|
||||
$('#addPostForm').on('submit', function(e) {
|
||||
e.preventDefault();
|
||||
var form = this;
|
||||
var content = CKEDITOR.instances.content.getData();
|
||||
var formdata = new FormData(form);
|
||||
formdata.append('content', content);
|
||||
|
||||
$.ajax({
|
||||
url: $(form).attr('action'),
|
||||
method: $(form).attr('method'),
|
||||
data: formdata,
|
||||
processData: false,
|
||||
dataType: 'json',
|
||||
contentType: false,
|
||||
beforeSend: function() {
|
||||
$(form).find('span.error-text').text('');
|
||||
},
|
||||
success: function(data) {
|
||||
if (data.status == 1) {
|
||||
$(form)[0].reset();
|
||||
CKEDITOR.instances.content.setData('');
|
||||
$('img#featured_image_preview').attr('src', '');
|
||||
$('input[name="tags"]').tagsinput('removeAll');
|
||||
toastr.success(data.message);
|
||||
} else {
|
||||
toastr.error(data.message);
|
||||
}
|
||||
},
|
||||
error: function(jqXHR, textStatus, errorThrown) {
|
||||
console.log('AJAX error', textStatus, errorThrown);
|
||||
console.log('Response:', jqXHR);
|
||||
|
||||
if (jqXHR.responseJSON && jqXHR.responseJSON.errors) {
|
||||
$.each(jqXHR.responseJSON.errors, function(prefix, val) {
|
||||
$(form).find('span.' + prefix + '_error').text(val[0]);
|
||||
});
|
||||
} else {
|
||||
toastr.error('Es ist ein unerwarteter Fehler aufgetreten.');
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@endpush
|
||||
41
resources/views/back/pages/auth/forgot.blade.php
Normal file
41
resources/views/back/pages/auth/forgot.blade.php
Normal file
@@ -0,0 +1,41 @@
|
||||
@extends('back.layout.auth-layout')
|
||||
@section('pageTitle', isset($pageTitle) ? $pageTitle : 'Page Title here')
|
||||
@section('content')
|
||||
<div class="login-box bg-white box-shadow border-radius-10">
|
||||
<div class="login-title">
|
||||
<h2 class="text-center text-primary">Passwort vergessen</h2>
|
||||
</div>
|
||||
<form action="{{ route('admin.send_password_reset_link') }}" method="POST">
|
||||
<x-form-alerts></x-form-alerts>
|
||||
@csrf
|
||||
<div class="input-group custom mb-1">
|
||||
<input type="text" class="form-control form-control-lg" placeholder="Email" name="email"
|
||||
value="{{ old('email') }}" />
|
||||
<div class="input-group-append custom">
|
||||
<span class="input-group-text"><i class="fa fa-envelope-o" aria-hidden="true"></i></span>
|
||||
</div>
|
||||
</div>
|
||||
@error('email')
|
||||
<span class="text-danger ml-1">{{ $message }}</span>
|
||||
@enderror
|
||||
<div class="row align-items-center mb-1 mt-2">
|
||||
<div class="col-5">
|
||||
<div class="input-group mb-0">
|
||||
<input class="btn btn-primary btn-lg btn-block" type="submit" value="Absenden">
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-2">
|
||||
<div class="font-16 weight-600 text-center" data-color="#707373">
|
||||
ODER
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-5">
|
||||
<div class="input-group mb-0">
|
||||
<a class="btn btn-outline-primary btn-lg btn-block" href="{{ route('admin.login') }}">Einloggen</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
@endsection
|
||||
54
resources/views/back/pages/auth/login.blade.php
Normal file
54
resources/views/back/pages/auth/login.blade.php
Normal file
@@ -0,0 +1,54 @@
|
||||
@extends('back.layout.auth-layout')
|
||||
@section('pageTitle', isset($pageTitle) ? $pageTitle : 'Page Title here')
|
||||
@section('content')
|
||||
<div class="login-box bg-white box-shadow border-radius-10">
|
||||
<div class="login-title">
|
||||
<h2 class="text-center text-primary">Login</h2>
|
||||
</div>
|
||||
<form action="{{ route('admin.login_handler') }}" method="POST">
|
||||
<x-form-alerts></x-form-alerts>
|
||||
@csrf
|
||||
|
||||
<div class="input-group custom mb-1">
|
||||
<input type="text" class="form-control form-control-lg" placeholder="Benutzername / Email" name="login_id"
|
||||
value="{{ old('login_id') }}" />
|
||||
<div class="input-group-append custom">
|
||||
<span class="input-group-text"><i class="icon-copy dw dw-user1"></i></span>
|
||||
</div>
|
||||
</div>
|
||||
@error('login_id')
|
||||
<span class="text-danger ml-1">{{ $message }}</span>
|
||||
@enderror
|
||||
<div class="input-group custom mb-1 mt-2">
|
||||
<input type="password" class="form-control form-control-lg" placeholder="**********" name="password" />
|
||||
<div class="input-group-append custom">
|
||||
<span class="input-group-text"><i class="dw dw-padlock1"></i></span>
|
||||
</div>
|
||||
</div>
|
||||
@error('password')
|
||||
<span class="text-danger ml-1">{{ $message }}</span>
|
||||
@enderror
|
||||
<div class="row pb-30">
|
||||
<div class="col-6">
|
||||
<div class="custom-control custom-checkbox">
|
||||
<input type="checkbox" class="custom-control-input" id="customCheck1" />
|
||||
<label class="custom-control-label" for="customCheck1">Eingeloggt bleiben</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<div class="forgot-password">
|
||||
<a href="{{ route('admin.forgot') }}">Password vergessen</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
<div class="input-group mb-0">
|
||||
<input class="btn btn-primary btn-lg btn-block" type="submit" value="Einloggen">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
@endsection
|
||||
41
resources/views/back/pages/auth/reset.blade.php
Normal file
41
resources/views/back/pages/auth/reset.blade.php
Normal file
@@ -0,0 +1,41 @@
|
||||
@extends('back.layout.auth-layout')
|
||||
@section('pageTitle', isset($pageTitle) ? $pageTitle : 'Page Title here')
|
||||
@section('content')
|
||||
<div class="login-box bg-white box-shadow border-radius-10">
|
||||
<div class="login-title">
|
||||
<h2 class="text-center text-primary">Passwort zurücksetzen</h2>
|
||||
</div>
|
||||
<h6 class="mb-20">Geben Sie Ihr neues Passwort ein, bestätigen Sie es und senden Sie es ab.</h6>
|
||||
<form method="POST" action="{{ route('admin.reset_password_handler', ['token' => $token]) }}">
|
||||
<x-form-alerts></x-form-alerts>
|
||||
@csrf
|
||||
|
||||
<div class="input-group custom mb-1">
|
||||
<input type="text" class="form-control form-control-lg" placeholder="Neues Passwort" name="new_password" />
|
||||
<div class="input-group-append custom">
|
||||
<span class="input-group-text"><i class="dw dw-padlock1"></i></span>
|
||||
</div>
|
||||
</div>
|
||||
@error('new_password')
|
||||
<span class="text-danger ml-1">{{ $message }}</span>
|
||||
@enderror
|
||||
<div class="input-group custom mb-1 mt-2">
|
||||
<input type="text" class="form-control form-control-lg" placeholder="Neues Passwort bestätigen"
|
||||
name="new_password_confirm" />
|
||||
<div class="input-group-append custom">
|
||||
<span class="input-group-text"><i class="dw dw-padlock1"></i></span>
|
||||
</div>
|
||||
</div>
|
||||
@error('new_password_confirm')
|
||||
<span class="text-danger ml-1">{{ $message }}</span>
|
||||
@enderror
|
||||
<div class="row align-items-center">
|
||||
<div class="col-5">
|
||||
<div class="input-group mb-0">
|
||||
<input class="btn btn-primary btn-lg btn-block" type="submit" value="Absenden">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
@endsection
|
||||
94
resources/views/back/pages/categories_page.blade.php
Normal file
94
resources/views/back/pages/categories_page.blade.php
Normal file
@@ -0,0 +1,94 @@
|
||||
@extends('back.layout.pages-layout')
|
||||
@section('pageTitle', isset($pageTitle) ? $pageTitle : 'Page Title here')
|
||||
@section('content')
|
||||
|
||||
@livewire('admin.categories')
|
||||
@endsection
|
||||
|
||||
@push('scripts')
|
||||
<script>
|
||||
window.addEventListener("showParentCategoryModalForm", function() {
|
||||
$('#pcategory_modal').modal("show");
|
||||
});
|
||||
|
||||
window.addEventListener("hideParentCategoryModalForm", function() {
|
||||
$('#pcategory_modal').modal("hide");
|
||||
});
|
||||
|
||||
window.addEventListener("showCategoryModalForm", function() {
|
||||
$('#category_modal').modal("show");
|
||||
});
|
||||
|
||||
window.addEventListener("hideCategoryModalForm", function() {
|
||||
$('#category_modal').modal("hide");
|
||||
});
|
||||
|
||||
$('table tbody#sortable_parent_categories').sortable({
|
||||
cursor: "move",
|
||||
update: function(event, ui) {
|
||||
$(this).children().each(function(index) {
|
||||
if ($(this).attr('data-ordering') != (index + 1)) {
|
||||
$(this).attr('data-ordering', (index + 1)).addClass('updated');
|
||||
}
|
||||
});
|
||||
var positions = [];
|
||||
$('.updated').each(function() {
|
||||
positions.push([$(this).attr('data-index'), $(this).attr('data-ordering')]);
|
||||
$(this).removeClass('updated');
|
||||
});
|
||||
Livewire.dispatch('updateParentCategoryOrdering', [positions]);
|
||||
}
|
||||
});
|
||||
|
||||
$('table tbody#sortable_categories').sortable({
|
||||
cursor: "move",
|
||||
update: function(event, ui) {
|
||||
$(this).children().each(function(index) {
|
||||
if ($(this).attr('data-ordering') != (index + 1)) {
|
||||
$(this).attr('data-ordering', (index + 1)).addClass('updated');
|
||||
}
|
||||
});
|
||||
var positions = [];
|
||||
$('.updated').each(function() {
|
||||
positions.push([$(this).attr('data-index'), $(this).attr('data-ordering')]);
|
||||
$(this).removeClass('updated');
|
||||
});
|
||||
Livewire.dispatch('updateCategoryOrdering', [positions]);
|
||||
}
|
||||
});
|
||||
|
||||
window.addEventListener('deleteParentCategory', function(event) {
|
||||
var id = event.detail[0].id;
|
||||
Swal.fire({
|
||||
title: "Bist du dir sicher?",
|
||||
text: "Das du die Haupt Kategorie löschen möchtest!",
|
||||
icon: "warning",
|
||||
showCancelButton: true,
|
||||
confirmButtonColor: "#3085d6",
|
||||
cancelButtonColor: "#d33",
|
||||
confirmButtonText: "Ja, löschen!"
|
||||
}).then((result) => {
|
||||
if (result.isConfirmed) {
|
||||
Livewire.dispatch('deleteParentCategoryAction', [id]);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
window.addEventListener('deleteCategory', function(event) {
|
||||
var id = event.detail[0].id;
|
||||
Swal.fire({
|
||||
title: "Bist du dir sicher?",
|
||||
text: "Das du die Kategorie löschen möchtest!",
|
||||
icon: "warning",
|
||||
showCancelButton: true,
|
||||
confirmButtonColor: "#3085d6",
|
||||
cancelButtonColor: "#d33",
|
||||
confirmButtonText: "Ja, löschen!"
|
||||
}).then((result) => {
|
||||
if (result.isConfirmed) {
|
||||
Livewire.dispatch('deleteCategoryAction', [id]);
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@endpush
|
||||
342
resources/views/back/pages/dashboard.blade.php
Normal file
342
resources/views/back/pages/dashboard.blade.php
Normal file
@@ -0,0 +1,342 @@
|
||||
@extends('back.layout.pages-layout')
|
||||
@section('pageTitle', isset($pageTitle) ? $pageTitle : 'Page Title here')
|
||||
@section('content')
|
||||
<div class="container-fluid py-4">
|
||||
|
||||
{{-- Überschrift, falls du sie brauchst --}}
|
||||
<div class="mb-4">
|
||||
<h1 class="h3 mb-0">{{ $pageTitle ?? 'Dashboard' }}</h1>
|
||||
</div>
|
||||
|
||||
{{-- KPI-Karten: Tags / Posts / Subscriber --}}
|
||||
<div class="row g-3 mb-4">
|
||||
|
||||
{{-- Tags (deine Zähl-Logik) --}}
|
||||
<div class="col-12 col-md-4">
|
||||
<div class="card h-100 shadow-sm">
|
||||
<div class="card-body">
|
||||
<div class="d-flex justify-content-between align-items-start mb-2">
|
||||
<small class="text-muted text-uppercase fw-semibold">Tags</small>
|
||||
<span class="badge bg-primary-subtle text-primary border border-primary-subtle">
|
||||
Stückanzahl
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<h3 class="fw-semibold mb-1">
|
||||
{{ $tagsCount ?? 0 }}
|
||||
</h3>
|
||||
<small class="text-muted">Gesamtzahl (laut Feld <code>tags</code>)</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- Posts --}}
|
||||
<div class="col-12 col-md-4">
|
||||
<div class="card h-100 shadow-sm">
|
||||
<div class="card-body">
|
||||
<div class="d-flex justify-content-between align-items-start mb-2">
|
||||
<small class="text-muted text-uppercase fw-semibold">Posts</small>
|
||||
<span class="badge bg-success-subtle text-success border border-success-subtle">
|
||||
Stückanzahl
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<h3 class="fw-semibold mb-1">
|
||||
{{ $postsCount ?? 0 }}
|
||||
</h3>
|
||||
<small class="text-muted">Gesamtzahl der Posts</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- Subscriber --}}
|
||||
<div class="col-12 col-md-4">
|
||||
<div class="card h-100 shadow-sm">
|
||||
<div class="card-body">
|
||||
<div class="d-flex justify-content-between align-items-start mb-2">
|
||||
<small class="text-muted text-uppercase fw-semibold">Subscriber</small>
|
||||
<span class="badge bg-info-subtle text-info border border-info-subtle">
|
||||
Stückanzahl
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<h3 class="fw-semibold mb-1">
|
||||
{{ $subscribersCount ?? 0 }}
|
||||
</h3>
|
||||
<small class="text-muted">Gesamtzahl der Abonnenten</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- SEO / Content-Checks: KPIs --}}
|
||||
<div class="row g-3 mb-4">
|
||||
|
||||
{{-- Posts ohne Meta-Beschreibung --}}
|
||||
<div class="col-12 col-md-4">
|
||||
<div class="card h-100 shadow-sm border-warning-subtle">
|
||||
<div class="card-body">
|
||||
<div class="d-flex justify-content-between align-items-start mb-2">
|
||||
<small class="text-muted text-uppercase fw-semibold">
|
||||
Posts ohne Meta-Beschreibung
|
||||
</small>
|
||||
<span
|
||||
class="badge
|
||||
{{ ($postsWithoutMetaDescriptionCount ?? 0) > 0
|
||||
? 'bg-warning-subtle text-warning border border-warning-subtle'
|
||||
: 'bg-success-subtle text-success border border-success-subtle' }}">
|
||||
{{ ($postsWithoutMetaDescriptionCount ?? 0) > 0 ? 'Optimieren' : 'OK' }}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<h3 class="fw-semibold mb-1">
|
||||
{{ $postsWithoutMetaDescriptionCount ?? 0 }}
|
||||
</h3>
|
||||
<small class="text-muted">Anzahl Beiträge ohne Meta-Description</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- Posts ohne Meta-Keywords --}}
|
||||
<div class="col-12 col-md-4">
|
||||
<div class="card h-100 shadow-sm border-warning-subtle">
|
||||
<div class="card-body">
|
||||
<div class="d-flex justify-content-between align-items-start mb-2">
|
||||
<small class="text-muted text-uppercase fw-semibold">
|
||||
Posts ohne Meta-Keywords
|
||||
</small>
|
||||
<span
|
||||
class="badge
|
||||
{{ ($postsWithoutMetaKeywordsCount ?? 0) > 0
|
||||
? 'bg-warning-subtle text-warning border border-warning-subtle'
|
||||
: 'bg-success-subtle text-success border border-success-subtle' }}">
|
||||
{{ ($postsWithoutMetaKeywordsCount ?? 0) > 0 ? 'Optimieren' : 'OK' }}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<h3 class="fw-semibold mb-1">
|
||||
{{ $postsWithoutMetaKeywordsCount ?? 0 }}
|
||||
</h3>
|
||||
<small class="text-muted">Anzahl Beiträge ohne Meta-Keywords</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- Posts ohne Tags --}}
|
||||
<div class="col-12 col-md-4">
|
||||
<div class="card h-100 shadow-sm border-warning-subtle">
|
||||
<div class="card-body">
|
||||
<div class="d-flex justify-content-between align-items-start mb-2">
|
||||
<small class="text-muted text-uppercase fw-semibold">
|
||||
Posts ohne Tags
|
||||
</small>
|
||||
<span
|
||||
class="badge
|
||||
{{ ($postsWithoutTagsCount ?? 0) > 0
|
||||
? 'bg-warning-subtle text-warning border border-warning-subtle'
|
||||
: 'bg-success-subtle text-success border border-success-subtle' }}">
|
||||
{{ ($postsWithoutTagsCount ?? 0) > 0 ? 'Optimieren' : 'OK' }}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<h3 class="fw-semibold mb-1">
|
||||
{{ $postsWithoutTagsCount ?? 0 }}
|
||||
</h3>
|
||||
<small class="text-muted">Beiträge ohne Eintrag im Feld <code>tags</code></small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- Letzte 5 Beiträge --}}
|
||||
<div class="card shadow-sm mb-4">
|
||||
<div class="card-header d-flex justify-content-between align-items-center">
|
||||
<h6 class="card-title mb-0">Letzte 5 Beiträge</h6>
|
||||
|
||||
@if (Route::has('posts.index'))
|
||||
<a href="{{ route('posts.index') }}" class="small text-decoration-none">
|
||||
Alle anzeigen
|
||||
</a>
|
||||
@endif
|
||||
</div>
|
||||
|
||||
<div class="table-responsive">
|
||||
<table class="table table-sm align-middle mb-0">
|
||||
<thead class="table-light">
|
||||
<tr>
|
||||
<th>Titel</th>
|
||||
<th>Status</th>
|
||||
<th>SEO</th>
|
||||
<th>Erstellt am</th>
|
||||
<th class="text-end">Aktionen</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
@forelse($latestPosts as $post)
|
||||
@php
|
||||
$needsOptimization =
|
||||
empty($post->meta_keywords) || empty($post->tags) || empty($post->meta_description); // ggf. Feldname anpassen (z.B. meta_title)
|
||||
@endphp
|
||||
<tr>
|
||||
<td>
|
||||
@if (Route::has('posts.edit'))
|
||||
<a href="{{ route('posts.edit', $post) }}" class="text-decoration-none">
|
||||
{{ $post->title }}
|
||||
</a>
|
||||
@else
|
||||
{{ $post->title }}
|
||||
@endif
|
||||
</td>
|
||||
|
||||
<td>
|
||||
@if ($post->visibility == 1)
|
||||
<span class="badge bg-success-subtle text-success border border-success-subtle">
|
||||
Veröffentlicht
|
||||
</span>
|
||||
@else
|
||||
<span
|
||||
class="badge bg-secondary-subtle text-secondary border border-secondary-subtle">
|
||||
Entwurf
|
||||
</span>
|
||||
@endif
|
||||
</td>
|
||||
|
||||
<td>
|
||||
@if ($needsOptimization)
|
||||
<span class="badge bg-warning-subtle text-warning border border-warning-subtle">
|
||||
Optimieren
|
||||
</span>
|
||||
@else
|
||||
<span class="badge bg-success-subtle text-success border border-success-subtle">
|
||||
OK
|
||||
</span>
|
||||
@endif
|
||||
</td>
|
||||
<td>
|
||||
<small class="text-muted">
|
||||
{{ $post->created_at->format('d.m.Y H:i') }}
|
||||
</small>
|
||||
</td>
|
||||
<td class="text-end">
|
||||
{{-- Anschauen --}}
|
||||
@if (Route::has('read_post'))
|
||||
<a href="{{ route('read_post', $post->slug) }}"
|
||||
class="btn btn-sm btn-outline-secondary">
|
||||
Anschauen
|
||||
</a>
|
||||
@endif
|
||||
|
||||
{{-- Bearbeiten --}}
|
||||
@if (Route::has('admin.edit_post'))
|
||||
<a href="{{ route('admin.edit_post', $post) }}"
|
||||
class="btn btn-sm btn-primary ms-1">
|
||||
Bearbeiten
|
||||
</a>
|
||||
@endif
|
||||
</td>
|
||||
</tr>
|
||||
@empty
|
||||
<tr>
|
||||
<td colspan="3" class="text-center text-muted py-4">
|
||||
Keine Beiträge vorhanden.
|
||||
</td>
|
||||
</tr>
|
||||
@endforelse
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- Detail-Listen: Posts ohne Meta / Tags --}}
|
||||
<div class="card shadow-sm">
|
||||
<div class="card-header">
|
||||
<h6 class="card-title mb-0">Beiträge mit Optimierungsbedarf</h6>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="row g-3">
|
||||
|
||||
{{-- Ohne Meta-Beschreibung --}}
|
||||
<div class="col-12 col-md-4">
|
||||
<h6 class="small text-uppercase text-muted mb-2">
|
||||
Ohne Meta-Beschreibung
|
||||
</h6>
|
||||
<ul class="list-unstyled mb-0 small">
|
||||
@forelse($postsWithoutMetaDescription as $post)
|
||||
<li class="mb-2">
|
||||
@if (Route::has('posts.edit'))
|
||||
<a href="{{ route('posts.edit', $post) }}" class="text-decoration-none">
|
||||
{{ $post->title }}
|
||||
</a>
|
||||
@else
|
||||
{{ $post->title }}
|
||||
@endif
|
||||
<br>
|
||||
<span class="text-muted">
|
||||
{{ $post->created_at->format('d.m.Y') }}
|
||||
</span>
|
||||
</li>
|
||||
@empty
|
||||
<li class="text-muted">Alles erledigt.</li>
|
||||
@endforelse
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
{{-- Ohne Meta-Keywords --}}
|
||||
<div class="col-12 col-md-4">
|
||||
<h6 class="small text-uppercase text-muted mb-2">
|
||||
Ohne Meta-Keywords
|
||||
</h6>
|
||||
<ul class="list-unstyled mb-0 small">
|
||||
@forelse($postsWithoutMetaKeywords as $post)
|
||||
<li class="mb-2">
|
||||
@if (Route::has('posts.edit'))
|
||||
<a href="{{ route('posts.edit', $post) }}" class="text-decoration-none">
|
||||
{{ $post->title }}
|
||||
</a>
|
||||
@else
|
||||
{{ $post->title }}
|
||||
@endif
|
||||
<br>
|
||||
<span class="text-muted">
|
||||
{{ $post->created_at->format('d.m.Y') }}
|
||||
</span>
|
||||
</li>
|
||||
@empty
|
||||
<li class="text-muted">Alles erledigt.</li>
|
||||
@endforelse
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
{{-- Ohne Tags --}}
|
||||
<div class="col-12 col-md-4">
|
||||
<h6 class="small text-uppercase text-muted mb-2">
|
||||
Ohne Tags
|
||||
</h6>
|
||||
<ul class="list-unstyled mb-0 small">
|
||||
@forelse($postsWithoutTags as $post)
|
||||
<li class="mb-2">
|
||||
@if (Route::has('posts.edit'))
|
||||
<a href="{{ route('posts.edit', $post) }}" class="text-decoration-none">
|
||||
{{ $post->title }}
|
||||
</a>
|
||||
@else
|
||||
{{ $post->title }}
|
||||
@endif
|
||||
<br>
|
||||
<span class="text-muted">
|
||||
{{ $post->created_at->format('d.m.Y') }}
|
||||
</span>
|
||||
</li>
|
||||
@empty
|
||||
<li class="text-muted">Alles erledigt.</li>
|
||||
@endforelse
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@endsection
|
||||
268
resources/views/back/pages/edit_post.blade.php
Normal file
268
resources/views/back/pages/edit_post.blade.php
Normal file
@@ -0,0 +1,268 @@
|
||||
@extends('back.layout.pages-layout')
|
||||
@section('pageTitle', isset($pageTitle) ? $pageTitle : 'Page Title here')
|
||||
@section('content')
|
||||
<div class="page-header">
|
||||
<div class="row">
|
||||
<div class="col-md-6 col-sm-12">
|
||||
<div class="title">
|
||||
<h4>Post bearbeiten</h4>
|
||||
</div>
|
||||
<nav aria-label="breadcrumb" role="navigation">
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item">
|
||||
<a href="{{ route('admin.dashboard') }}">Home</a>
|
||||
</li>
|
||||
<li class="breadcrumb-item active" aria-current="page">
|
||||
Post bearbeiten
|
||||
</li>
|
||||
</ol>
|
||||
</nav>
|
||||
</div>
|
||||
<div class="col-md-6 col-sm-12 text-right">
|
||||
<a href="{{ route('admin.posts') }}" class="btn btn-primary">View all posts</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<form action="{{ route('admin.update_post', ['post_id' => $post->id]) }}" method="POST" autocomplete="off"
|
||||
enctype="multipart/form-data" id="updatePostForm">
|
||||
@csrf
|
||||
<div class="row">
|
||||
<div class="col-md-9">
|
||||
<div class="card card-box mb-2">
|
||||
<div class="card-body">
|
||||
<div class="form-group">
|
||||
<label for=""><b>Title:</b></label>
|
||||
<input type="text" class="form-control" name="title" placeholder="Titel angeben"
|
||||
value="{{ $post->title }}" />
|
||||
<span class="text-danger error-text title_error"></span>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for=""><b>Content:</b></label>
|
||||
<textarea name="content" id="content" cols="30" rows="10" class="ckeditor form-control"
|
||||
placeholder="Content eingeben">{!! $post->content !!}</textarea>
|
||||
<span class="text-danger error-text content_error"></span>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for=""><b>JSON FAQ:</b></label>
|
||||
<textarea name="structured_data" id="structured_data" cols="30" rows="10" class="form-control"
|
||||
placeholder="JSON FAQ eingeben">{!! $post->structured_data !!}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card card-box mb-2">
|
||||
<div class="card-header weight-500">SEO</div>
|
||||
<div class="card-body">
|
||||
<div class="form-group">
|
||||
<label for=""><b>Post Meta Keywords:</b>: <small>(Separated by Komma)</small></label>
|
||||
<input type="text" class="form-control" name="meta_keywords"
|
||||
value="{{ $post->meta_keywords }}" placeholder="Meta Keywords angeben" />
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for=""><b>Post Meta Beschreibung:</b></label>
|
||||
<textarea name="meta_description" id="" cols="30" rows="10" class="form-control"
|
||||
placeholder="Meta Beschreibung eingeben">{{ $post->meta_description }}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<div class="card card-box mb-2">
|
||||
<div class="card-body">
|
||||
<div class="form-group">
|
||||
<label for=""><b>Post Kategorie:</b></label>
|
||||
<select name="category" id="" class="custom-select form-control">
|
||||
{!! $categories_html !!}
|
||||
</select>
|
||||
<span class="text-danger error-text category_error"></span>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for=""><b>Post Featured Foto:</b></label>
|
||||
<input type="file" class="form-control-file form-control" name="featured_image"
|
||||
id="featured_image_input" height="auto" accept="image/png,image/jpeg, image/jpg" />
|
||||
<span class="text-danger error-text featured_image_error"></span>
|
||||
</div>
|
||||
<div class="d-block mb-3" style="max-width:250px;">
|
||||
<img src="/images/posts/resized/resized_{{ $post->featured_image }}" alt="featured_image"
|
||||
class="img-thumbnail" id="featured_image_preview" />
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for=""><b>Tags:</b></label>
|
||||
<input type="text" class="form-control" name="tags" data-role="tagsinput"
|
||||
value="{{ $post->tags }}" />
|
||||
</div>
|
||||
<hr>
|
||||
<div class="form-group">
|
||||
<label for=""><b>Sichtbar:</b></label>
|
||||
<div class="custom-control custom-radio mb-5">
|
||||
<input type="radio" name="visibility" id="customRadio1" class="custom-control-input"
|
||||
value="1" {{ $post->visibility == 1 ? 'checked' : '' }} />
|
||||
<label for="customRadio1" class="custom-control-label">Öffentlich</label>
|
||||
</div>
|
||||
<div class="custom-control custom-radio mb-5">
|
||||
<input type="radio" name="visibility" id="customRadio2" class="custom-control-input"
|
||||
value="0" {{ $post->visibility == 0 ? 'checked' : '' }} />
|
||||
<label for="customRadio2" class="custom-control-label">Privat</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<button type="submit" class="btn btn-primary">Post bearbeiten</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
@endsection
|
||||
@push('stylesheets')
|
||||
<style>
|
||||
/* Schlichter Container */
|
||||
.bootstrap-tagsinput {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
/* Abstand zwischen Tags/Eingabe */
|
||||
width: 100%;
|
||||
min-height: 40px;
|
||||
padding: 6px 8px;
|
||||
background-color: #ffffff;
|
||||
border: 1px solid #d1d5db;
|
||||
border-radius: 6px;
|
||||
/* keine Ei-Form mehr */
|
||||
box-shadow: none;
|
||||
font-size: 14px;
|
||||
line-height: 1.4;
|
||||
cursor: text;
|
||||
}
|
||||
|
||||
/* Eingabefeld */
|
||||
.bootstrap-tagsinput input {
|
||||
border: none;
|
||||
box-shadow: none;
|
||||
outline: none;
|
||||
background: transparent;
|
||||
padding: 2px 0;
|
||||
margin: 0;
|
||||
min-width: 80px;
|
||||
max-width: 100%;
|
||||
font-size: 14px;
|
||||
color: #111827;
|
||||
}
|
||||
|
||||
/* Placeholder */
|
||||
.bootstrap-tagsinput.form-control input::-moz-placeholder {
|
||||
color: #9ca3af;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.bootstrap-tagsinput.form-control input:-ms-input-placeholder {
|
||||
color: #9ca3af;
|
||||
}
|
||||
|
||||
.bootstrap-tagsinput.form-control input::-webkit-input-placeholder {
|
||||
color: #9ca3af;
|
||||
}
|
||||
|
||||
/* Tags */
|
||||
.bootstrap-tagsinput .tag {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
padding: 2px 10px;
|
||||
border-radius: 999px;
|
||||
background: #2563eb;
|
||||
color: #ffffff;
|
||||
font-size: 13px;
|
||||
font-weight: 500;
|
||||
white-space: nowrap;
|
||||
margin: 0;
|
||||
/* Abstand kommt über gap */
|
||||
}
|
||||
|
||||
/* Remove-Icon */
|
||||
.bootstrap-tagsinput .tag [data-role="remove"] {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 14px;
|
||||
height: 14px;
|
||||
border-radius: 999px;
|
||||
cursor: pointer;
|
||||
font-size: 11px;
|
||||
line-height: 1;
|
||||
background-color: rgba(15, 23, 42, 0.25);
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
.bootstrap-tagsinput .tag [data-role="remove"]:after {
|
||||
content: "×";
|
||||
}
|
||||
|
||||
/* leichtes Hover nur auf dem Icon */
|
||||
.bootstrap-tagsinput .tag [data-role="remove"]:hover {
|
||||
background-color: rgba(15, 23, 42, 0.4);
|
||||
}
|
||||
</style>
|
||||
@endpush
|
||||
@push('scripts')
|
||||
<script src="/back/src/plugins/bootstrap-tagsinput/bootstrap-tagsinput.js"></script>
|
||||
<script src="/ckeditor/ckeditor.js"></script>
|
||||
// Image Preview
|
||||
<script>
|
||||
document.getElementById("featured_image_input").addEventListener("change", function(e) {
|
||||
const file = e.target.files[0];
|
||||
if (!file) return;
|
||||
|
||||
const reader = new FileReader();
|
||||
|
||||
reader.onload = function(event) {
|
||||
document.getElementById("featured_image_preview").src = event.target.result;
|
||||
};
|
||||
reader.readAsDataURL(file);
|
||||
});
|
||||
</script>
|
||||
// Create Post
|
||||
<script>
|
||||
$('#updatePostForm').on('submit', function(e) {
|
||||
e.preventDefault();
|
||||
var form = this;
|
||||
var content = CKEDITOR.instances.content.getData();
|
||||
var formdata = new FormData(form);
|
||||
formdata.append('content', content);
|
||||
|
||||
$.ajax({
|
||||
url: $(form).attr('action'),
|
||||
method: $(form).attr('method'),
|
||||
data: formdata,
|
||||
processData: false,
|
||||
dataType: 'json',
|
||||
contentType: false,
|
||||
beforeSend: function() {
|
||||
$(form).find('span.error-text').text('');
|
||||
},
|
||||
success: function(data) {
|
||||
if (data.status == 1) {
|
||||
$(form)[0].reset();
|
||||
toastr.success(data.message);
|
||||
} else {
|
||||
toastr.error(data.message);
|
||||
}
|
||||
},
|
||||
error: function(jqXHR, textStatus, errorThrown) {
|
||||
console.log('AJAX error', textStatus, errorThrown);
|
||||
console.log('Response:', jqXHR);
|
||||
|
||||
if (jqXHR.responseJSON && jqXHR.responseJSON.errors) {
|
||||
$.each(jqXHR.responseJSON.errors, function(prefix, val) {
|
||||
$(form).find('span.' + prefix + '_error').text(val[0]);
|
||||
});
|
||||
} else {
|
||||
toastr.error('Es ist ein unerwarteter Fehler aufgetreten.');
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@endpush
|
||||
179
resources/views/back/pages/general_settings.blade.php
Normal file
179
resources/views/back/pages/general_settings.blade.php
Normal file
@@ -0,0 +1,179 @@
|
||||
@extends('back.layout.pages-layout')
|
||||
@section('pageTitle', isset($pageTitle) ? $pageTitle : 'Page Title here')
|
||||
@section('content')
|
||||
|
||||
<div class="page-header">
|
||||
<div class="row">
|
||||
<div class="col-md-12 col-sm-12">
|
||||
<div class="title">
|
||||
<h4>Einstellungen</h4>
|
||||
</div>
|
||||
<nav aria-label="breadcrumb" role="navigation">
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item">
|
||||
<a href="{{ route('admin.dashboard') }}">Home</a>
|
||||
</li>
|
||||
<li class="breadcrumb-item active" aria-current="page">
|
||||
Allgemeine Einstellungen
|
||||
</li>
|
||||
</ol>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="pd-20 card-box mb-4">
|
||||
@livewire('admin.settings')
|
||||
</div>
|
||||
|
||||
@endsection
|
||||
|
||||
@push('scripts')
|
||||
<script>
|
||||
document.getElementById("profileLogoFile").addEventListener("change", function(e) {
|
||||
const file = e.target.files[0];
|
||||
if (!file) return;
|
||||
|
||||
const reader = new FileReader();
|
||||
|
||||
reader.onload = function(event) {
|
||||
document.getElementById("preview_site_logo").src = event.target.result;
|
||||
};
|
||||
reader.readAsDataURL(file);
|
||||
});
|
||||
|
||||
$("#updateLogoForm").submit(function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
var form = this;
|
||||
var inputVal = $(form).find('input[type="file"]').val();
|
||||
var errorElement = $(form).find('span.text-danger');
|
||||
errorElement.text('');
|
||||
|
||||
if (inputVal.length > 0) {
|
||||
|
||||
$.ajax({
|
||||
url: $(form).attr('action'),
|
||||
method: $(form).attr('method'),
|
||||
data: new FormData(form),
|
||||
processData: false,
|
||||
dataType: 'json',
|
||||
contentType: false,
|
||||
|
||||
success: function(data) {
|
||||
|
||||
toastr.options = {
|
||||
closeButton: true,
|
||||
newestOnTop: false,
|
||||
progressBar: true,
|
||||
positionClass: "toast-bottom-right",
|
||||
preventDuplicates: false,
|
||||
onclick: null,
|
||||
showDuration: "300",
|
||||
hideDuration: "1000",
|
||||
timeOut: "5000",
|
||||
extendedTimeOut: "1000",
|
||||
showEasing: "swing",
|
||||
hideEasing: "linear",
|
||||
showMethod: "fadeIn",
|
||||
hideMethod: "fadeOut"
|
||||
};
|
||||
|
||||
if (data.status == 1) {
|
||||
|
||||
// Erfolgsnachricht aus RESPONSE
|
||||
toastr.success(data.message);
|
||||
|
||||
$(form)[0].reset();
|
||||
|
||||
// Alle Logos aktualisieren
|
||||
$('img.site_logo').each(function() {
|
||||
$(this).attr('src', '/' + data.image_path);
|
||||
});
|
||||
|
||||
} else {
|
||||
toastr.error(data.message || "Es ist ein Fehler aufgetreten.");
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
} else {
|
||||
errorElement.text('Bitte, wähle ein Foto');
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<script>
|
||||
document.getElementById("profileFaviconFile").addEventListener("change", function(e) {
|
||||
const file = e.target.files[0];
|
||||
if (!file) return;
|
||||
|
||||
const reader = new FileReader();
|
||||
|
||||
reader.onload = function(event) {
|
||||
document.getElementById("preview_site_favicon").src = event.target.result;
|
||||
};
|
||||
reader.readAsDataURL(file);
|
||||
});
|
||||
|
||||
$("#updateFaviconForm").submit(function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
var form = this;
|
||||
var inputVal = $(form).find('input[type="file"]').val();
|
||||
var errorElement = $(form).find('span.text-danger');
|
||||
errorElement.text('');
|
||||
|
||||
if (inputVal.length > 0) {
|
||||
|
||||
$.ajax({
|
||||
url: $(form).attr('action'),
|
||||
method: $(form).attr('method'),
|
||||
data: new FormData(form),
|
||||
processData: false,
|
||||
dataType: 'json',
|
||||
contentType: false,
|
||||
|
||||
success: function(data) {
|
||||
|
||||
toastr.options = {
|
||||
closeButton: true,
|
||||
newestOnTop: false,
|
||||
progressBar: true,
|
||||
positionClass: "toast-bottom-right",
|
||||
preventDuplicates: false,
|
||||
onclick: null,
|
||||
showDuration: "300",
|
||||
hideDuration: "1000",
|
||||
timeOut: "5000",
|
||||
extendedTimeOut: "1000",
|
||||
showEasing: "swing",
|
||||
hideEasing: "linear",
|
||||
showMethod: "fadeIn",
|
||||
hideMethod: "fadeOut"
|
||||
};
|
||||
|
||||
if (data.status == 1) {
|
||||
|
||||
// Erfolgsnachricht aus RESPONSE
|
||||
toastr.success(data.message);
|
||||
|
||||
$(form)[0].reset();
|
||||
|
||||
// Alle Logos aktualisieren
|
||||
$('img.site_favicon').each(function() {
|
||||
$(this).attr('src', '/' + data.image_path);
|
||||
});
|
||||
|
||||
} else {
|
||||
toastr.error(data.message || "Es ist ein Fehler aufgetreten.");
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
} else {
|
||||
errorElement.text('Bitte, wähle ein Foto');
|
||||
}
|
||||
});
|
||||
</script>
|
||||
@endpush
|
||||
@push('stylesheets')
|
||||
49
resources/views/back/pages/posts.blade.php
Normal file
49
resources/views/back/pages/posts.blade.php
Normal file
@@ -0,0 +1,49 @@
|
||||
@extends('back.layout.pages-layout')
|
||||
@section('pageTitle', isset($pageTitle) ? $pageTitle : 'Page Title here')
|
||||
@section('content')
|
||||
|
||||
<div class="page-header">
|
||||
<div class="row">
|
||||
<div class="col-md-6 col-sm-12">
|
||||
<div class="title">
|
||||
<h4>Alle Posts</h4>
|
||||
</div>
|
||||
<nav aria-label="breadcrumb" role="navigation">
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item">
|
||||
<a href="{{ route('admin.dashboard') }}">Home</a>
|
||||
</li>
|
||||
<li class="breadcrumb-item active" aria-current="page">
|
||||
Posts
|
||||
</li>
|
||||
</ol>
|
||||
</nav>
|
||||
</div>
|
||||
<div class="col-md-6 col-sm-12 text-right">
|
||||
<a href="{{ route('admin.add_post') }}" class="btn btn-primary">
|
||||
<i class="icon-copy bi bi-plus-circle"></i> Post hinzufügen</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@livewire('admin.posts')
|
||||
@endsection
|
||||
@push('scripts')
|
||||
<script>
|
||||
window.addEventListener('deletePost', function(event) {
|
||||
var id = event.detail[0].id;
|
||||
Swal.fire({
|
||||
title: "Bist du dir sicher?",
|
||||
text: "Das du den Post löschen möchtest!",
|
||||
icon: "warning",
|
||||
showCancelButton: true,
|
||||
confirmButtonColor: "#3085d6",
|
||||
cancelButtonColor: "#d33",
|
||||
confirmButtonText: "Ja, löschen!"
|
||||
}).then((result) => {
|
||||
if (result.isConfirmed) {
|
||||
Livewire.dispatch('deletePostAction', [id]);
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@endpush
|
||||
99
resources/views/back/pages/profile.blade.php
Normal file
99
resources/views/back/pages/profile.blade.php
Normal file
@@ -0,0 +1,99 @@
|
||||
@extends('back.layout.pages-layout')
|
||||
@section('pageTitle', isset($pageTitle) ? $pageTitle : 'Page Title here')
|
||||
@section('content')
|
||||
|
||||
<div class="page-header">
|
||||
<div class="row">
|
||||
<div class="col-md-12 col-sm-12">
|
||||
<div class="title">
|
||||
<h4>Profile</h4>
|
||||
</div>
|
||||
<nav aria-label="breadcrumb" role="navigation">
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item">
|
||||
<a href="{{ route('admin.dashboard') }}">Home</a>
|
||||
</li>
|
||||
<li class="breadcrumb-item active" aria-current="page">
|
||||
Profile
|
||||
</li>
|
||||
</ol>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@livewire('admin.profile')
|
||||
@push('scripts')
|
||||
<script>
|
||||
const cropper = new Kropify('input[type="file"][id="profilePictureFile"]', {
|
||||
aspectRatio: 1,
|
||||
viewMode: 1,
|
||||
preview: 'img#profilePicturePreview',
|
||||
processURL: '{{ route('admin.update_profile_picture') }}', // or processURL:'/crop'
|
||||
maxSize: 2 * 1024 * 1024, // 2MB
|
||||
allowedExtensions: ['jpg', 'jpeg', 'png'],
|
||||
showLoader: true,
|
||||
animationClass: 'pulse',
|
||||
cancelButtonText: 'Cancel',
|
||||
resetButtonText: 'Reset',
|
||||
cropButtonText: 'Crop & Upload',
|
||||
maxWoH: 255,
|
||||
onError: function(response) {
|
||||
toastr.options = {
|
||||
closeButton: true,
|
||||
newestOnTop: false,
|
||||
progressBar: true,
|
||||
positionClass: "toast-bottom-right",
|
||||
preventDuplicates: false,
|
||||
onclick: null,
|
||||
showDuration: "300",
|
||||
hideDuration: "1000",
|
||||
timeOut: "5000",
|
||||
extendedTimeOut: "1000",
|
||||
showEasing: "swing",
|
||||
hideEasing: "linear",
|
||||
showMethod: "fadeIn",
|
||||
hideMethod: "fadeOut"
|
||||
};
|
||||
|
||||
// Je nach Antwortstruktur anpassen:
|
||||
const message = response.message || "Es ist ein Fehler aufgetreten.";
|
||||
|
||||
if (response.status === 0 || response.status === false) {
|
||||
toastr.error(message);
|
||||
} else {
|
||||
toastr.error(message);
|
||||
}
|
||||
},
|
||||
|
||||
onDone: function(response) {
|
||||
toastr.options = {
|
||||
closeButton: true,
|
||||
newestOnTop: false,
|
||||
progressBar: true,
|
||||
positionClass: "toast-bottom-right",
|
||||
preventDuplicates: false,
|
||||
onclick: null,
|
||||
showDuration: "300",
|
||||
hideDuration: "1000",
|
||||
timeOut: "5000",
|
||||
extendedTimeOut: "1000",
|
||||
showEasing: "swing",
|
||||
hideEasing: "linear",
|
||||
showMethod: "fadeIn",
|
||||
hideMethod: "fadeOut"
|
||||
};
|
||||
|
||||
if (response.status === 1) {
|
||||
toastr.success(response.message || "Erfolgreich gespeichert.");
|
||||
|
||||
Livewire.dispatch('updateTopUserInfo', []);
|
||||
Livewire.dispatch('updateProfile', []);
|
||||
} else {
|
||||
toastr.error(response.message || "Etwas ist schiefgelaufen.");
|
||||
}
|
||||
}
|
||||
});
|
||||
</script>
|
||||
@endpush
|
||||
@endsection
|
||||
53
resources/views/back/pages/slider.blade.php
Normal file
53
resources/views/back/pages/slider.blade.php
Normal file
@@ -0,0 +1,53 @@
|
||||
@extends('back.layout.pages-layout')
|
||||
@section('pageTitle', isset($pageTitle) ? $pageTitle : 'Page Title here')
|
||||
@section('content')
|
||||
@livewire('admin.slides')
|
||||
@endsection
|
||||
|
||||
@push('scripts')
|
||||
<script>
|
||||
var modal = $('#slide_modal');
|
||||
|
||||
window.addEventListener('showSlideModalForm', function(e) {
|
||||
modal.modal("show");
|
||||
});
|
||||
|
||||
window.addEventListener('hideSlideModalForm', function(e) {
|
||||
modal.modal("hide");
|
||||
});
|
||||
|
||||
$('table tbody#sortable_slides').sortable({
|
||||
cursor: "move",
|
||||
update: function(event, ui) {
|
||||
$(this).children().each(function(index) {
|
||||
if ($(this).attr('data-ordering') != (index + 1)) {
|
||||
$(this).attr('data-ordering', (index + 1)).addClass('updated');
|
||||
}
|
||||
});
|
||||
var positions = [];
|
||||
$('.updated').each(function() {
|
||||
positions.push([$(this).attr('data-index'), $(this).attr('data-ordering')]);
|
||||
$(this).removeClass('updated');
|
||||
});
|
||||
Livewire.dispatch('updateSlidesOrdering', [positions]);
|
||||
}
|
||||
});
|
||||
|
||||
window.addEventListener('deleteSlide', function(event) {
|
||||
var id = event.detail.id;
|
||||
Swal.fire({
|
||||
title: "Bist du dir sicher?",
|
||||
text: "Das du den Slide löschen möchtest!",
|
||||
icon: "warning",
|
||||
showCancelButton: true,
|
||||
confirmButtonColor: "#3085d6",
|
||||
cancelButtonColor: "#d33",
|
||||
confirmButtonText: "Ja, löschen!"
|
||||
}).then((result) => {
|
||||
if (result.isConfirmed) {
|
||||
Livewire.dispatch('deleteSlideAction', [id]);
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@endpush
|
||||
24
resources/views/components/form-alerts.blade.php
Normal file
24
resources/views/components/form-alerts.blade.php
Normal file
@@ -0,0 +1,24 @@
|
||||
<div class="alerts-section mb-3">
|
||||
|
||||
@if (Session::get('info'))
|
||||
<div class="alert alert-info d-flex justify-content-between align-items-center">
|
||||
<div>{!! Session::get('info') !!}</div>
|
||||
<button class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
@if (Session::get('fail'))
|
||||
<div class="alert alert-danger d-flex justify-content-between align-items-center">
|
||||
<div>{!! Session::get('fail') !!}</div>
|
||||
<button class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
@if (Session::get('success'))
|
||||
<div class="alert alert-success d-flex justify-content-between align-items-center">
|
||||
<div>{!! Session::get('success') !!}</div>
|
||||
<button class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
</div>
|
||||
12
resources/views/components/sidebar-categories.blade.php
Normal file
12
resources/views/components/sidebar-categories.blade.php
Normal file
@@ -0,0 +1,12 @@
|
||||
<div>
|
||||
<div class="widget">
|
||||
<h5 class="widget-title"><span>Kategorien</span></h5>
|
||||
<ul class="list-unstyled widget-list">
|
||||
@foreach (sidebar_categories() as $item)
|
||||
<li><a href="{{ route('category_posts', $item->slug) }}" class="d-flex">
|
||||
{{ $item->name }} <small class="ml-auto">({{ $item->posts->count() }})</small></a>
|
||||
</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
12
resources/views/components/sidebar-search.blade.php
Normal file
12
resources/views/components/sidebar-search.blade.php
Normal file
@@ -0,0 +1,12 @@
|
||||
<div>
|
||||
<div class="widget">
|
||||
<h5 class="widget-title"><span>Suche</span></h5>
|
||||
<form action="{{ route('search_posts') }}" method="GET" class="widget-search">
|
||||
<input id="search-query" name="q" type="search"
|
||||
placeholder="Gib ein wonach du suchst zb. discover articles, guide & tutorials..."
|
||||
value="{{ request('q') ? request('q') : '' }}">
|
||||
<button type="submit"><i class="ti-search"></i>
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
12
resources/views/components/sidebar-tags.blade.php
Normal file
12
resources/views/components/sidebar-tags.blade.php
Normal file
@@ -0,0 +1,12 @@
|
||||
<div>
|
||||
<div class="widget">
|
||||
<h5 class="widget-title"><span>Tags</span></h5>
|
||||
<ul class="list-inline widget-list-inline">
|
||||
@foreach (getTags() as $tag)
|
||||
<li class="list-inline-item"><a
|
||||
href="{{ route('tag_posts', rawurlencode($tag)) }}">{{ $tag }}</a>
|
||||
</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
62
resources/views/custom_pagination.blade.php
Normal file
62
resources/views/custom_pagination.blade.php
Normal file
@@ -0,0 +1,62 @@
|
||||
<div style="overflow-x: auto; white-space: nowrap">
|
||||
@if ($paginator->hasPages())
|
||||
<nav aria-label="Page navigation">
|
||||
<ul class="pagination justify-content-center">
|
||||
<!-- Previous -->
|
||||
@if ($paginator->onFirstPage())
|
||||
<li class="page-item disabled">
|
||||
<a class="page-link" href="#!" tabindex="-1"><i class="ti-arrow-left"></i></a>
|
||||
</li>
|
||||
@else
|
||||
<li class="page-item">
|
||||
<a class="page-link" href="{{ $paginator->previousPageUrl() }}" tabindex="-1"><i
|
||||
class="ti-arrow-left"></i></a>
|
||||
</li>
|
||||
@endif
|
||||
|
||||
@if ($paginator->currentPage() > 3)
|
||||
<li class="page-item"><a class="page-link" href="{{ $paginator->url(1) }}">1</a></li>
|
||||
@endif
|
||||
@if ($paginator->currentPage() > 4)
|
||||
<li class="page-item disabled"><a class="page-link" href="#!">...</a></li>
|
||||
@endif
|
||||
|
||||
@foreach (range(1, $paginator->lastPage()) as $i)
|
||||
@if ($i >= $paginator->currentPage() - 2 && $i <= $paginator->currentPage() + 2)
|
||||
@if ($i == $paginator->currentPage())
|
||||
<li class="page-item active">
|
||||
<a class="page-link" href="#!">{{ $i }}</a>
|
||||
</li>
|
||||
@else
|
||||
<li class="page-item"><a class="page-link"
|
||||
href="{{ $paginator->url($i) }}">{{ $i }}</a></li>
|
||||
@endif
|
||||
@endif
|
||||
@endforeach
|
||||
<!-- Active page -->
|
||||
@if ($paginator->currentPage() < $paginator->lastPage() - 3)
|
||||
{{-- <li><a>...</a></li> --}}
|
||||
<li class="page-item disabled"><a class="page-link" href="#!">...</a></li>
|
||||
@endif
|
||||
@if ($paginator->currentPage() < $paginator->lastPage() - 2)
|
||||
<li class="page-item"><a class="page-link"
|
||||
href="{{ $paginator->url($paginator->lastPage()) }}">{{ $paginator->lastPage() }}</a></li>
|
||||
@endif
|
||||
|
||||
<!-- Next -->
|
||||
@if ($paginator->hasMorePages())
|
||||
<li class="page-item">
|
||||
<a class="page-link" href="{{ $paginator->nextPageUrl() }}"><i class="ti-arrow-right"></i></a>
|
||||
</li>
|
||||
@else
|
||||
<li class="page-item disabled">
|
||||
<a class="page-link" href="#!"><i class="ti-arrow-right"></i></a>
|
||||
</li>
|
||||
@endif
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
@endif
|
||||
|
||||
|
||||
</div>
|
||||
@@ -0,0 +1,111 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="de">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Neue Kontaktanfrage</title>
|
||||
<style>
|
||||
body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
background-color: #f4f6f8;
|
||||
font-family: Arial, Helvetica, sans-serif;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.wrapper {
|
||||
width: 100%;
|
||||
padding: 30px 0;
|
||||
}
|
||||
|
||||
.container {
|
||||
max-width: 520px;
|
||||
margin: 0 auto;
|
||||
background: #ffffff;
|
||||
border-radius: 12px;
|
||||
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.06);
|
||||
padding: 28px;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 20px;
|
||||
margin-bottom: 20px;
|
||||
text-align: center;
|
||||
color: #111827;
|
||||
}
|
||||
|
||||
p {
|
||||
font-size: 14px;
|
||||
line-height: 1.6;
|
||||
margin-bottom: 12px;
|
||||
color: #4b5563;
|
||||
}
|
||||
|
||||
.info-box {
|
||||
background: #f9fafb;
|
||||
border-left: 4px solid #0d6efd;
|
||||
padding: 14px 18px;
|
||||
border-radius: 6px;
|
||||
margin: 20px 0;
|
||||
}
|
||||
|
||||
.info-box p {
|
||||
margin: 6px 0;
|
||||
font-size: 14px;
|
||||
color: #374151;
|
||||
}
|
||||
|
||||
.info-box strong {
|
||||
color: #111827;
|
||||
}
|
||||
|
||||
.message-box {
|
||||
background: #ffffff;
|
||||
border: 1px solid #e5e7eb;
|
||||
border-radius: 8px;
|
||||
padding: 14px;
|
||||
font-size: 14px;
|
||||
color: #374151;
|
||||
white-space: pre-line;
|
||||
}
|
||||
|
||||
.footer {
|
||||
margin-top: 22px;
|
||||
font-size: 12px;
|
||||
text-align: center;
|
||||
color: #9ca3af;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="wrapper">
|
||||
<div class="container">
|
||||
|
||||
<h1>Neue Kontaktanfrage</h1>
|
||||
|
||||
<p>Du hast eine neue Nachricht über das Kontaktformular erhalten.</p>
|
||||
|
||||
<div class="info-box">
|
||||
<p><strong>Name:</strong> {{ $name }}</p>
|
||||
<p><strong>E-Mail:</strong> {{ $email }}</p>
|
||||
<p><strong>Betreff:</strong> {{ $subject }}</p>
|
||||
</div>
|
||||
|
||||
<p><strong>Nachricht:</strong></p>
|
||||
|
||||
<div class="message-box">
|
||||
{{ $message }}
|
||||
</div>
|
||||
|
||||
<div class="footer">
|
||||
© {{ date('Y') }} {{ env('APP_NAME') }} · Automatisch generierte Nachricht
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
103
resources/views/email-templates/forgot-template.blade.php
Normal file
103
resources/views/email-templates/forgot-template.blade.php
Normal file
@@ -0,0 +1,103 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="de">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Passwort zurücksetzen</title>
|
||||
<style>
|
||||
body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
background: #eef2f7;
|
||||
font-family: Arial, sans-serif;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.wrapper {
|
||||
width: 100%;
|
||||
padding: 32px 0;
|
||||
background: linear-gradient(135deg, #4a90e2, #6a5be2);
|
||||
}
|
||||
|
||||
.container {
|
||||
max-width: 480px;
|
||||
margin: 0 auto;
|
||||
padding: 32px;
|
||||
background: #ffffff;
|
||||
border-radius: 14px;
|
||||
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.08);
|
||||
border: 1px solid rgba(255, 255, 255, 0.4);
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 22px;
|
||||
margin-bottom: 12px;
|
||||
text-align: center;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
p {
|
||||
line-height: 1.6;
|
||||
margin-bottom: 16px;
|
||||
font-size: 15px;
|
||||
color: #555;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.btn-wrap {
|
||||
text-align: center;
|
||||
margin: 28px 0;
|
||||
}
|
||||
|
||||
.btn {
|
||||
display: inline-block;
|
||||
background: linear-gradient(135deg, #4a90e2, #6a5be2);
|
||||
color: #ffffff;
|
||||
padding: 14px 28px;
|
||||
border-radius: 8px;
|
||||
text-decoration: none;
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
letter-spacing: 0.3px;
|
||||
box-shadow: 0 4px 12px rgba(80, 70, 200, 0.3);
|
||||
}
|
||||
|
||||
.footer {
|
||||
text-align: center;
|
||||
font-size: 12px;
|
||||
color: #eee;
|
||||
margin-top: 20px;
|
||||
opacity: 0.8;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="wrapper">
|
||||
<div class="container">
|
||||
|
||||
<h1>Passwort zurücksetzen</h1>
|
||||
|
||||
<p>Wir haben eine Anfrage zum Zurücksetzen deines Passworts erhalten.</p>
|
||||
<p>Klicke auf den Button, um ein neues Passwort festzulegen.</p>
|
||||
|
||||
<div class="btn-wrap">
|
||||
<a href="{{ $actionlink }}" class="btn" target="_blank">
|
||||
Passwort zurücksetzen
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<p>Dieser Link ist 30 Minuten gültig.</p>
|
||||
|
||||
<p>Wenn du diese Anfrage nicht gestellt hast, kannst du diese E-Mail ignorieren.</p>
|
||||
</div>
|
||||
|
||||
<div class="footer">
|
||||
© {{ date('Y') }} LaraBlog. Alle Rechte vorbehalten.
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,185 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="de">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Neuer Blog Post</title>
|
||||
<style>
|
||||
body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
background: #eef2f7;
|
||||
font-family: Arial, Helvetica, sans-serif;
|
||||
color: #111827;
|
||||
}
|
||||
|
||||
.wrapper {
|
||||
width: 100%;
|
||||
padding: 28px 0;
|
||||
background: linear-gradient(135deg, #6a5be2, #4a90e2);
|
||||
}
|
||||
|
||||
.container {
|
||||
max-width: 560px;
|
||||
margin: 0 auto;
|
||||
background: #ffffff;
|
||||
border-radius: 14px;
|
||||
overflow: hidden;
|
||||
box-shadow: 0 10px 28px rgba(0, 0, 0, 0.08);
|
||||
}
|
||||
|
||||
.header {
|
||||
padding: 22px 24px;
|
||||
background: rgba(255, 255, 255, 0.95);
|
||||
}
|
||||
|
||||
.brand {
|
||||
font-size: 14px;
|
||||
color: #6b7280;
|
||||
letter-spacing: 0.2px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.content {
|
||||
padding: 22px 24px 8px 24px;
|
||||
}
|
||||
|
||||
h1 {
|
||||
margin: 0 0 10px 0;
|
||||
font-size: 22px;
|
||||
line-height: 1.25;
|
||||
color: #111827;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
p {
|
||||
margin: 0 0 14px 0;
|
||||
font-size: 14px;
|
||||
line-height: 1.65;
|
||||
color: #4b5563;
|
||||
}
|
||||
|
||||
.img-wrap {
|
||||
padding: 0 24px 18px 24px;
|
||||
}
|
||||
|
||||
.post-img {
|
||||
width: 100%;
|
||||
height: auto;
|
||||
border-radius: 12px;
|
||||
display: block;
|
||||
border: 1px solid #eef2f7;
|
||||
}
|
||||
|
||||
.desc {
|
||||
background: #f8fafc;
|
||||
border: 1px solid #eef2f7;
|
||||
border-radius: 12px;
|
||||
padding: 14px 14px;
|
||||
}
|
||||
|
||||
.btn-wrap {
|
||||
text-align: center;
|
||||
padding: 18px 24px 22px 24px;
|
||||
}
|
||||
|
||||
.btn {
|
||||
display: inline-block;
|
||||
background: linear-gradient(135deg, #6a5be2, #4a90e2);
|
||||
color: #ffffff !important;
|
||||
text-decoration: none;
|
||||
font-weight: 700;
|
||||
font-size: 15px;
|
||||
padding: 12px 20px;
|
||||
border-radius: 999px;
|
||||
box-shadow: 0 6px 16px rgba(74, 144, 226, 0.25);
|
||||
}
|
||||
|
||||
.meta {
|
||||
padding: 0 24px 22px 24px;
|
||||
font-size: 12px;
|
||||
color: #6b7280;
|
||||
}
|
||||
|
||||
.meta a {
|
||||
color: #0d6efd;
|
||||
text-decoration: none;
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
.footer {
|
||||
text-align: center;
|
||||
padding: 16px 16px;
|
||||
color: #e5e7eb;
|
||||
font-size: 12px;
|
||||
opacity: 0.9;
|
||||
}
|
||||
|
||||
@media (max-width: 600px) {
|
||||
|
||||
.content,
|
||||
.img-wrap,
|
||||
.btn-wrap,
|
||||
.meta,
|
||||
.header {
|
||||
padding-left: 16px !important;
|
||||
padding-right: 16px !important;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 20px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="wrapper">
|
||||
<div class="container">
|
||||
|
||||
<div class="header">
|
||||
<div class="brand">LaraBlog · Neuer Blog Post</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<h1>{{ $post->title }}</h1>
|
||||
<p>Es gibt einen neuen Beitrag in unserem Blog. Viel Spaß beim Lesen.</p>
|
||||
</div>
|
||||
|
||||
<div class="img-wrap">
|
||||
<img class="post-img" src="{{ asset('images/posts/' . $post->featured_image) }}"
|
||||
alt="{{ $post->title }}">
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="desc">
|
||||
<p style="margin:0;"><strong>Beschreibung:</strong></p>
|
||||
<p style="margin:8px 0 0 0;">{!! Str::ucfirst(words($post->content, 43)) !!}</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="btn-wrap">
|
||||
<a class="btn" href="{{ route('read_post', $post->slug) }}" target="_blank" rel="noopener">
|
||||
Beitrag lesen
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="meta">
|
||||
Falls der Button nicht funktioniert, kopiere diesen Link in deinen Browser:<br>
|
||||
<a href="{{ route('read_post', $post->slug) }}" target="_blank"
|
||||
rel="noopener">{{ route('read_post', $post->slug) }}</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="footer">
|
||||
© {{ date('Y') }} LaraBlog · Du erhältst diese E-Mail, weil du Benachrichtigungen
|
||||
abonniert
|
||||
hast.
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,81 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="de">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Passwort erfolgreich geändert</title>
|
||||
<style>
|
||||
body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
background: #eef2f7;
|
||||
font-family: Arial, sans-serif;
|
||||
}
|
||||
|
||||
.wrapper {
|
||||
width: 100%;
|
||||
padding: 32px 0;
|
||||
background: linear-gradient(135deg, #7b5be2, #4a90e2);
|
||||
}
|
||||
|
||||
.container {
|
||||
max-width: 480px;
|
||||
margin: 0 auto;
|
||||
padding: 32px;
|
||||
background: #ffffff;
|
||||
border-radius: 14px;
|
||||
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.08);
|
||||
}
|
||||
|
||||
h1 {
|
||||
text-align: center;
|
||||
font-size: 22px;
|
||||
}
|
||||
|
||||
p {
|
||||
text-align: center;
|
||||
font-size: 15px;
|
||||
}
|
||||
|
||||
.info-box {
|
||||
background: #f4f6ff;
|
||||
border-left: 4px solid #6a5be2;
|
||||
padding: 14px 18px;
|
||||
border-radius: 6px;
|
||||
margin: 20px 0;
|
||||
font-size: 14px;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="wrapper">
|
||||
<div class="container">
|
||||
|
||||
<h1>Passwort aktualisiert</h1>
|
||||
|
||||
<p>Hallo {{ $user->name }},</p>
|
||||
|
||||
<p>dies ist eine Bestätigung, dass dein Passwort erfolgreich geändert wurde.</p>
|
||||
|
||||
<div class="info-box">
|
||||
<p><strong>Aktuelle Zugangsdaten:</strong></p>
|
||||
<p>Benutzername/Email: <strong>{{ $user->username }} oder {{ $user->email }}</strong></p>
|
||||
<p>Passwort: <strong>{{ $new_password }}</strong></p>
|
||||
</div>
|
||||
|
||||
<p>Falls du diese Änderung nicht selbst vorgenommen hast, kontaktiere bitte umgehend unseren Support.
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="footer" style="text-align:center; font-size:12px; color:#eee; margin-top:20px;">
|
||||
© {{ date('Y') }} LaraBlog. Alle Rechte vorbehalten.
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
6
resources/views/example-auth.blade.php
Normal file
6
resources/views/example-auth.blade.php
Normal file
@@ -0,0 +1,6 @@
|
||||
@extends('back.layout.auth-layout')
|
||||
@section('pageTitle', isset($pageTitle) ? $pageTitle : 'Page Title here')
|
||||
@section('content')
|
||||
Content
|
||||
|
||||
@endsection
|
||||
7
resources/views/example-page.blade.php
Normal file
7
resources/views/example-page.blade.php
Normal file
@@ -0,0 +1,7 @@
|
||||
@extends('back.layout.pages-layout')
|
||||
@section('pageTitle', isset($pageTitle) ? $pageTitle : 'Page Title here')
|
||||
@section('content')
|
||||
|
||||
Page Content here
|
||||
|
||||
@endsection
|
||||
228
resources/views/front/layout/pages-layout.blade.php
Normal file
228
resources/views/front/layout/pages-layout.blade.php
Normal file
@@ -0,0 +1,228 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=5">
|
||||
@yield('meta_tags')
|
||||
<link rel="shortcut icon" href="/images/site/{{ isset(settings()->site_favicon) ? settings()->site_favicon : '' }}"
|
||||
type="image/x-icon">
|
||||
<link rel="icon" type="image/png" sizes="32x32"
|
||||
href="/images/site/{{ isset(settings()->site_favicon) ? settings()->site_favicon : '' }}">
|
||||
<link rel="icon" href="/images/site/{{ isset(settings()->site_favicon) ? settings()->site_favicon : '' }}"
|
||||
type="image/x-icon">
|
||||
<link rel="stylesheet" href="/front/plugins/bootstrap/bootstrap.min.css">
|
||||
<link rel="stylesheet" href="/front/css/animate.min.css">
|
||||
<link rel="stylesheet" href="/front/plugins/themify-icons/themify-icons.css">
|
||||
<link rel="stylesheet" href="/front/plugins/slick/slick.css">
|
||||
<link rel="stylesheet" href="/front/css/style.css">
|
||||
@stack('stylesheets')
|
||||
@yield('head')
|
||||
@yield('structured_data')
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!-- navigation -->
|
||||
<header class="sticky-top bg-white border-bottom border-default">
|
||||
<div class="container-fluid">
|
||||
|
||||
<nav class="navbar navbar-expand-lg navbar-white">
|
||||
<a class="navbar-brand" href="/">
|
||||
<img class="img-fluid" width="150px"
|
||||
src="/images/site/{{ isset(settings()->site_logo) ? settings()->site_logo : '' }}"
|
||||
alt="{{ isset(settings()->site_title) ? settings()->site_title : '' }}">
|
||||
</a>
|
||||
<button class="navbar-toggler border-0" type="button" data-toggle="collapse" data-target="#navigation">
|
||||
<i class="ti-menu"></i>
|
||||
</button>
|
||||
|
||||
<div class="collapse navbar-collapse text-center" id="navigation">
|
||||
<ul class="navbar-nav mx-auto">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="/">Home</a>
|
||||
</li>
|
||||
<!-- <li class="nav-item">
|
||||
<a class="nav-link" href="about.html">About</a>
|
||||
</li> -->
|
||||
|
||||
{!! navigations() !!}
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="{{ route('contact') }}">Kontakt</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<!-- search -->
|
||||
<div class="search px-4">
|
||||
<button id="searchOpen" class="search-btn"><i class="ti-search"></i></button>
|
||||
<div class="search-wrapper">
|
||||
<form action="{{ route('search_posts') }}" method="GET" class="h-100">
|
||||
<input class="search-box pl-4" id="search-query" name="q" type="search"
|
||||
placeholder="Gib ein wonach du suchst zb. discover articles, guide & tutorials... "
|
||||
value="{{ request('q') ? request('q') : '' }}">
|
||||
</form>
|
||||
<button id="searchClose" class="search-close"><i class="ti-close text-dark"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /search -->
|
||||
<!-- User Details + DropDown -->
|
||||
@auth
|
||||
<div class="user-details">
|
||||
<img src="{{ auth()->user()->picture }}" alt="User Avatar" />
|
||||
<div class="user-dropdown">
|
||||
<a href="{{ route('admin.dashboard') }}">
|
||||
<i class="ti-dashboard">Dashboard</i>
|
||||
</a>
|
||||
<a href="{{ route('admin.profile') }}">
|
||||
<i class="ti-user">Profile</i>
|
||||
</a>
|
||||
@if (auth()->user()->type == 'superAdmin')
|
||||
<a href="{{ route('admin.settings') }}">
|
||||
<i class="ti-settings">Einstellungen</i>
|
||||
</a>
|
||||
@endif
|
||||
<form id="front-logout-form" action="{{ route('admin.logout', ['source' => 'front']) }}"
|
||||
method="POST" style="display:none;">
|
||||
@csrf
|
||||
</form>
|
||||
<a href="javascript:;"
|
||||
onclick="event.preventDefault();document.getElementById('front-logout-form').submit();">
|
||||
<i class="ti-power-off">Ausloggen</i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
@endauth
|
||||
<!-- /User Details + DropDown -->
|
||||
|
||||
</div>
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
<!-- /navigation -->
|
||||
|
||||
<section class="section">
|
||||
<div class="container">
|
||||
@yield('content')
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<footer class="section-sm pb-0 border-top border-default">
|
||||
<div class="container">
|
||||
<div class="row justify-content-between">
|
||||
<div class="col-md-3 mb-4">
|
||||
<a class="mb-4 d-block" href="#">
|
||||
<img class="img-fluid" width="150px"
|
||||
src="/images/site/{{ isset(settings()->site_logo) ? settings()->site_logo : '' }}"
|
||||
alt="{{ isset(settings()->site_title) ? settings()->site_title : '' }}">
|
||||
</a>
|
||||
<p>{{ isset(settings()->site_meta_description) ? settings()->site_meta_description : '' }}</p>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-2 col-md-3 col-6 mb-4">
|
||||
<h6 class="mb-4">Quick Links</h6>
|
||||
<ul class="list-unstyled footer-list">
|
||||
<li><a href="{{ route('contact') }}">Kontakt</a></li>
|
||||
<!--
|
||||
<li><a href="privacy-policy.html">Privacy Policy</a></li>
|
||||
<li><a href="terms-conditions.html">Terms Conditions</a></li> -->
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-2 col-md-3 col-6 mb-4">
|
||||
<h6 class="mb-4">Social Links</h6>
|
||||
<ul class="list-unstyled footer-list">
|
||||
@if (site_social_links()?->facebook_url)
|
||||
<li><a href="{{ site_social_links()->facebook_url }}" target="_blank">Facebook</a></li>
|
||||
@endif
|
||||
@if (site_social_links()?->twitter_url)
|
||||
<li><a href="{{ site_social_links()->twitter_url }}" target="_blank">Twitter</a></li>
|
||||
@endif
|
||||
@if (site_social_links()?->instagram_url)
|
||||
<li><a href="{{ site_social_links()->instagram_url }}" target="_blank">Instagram</a></li>
|
||||
@endif
|
||||
@if (site_social_links()?->linkedin_url)
|
||||
<li><a href="{{ site_social_links()->linkedin_url }}" target="_blank">Linkedin</a></li>
|
||||
@endif
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="col-md-3 mb-4">
|
||||
<h6 class="mb-4">Newsletter abonnieren</h6>
|
||||
@livewire('newsletter-form')
|
||||
</div>
|
||||
</div>
|
||||
<div class="scroll-top">
|
||||
<a href="#top" id="scrollTop"><i class="ti-angle-up"></i></a>
|
||||
</div>
|
||||
<div class="text-center">
|
||||
<p class="content">© 2026 - Design by SawaStacks & Develop By MagicPotter</p>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
|
||||
<script src="/front/plugins/jQuery/jquery.min.js"></script>
|
||||
<script src="/front/plugins/bootstrap/bootstrap.min.js" async></script>
|
||||
<script src="/front/plugins/slick/slick.min.js"></script>
|
||||
<script src="/front/js/script.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/toastr.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
|
||||
<script>
|
||||
toastr.options = {
|
||||
"closeButton": true,
|
||||
"newestOnTop": false,
|
||||
"progressBar": true,
|
||||
"positionClass": "toast-bottom-right",
|
||||
"preventDuplicates": false,
|
||||
"onclick": null,
|
||||
"showDuration": "300",
|
||||
"hideDuration": "1000",
|
||||
"timeOut": "5000",
|
||||
"extendedTimeOut": "1000",
|
||||
"showEasing": "swing",
|
||||
"hideEasing": "linear",
|
||||
"showMethod": "fadeIn",
|
||||
"hideMethod": "fadeOut"
|
||||
};
|
||||
|
||||
window.addEventListener("showToastr", function(event) {
|
||||
const payload = Array.isArray(event.detail) ? event.detail[0] : event.detail;
|
||||
if (!payload) return;
|
||||
|
||||
const {
|
||||
type,
|
||||
message
|
||||
} = payload;
|
||||
|
||||
const Toast = Swal.mixin({
|
||||
toast: true,
|
||||
position: "bottom-end",
|
||||
showConfirmButton: false,
|
||||
timer: 3000,
|
||||
timerProgressBar: true,
|
||||
didOpen: (toast) => {
|
||||
toast.onmouseenter = Swal.stopTimer;
|
||||
toast.onmouseleave = Swal.resumeTimer;
|
||||
}
|
||||
});
|
||||
|
||||
Toast.fire({
|
||||
icon: type || "info",
|
||||
title: message || ""
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<script>
|
||||
document.querySelector('.user-details').addEventListener('click', function() {
|
||||
this.classList.toggle('active');
|
||||
});
|
||||
document.addEventListener('click', function(e) {
|
||||
const userDetails = document.querySelector('.user-details');
|
||||
if (!userDetails.contains(e.target)) {
|
||||
userDetails.classList.remove('active');
|
||||
}
|
||||
});
|
||||
</script>
|
||||
@stack('scripts')
|
||||
</body>
|
||||
|
||||
</html>
|
||||
92
resources/views/front/pages/author_posts.blade.php
Normal file
92
resources/views/front/pages/author_posts.blade.php
Normal file
@@ -0,0 +1,92 @@
|
||||
@extends('front.layout.pages-layout')
|
||||
@section('pageTitle', isset($pageTitle) ? $pageTitle : 'Document Title')
|
||||
@section('head')
|
||||
<meta name="robots" content="noindex,follow">
|
||||
@endsection
|
||||
@section('meta_tags')
|
||||
{!! SEO::generate() !!}}
|
||||
@endsection
|
||||
@section('content')
|
||||
<section class="section-sm border-bottom pb-3 pt-3">
|
||||
<div class="container">
|
||||
<!-- Author Profile -->
|
||||
<div class="author-card">
|
||||
<img src="{{ $author->picture }}" alt="Author's Photo">
|
||||
<h3 class="mt-3 title-color">{{ $author->name }}</h3>
|
||||
<p> {{ $author->username }}</p>
|
||||
<p>{{ $author->bio }}</p>
|
||||
<!-- Social Links -->
|
||||
@if ($author->social_links)
|
||||
<div class="social-links mt-3">
|
||||
@if ($author->social_links->github_url)
|
||||
<a href="{{ $author->social_links->github_url }}" target="_blank" title="GitHub"><i
|
||||
class="ti-github"></i></a>
|
||||
@endif
|
||||
@if ($author->social_links->youtube_url)
|
||||
<a href="{{ $author->social_links->youtube_url }}" target="_blank" title="Youtube"><i
|
||||
class="ti-youtube"></i></a>
|
||||
@endif
|
||||
@if ($author->social_links->facebook_url)
|
||||
<a href="{{ $author->social_links->facebook_url }}" target="_blank" title="Facebook"><i
|
||||
class="ti-facebook"></i></a>
|
||||
@endif
|
||||
@if ($author->social_links->linkedin_url)
|
||||
<a href="{{ $author->social_links->linkedin_url }}" target="_blank" title="LinkedIn"><i
|
||||
class="ti-linkedin"></i></a>
|
||||
@endif
|
||||
@if ($author->social_links->twitter_url)
|
||||
<a href="{{ $author->social_links->twitter_url }}" target="_blank" title="Twitter"><i
|
||||
class="ti-twitter"></i></a>
|
||||
@endif
|
||||
@if ($author->social_links->instagram_url)
|
||||
<a href="{{ $author->social_links->instagram_url }}" target="_blank" title="Instagram"><i
|
||||
class="ti-instagram"></i></a>
|
||||
@endif
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
<!-- Author's Posts -->
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="section-sm mt-0 pt-4">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
|
||||
@forelse ($posts as $post)
|
||||
<div class="col-sm-6 col-md-4 col-lg-3 mb-2">
|
||||
<article class="mb-2">
|
||||
<div class="mb-2">
|
||||
<img src="/images/posts/resized/resized_{{ $post->featured_image }}" alt="featured_image"
|
||||
class="img-fluid rounded-lg">
|
||||
</div>
|
||||
|
||||
<h5>
|
||||
<a class="post-title" href="{{ route('read_post', $post->slug) }}">
|
||||
{{ $post->title }}
|
||||
</a>
|
||||
</h5>
|
||||
<ul class="list-inline post-meta mb-2">
|
||||
<li class="list-inline-item">Datum : {{ date_formatter($post->created_at) }}</li>
|
||||
<li class="list-inline-item">Kategorie : <a
|
||||
href="{{ route('category_posts', $post->post_category->slug) }}"
|
||||
class="ml-1">{{ $post->post_category->name }} </a>
|
||||
</li>
|
||||
</ul>
|
||||
</article>
|
||||
</div>
|
||||
@empty
|
||||
<div class="col-span-12">
|
||||
<div class="text-danger text-center">
|
||||
Dieser Author hat keine Posts
|
||||
</div>
|
||||
</div>
|
||||
@endforelse
|
||||
|
||||
</div>
|
||||
<div class="pagination-block">
|
||||
{{ $posts->appends(request()->input())->links('custom_pagination') }}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@endsection
|
||||
45
resources/views/front/pages/category_posts.blade.php
Normal file
45
resources/views/front/pages/category_posts.blade.php
Normal file
@@ -0,0 +1,45 @@
|
||||
@extends('front.layout.pages-layout')
|
||||
@section('pageTitle', isset($pageTitle) ? $pageTitle : 'Document Title')
|
||||
@section('head')
|
||||
<meta name="robots" content="noindex,follow">
|
||||
@endsection
|
||||
@section('meta_tags')
|
||||
{!! SEO::generate() !!}
|
||||
@endsection
|
||||
@section('content')
|
||||
<div class="w-full mb-3">
|
||||
<h3 class="title-color">{{ $pageTitle }}</h3>
|
||||
</div>
|
||||
@if ($posts->count())
|
||||
<div class="row">
|
||||
@foreach ($posts as $post)
|
||||
<div class="col-sm-6 col-md-4 col-lg-3 mb-2">
|
||||
<article class="mb-2">
|
||||
<div class="mb-2">
|
||||
<img src="/images/posts/resized/resized_{{ $post->featured_image }}" alt="category_image"
|
||||
class="img-fluid rounded-lg" />
|
||||
</div>
|
||||
<h5>
|
||||
<a class="post-title" href="{{ route('read_post', $post->slug) }}">
|
||||
{{ $post->title }}
|
||||
</a>
|
||||
</h5>
|
||||
<ul class="list-inline post-meta mb-2">
|
||||
<li class="list-inline-item">Date: {{ date_formatter($post->created_at) }}</li>
|
||||
<li class="list-inline-item">Kategorie: <a
|
||||
href="{{ route('category_posts', $post->post_category->slug) }}"
|
||||
class="ml-1">{{ $post->post_category->name }}</a> </li>
|
||||
</ul>
|
||||
</article>
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
@else
|
||||
<p><span class="text-danger">Keine Posts in dieser Kategorie gefunden</span></p>
|
||||
@endif
|
||||
|
||||
<div class="pagination-block">
|
||||
{{ $posts->appends(request()->input())->links('custom_pagination') }}
|
||||
</div>
|
||||
|
||||
@endsection
|
||||
101
resources/views/front/pages/contact.blade.php
Normal file
101
resources/views/front/pages/contact.blade.php
Normal file
@@ -0,0 +1,101 @@
|
||||
@extends('front.layout.pages-layout')
|
||||
@section('pageTitle', isset($pageTitle) ? $pageTitle : 'Document Title')
|
||||
@section('meta_tags')
|
||||
{!! SEO::generate() !!}}
|
||||
@endsection
|
||||
@section('content')
|
||||
<section class="section">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="mb-5 d-flex align-items-center">
|
||||
<h3 class="title-color">Kontaktieren Sie uns</h3>
|
||||
<ul class="list-inline social-icons ml-auto mr-3 d-none d-sm-block">
|
||||
@if (site_social_links()->facebook_url)
|
||||
<li class="list-inline-item">
|
||||
<a href="{{ site_social_links()->facebook_url }}" target="_blank">
|
||||
<i class="ti-facebook"></i>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
@if (site_social_links()->twitter_url)
|
||||
<li class="list-inline-item">
|
||||
<a href="{{ site_social_links()->twitter_url }}" target="_blank">
|
||||
<i class="ti-twitter-alt"></i>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
@if (site_social_links()->linkedin_url)
|
||||
<li class="list-inline-item">
|
||||
<a href="{{ site_social_links()->linkedin_url }}" target="_blank">
|
||||
<i class="ti-linkedin"></i>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
@if (site_social_links()->instagram_url)
|
||||
<li class="list-inline-item">
|
||||
<a href="{{ site_social_links()->instagram_url }}" target="_blank">
|
||||
<i class="ti-instagram"></i>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="content mb-5">
|
||||
<h4>Wir freuen uns auf Ihre Nachricht</h4>
|
||||
<p>Wir freuen uns auf Ihre Nachricht
|
||||
Haben Sie Fragen, Anregungen oder Feedback? Zögern Sie nicht, uns zu kontaktieren. Wir helfen
|
||||
Ihnen gerne weiter und melden uns so schnell wie möglich bei Ihnen.</p>
|
||||
|
||||
@if (settings()->site_email != '')
|
||||
<h4 class="mt-5">Sie mögen keine Formulare? Schreiben Sie uns direkt per E-Mail</h4>
|
||||
<p><i class="ti-email mr-2 text-primary"></i><a
|
||||
href="mailto:{{ settings()->site_email }}">{{ settings()->site_email }}</a>
|
||||
</p>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<form method="POST" action="{{ route('send_email') }}">
|
||||
@csrf
|
||||
<x-form-alerts></x-form-alerts>
|
||||
<div class="form-group">
|
||||
<label for="name"><b class="title-color">Ihr Name</b> (Required):</label>
|
||||
<input type="text" name="name" id="name" class="form-control"
|
||||
value="{{ old('name') }}" placeholder="eg: William Woods" />
|
||||
@error('name')
|
||||
<span class="text-danger ml-1">{{ $message }}</span>
|
||||
@enderror
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="email"> <b class="title-color">Ihre Email Addresse</b> (Required): </label>
|
||||
<input type="email" name="email" id="email" class="form-control"
|
||||
value="{{ old('email') }}" placeholder="eg: williamwoods@example.com" />
|
||||
@error('email')
|
||||
<span class="text-danger ml-1">{{ $message }}</span>
|
||||
@enderror
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="subject"><b class="title-color">Titel</b>: (Required):</label>
|
||||
<input type="text" name="subject" id="subject" class="form-control"
|
||||
value="{{ old('subject') }}" placeholder="eg: Advertising" />
|
||||
@error('subject')
|
||||
<span class="text-danger ml-1">{{ $message }}</span>
|
||||
@enderror
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="message"><b class="title-color">Ihre Nachricht</b>: (Required):</label>
|
||||
<textarea name="message" id="message" class="form-control">{{ old('message') }}</textarea>
|
||||
@error('message')
|
||||
<span class="text-danger ml-1">{{ $message }}</span>
|
||||
@enderror
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary">Absenden</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@endsection
|
||||
9
resources/views/front/pages/front-example.blade.php
Normal file
9
resources/views/front/pages/front-example.blade.php
Normal file
@@ -0,0 +1,9 @@
|
||||
@extends('front.layout.pages-layout')
|
||||
@section('pageTitle', isset($pageTitle) ? $pageTitle : 'Document Title')
|
||||
@section('meta_tags')
|
||||
{!! SEO::generate() !!}}
|
||||
@endsection
|
||||
|
||||
@section('content')
|
||||
-- Page Content
|
||||
@endsection
|
||||
144
resources/views/front/pages/index.blade.php
Normal file
144
resources/views/front/pages/index.blade.php
Normal file
@@ -0,0 +1,144 @@
|
||||
@extends('front.layout.pages-layout')
|
||||
@section('pageTitle', isset($pageTitle) ? $pageTitle : 'Document Title')
|
||||
@section('meta_tags')
|
||||
{!! SEO::generate() !!}}
|
||||
@endsection
|
||||
@section('content')
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-8 mb-5 mb-lg-0">
|
||||
|
||||
<article class="row mb-5">
|
||||
@if (!empty(get_slides()))
|
||||
<div class="col-12">
|
||||
<div class="post-slider">
|
||||
@foreach (get_slides() as $slide)
|
||||
<div class="slider-item">
|
||||
<img fetchpriority="high" decoding="async" src="/images/slides/{{ $slide->image }}"
|
||||
class="img-fluid" alt="post-thumb">
|
||||
<div class="slider-content">
|
||||
@if ($slide->link)
|
||||
<a href="{{ $slide->link }}">
|
||||
<h2 class="animate__animated">{{ $slide->heading }}</h2>
|
||||
</a>
|
||||
@else
|
||||
<h2 class="animate__animated">{{ $slide->heading }}</h2>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
@if (!empty(latest_posts(0, 1)))
|
||||
@foreach (latest_posts(0, 1) as $post)
|
||||
<div class="col-12 mx-auto">
|
||||
<h3>
|
||||
<a class="post-title" href="{{ route('read_post', $post->slug) }}">
|
||||
{{ $post->title }}
|
||||
</a>
|
||||
</h3>
|
||||
<ul class="list-inline post-meta mb-4">
|
||||
<li class="list-inline-item"><i class="ti-user mr-1"></i>
|
||||
<a
|
||||
href="{{ route('author_posts', $post->author->username) }}">{{ $post->author->name }}</a>
|
||||
</li>
|
||||
<li class="list-inline-item"><i
|
||||
class="ti-calendar mr-1"></i>{{ date_formatter($post->created_at) }}</li>
|
||||
<li class="list-inline-item">Category : <a
|
||||
href="{{ route('category_posts', $post->post_category->slug) }}" class="ml-1">Web
|
||||
{{ $post->post_category->name }}
|
||||
</a>
|
||||
</li>
|
||||
<li class="list-inline-item"><i class="ti-timer mr-1"></i>
|
||||
{{ readDuration($post->title, $post->content) }} @choice('min|mins', readDuration($post->title, $post->content))
|
||||
</li>
|
||||
</ul>
|
||||
<p>
|
||||
{!! Str::ucfirst(words($post->content, 45)) !!}
|
||||
</p>
|
||||
<a href="{{ route('read_post', $post->slug) }}" class="btn btn-outline-primary">Read
|
||||
more...</a>
|
||||
</div>
|
||||
@endforeach
|
||||
@endif
|
||||
</article>
|
||||
|
||||
<section id="home__latest-posts">
|
||||
@if (!empty(latest_posts(1, 3)))
|
||||
@foreach (latest_posts(1, 3) as $post)
|
||||
<article class="row mb-5">
|
||||
<div class="col-md-4 mb-4 mb-md-0">
|
||||
<div class="post-img-box">
|
||||
<img src="/images/posts/resized/resized_{{ $post->featured_image }}"
|
||||
class="img-fluid rounded-lg" alt="post-thumb">
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-8">
|
||||
<h4>
|
||||
<a class="post-title" href="{{ route('read_post', $post->slug) }}">
|
||||
{{ $post->title }}
|
||||
</a>
|
||||
</h4>
|
||||
<ul class="list-inline post-meta mb-2">
|
||||
<li class="list-inline-item"><i class="ti-user mr-2"></i><a
|
||||
href="{{ route('author_posts', $post->author->username) }}">{{ $post->author->name }}</a>
|
||||
</li>
|
||||
<li class="list-inline-item">{{ date_formatter($post->created_at) }}</li>
|
||||
<li class="list-inline-item">Kategorie : <a
|
||||
href="{{ route('category_posts', $post->post_category->slug) }}"
|
||||
class="ml-1">{{ $post->post_category->name }} </a>
|
||||
</li>
|
||||
<li class="list-inline-item"><i class="ti-timer mr-1"></i>
|
||||
{{ readDuration($post->title, $post->content) }} @choice('min|mins', readDuration($post->title, $post->content))
|
||||
</li>
|
||||
</ul>
|
||||
<p>
|
||||
{!! Str::ucfirst(words($post->content, 30)) !!}
|
||||
</p>
|
||||
<a href="{{ route('read_post', $post->slug) }}" class="btn btn-outline-primary">Read
|
||||
more...</a>
|
||||
</div>
|
||||
</article>
|
||||
@endforeach
|
||||
@endif
|
||||
</section>
|
||||
|
||||
|
||||
</div>
|
||||
<aside class="col-lg-4">
|
||||
<!-- Search -->
|
||||
<x-sidebar-search></x-sidebar-search>
|
||||
<!-- categories -->
|
||||
<x-sidebar-categories></x-sidebar-categories>
|
||||
<!-- tags -->
|
||||
<x-sidebar-tags></x-sidebar-tags>
|
||||
<!-- latest post -->
|
||||
<div class="widget">
|
||||
<h5 class="widget-title"><span>Letzte Post</span></h5>
|
||||
<!-- post-item -->
|
||||
@foreach (sidebar_latest_posts(4) as $item)
|
||||
<ul class="list-unstyled widget-list">
|
||||
<li class="media widget-post align-items-center">
|
||||
<a href="{{ route('read_post', $item->slug) }}">
|
||||
<img loading="lazy" class="mr-3" alt="post-thumb"
|
||||
src="/images/posts/resized/thumb_{{ $post->featured_image }}">
|
||||
</a>
|
||||
<div class="media-body">
|
||||
<h6 class="mb-0">
|
||||
<a href="{{ route('read_post', $item->slug) }}">{{ $item->title }}</a>
|
||||
</h6>
|
||||
<small>{{ date_formatter($post->created_at) }}</small>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
@endforeach
|
||||
|
||||
</div>
|
||||
<a href="https://www.checkout-ds24.com/product/614053?aff=MagicPotter"
|
||||
class="ad-banner d-flex align-items-center justify-content-center">
|
||||
<span class="ad-text">Jetzt klicken</span>
|
||||
</a>
|
||||
</aside>
|
||||
</div>
|
||||
@endsection
|
||||
95
resources/views/front/pages/search_posts.blade.php
Normal file
95
resources/views/front/pages/search_posts.blade.php
Normal file
@@ -0,0 +1,95 @@
|
||||
@extends('front.layout.pages-layout')
|
||||
@section('pageTitle', isset($pageTitle) ? $pageTitle : 'Document Title')
|
||||
@section('meta_tags')
|
||||
{!! SEO::generate() !!}}
|
||||
@endsection
|
||||
@section('content')
|
||||
<div class="d-flex align-items-center mb-3">
|
||||
<h4 class="title-color">Suche nach:</h4>
|
||||
<span class="ml-2">{{ $query }}</span>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-lg-8 mb-5 mb-lg-0">
|
||||
<div class="col-12 mb-5 mb-lg-0">
|
||||
@forelse ($posts as $post)
|
||||
<article class="row mb-5">
|
||||
<div class="col-md-4 mb-4 mb-md-0">
|
||||
<div class="post-img-box">
|
||||
<img src="/images/posts/resized/resized_{{ $post->featured_image }}"
|
||||
class="img-fluid rounded-lg" alt="post-thumb">
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-8">
|
||||
<h5>
|
||||
<a class="post-title" href="{{ route('read_post', $post->slug) }}">
|
||||
{{ $post->title }}
|
||||
</a>
|
||||
</h5>
|
||||
<ul class="list-inline post-meta mb-2">
|
||||
<li class="list-inline-item">
|
||||
<i class="ti-user mr-1"></i><a
|
||||
href="{{ route('author_posts', $post->author->username) }}">{{ $post->author->name }}</a>
|
||||
</li>
|
||||
<li class="list-inline-item">
|
||||
<i class="ti-calendar mr-1"></i>{{ date_formatter($post->created_at) }}
|
||||
</li>
|
||||
<li class="list-inline-item">
|
||||
Kategorie : <a href="{{ route('category_posts', $post->post_category->slug) }}"
|
||||
class="ml-1">{{ $post->post_category->name }}</a>
|
||||
</li>
|
||||
<li class="list-inline-item"><i class="ti-timer mr-1"></i>
|
||||
{{ readDuration($post->title, $post->content) }} @choice('min|mins', readDuration($post->title, $post->content))
|
||||
</li>
|
||||
</ul>
|
||||
<p>
|
||||
{!! Str::ucfirst(words($post->content, 45)) !!}
|
||||
</p>
|
||||
<a href="{{ route('read_post', $post->slug) }}" class="btn btn-outline-primary">Mehr
|
||||
lesen...</a>
|
||||
</div>
|
||||
</article>
|
||||
@empty
|
||||
<div class="col-span-12">
|
||||
<div class="text-danger text-center">
|
||||
Keine Ergebnisse für diese Suche
|
||||
</div>
|
||||
</div>
|
||||
@endforelse
|
||||
|
||||
|
||||
</div>
|
||||
<div class="pagination-block">
|
||||
{{ $posts->appends(request()->input())->links('custom_pagination') }}
|
||||
</div>
|
||||
</div>
|
||||
<aside class="col-lg-4">
|
||||
<!-- Search -->
|
||||
<x-sidebar-search></x-sidebar-search>
|
||||
<!-- categories -->
|
||||
<x-sidebar-categories></x-sidebar-categories>
|
||||
<!-- tags -->
|
||||
<x-sidebar-tags></x-sidebar-tags>
|
||||
<!-- latest post -->
|
||||
<div class="widget">
|
||||
<h5 class="widget-title"><span>Letzte Posts</span></h5>
|
||||
<!-- post-item -->
|
||||
@foreach (sidebar_latest_posts() as $item)
|
||||
<ul class="list-unstyled widget-list">
|
||||
<li class="media widget-post align-items-center">
|
||||
<a href="{{ route('read_post', $item->slug) }}">
|
||||
<img loading="lazy" class="mr-3" alt="post-thumb"
|
||||
src="/images/posts/resized/thumb_{{ $item->featured_image }}">
|
||||
</a>
|
||||
<div class="media-body">
|
||||
<h6 class="mb-0">
|
||||
<a href="{{ route('read_post', $item->slug) }}">{{ $item->title }}</a>
|
||||
</h6>
|
||||
<small>{{ date_formatter($item->created_at) }}</small>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
@endforeach
|
||||
</div>
|
||||
</aside>
|
||||
</div>
|
||||
@endsection
|
||||
173
resources/views/front/pages/single_post.blade.php
Normal file
173
resources/views/front/pages/single_post.blade.php
Normal file
@@ -0,0 +1,173 @@
|
||||
@extends('front.layout.pages-layout')
|
||||
@section('pageTitle', isset($pageTitle) ? $pageTitle : 'Document Title')
|
||||
@section('meta_tags')
|
||||
{!! SEO::generate() !!}}
|
||||
@endsection
|
||||
@section('structured_data')
|
||||
@if (!empty($post->structured_data))
|
||||
<script type="application/ld+json">
|
||||
{!! $post->structured_data !!}
|
||||
</script>
|
||||
@endif
|
||||
@endsection
|
||||
@section('content')
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-8 mb-5 mb-lg-0">
|
||||
<article class="row mb-4">
|
||||
<div class="col-lg-12 mb-2">
|
||||
<h2 class="mb-3">{{ $post->title }}</h2>
|
||||
<ul class="list-inline post-meta">
|
||||
<li class="list-inline-item"><i class="ti-user mr-2"></i><a
|
||||
href="{{ route('author_posts', $post->author->username) }}">{{ $post->author->name }}</a>
|
||||
</li>
|
||||
<li class="list-inline-item">Datum : {{ date_formatter($post->created_at) }}</li>
|
||||
<li class="list-inline-item">Kategorie : <a
|
||||
href="{{ route('category_posts', $post->post_category->slug) }}"
|
||||
class="ml-1">{{ $post->post_category->name }}</a>
|
||||
</li>
|
||||
<li class="list-inline-item"><i class="ti-timer mr-1"></i>
|
||||
{{ readDuration($post->title, $post->content) }} @choice('min|mins', readDuration($post->title, $post->content))
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col-12 mb-3">
|
||||
<img alt="single-image" src="/images/posts/{{ $post->featured_image }}" class="img-fluid rounded-lg">
|
||||
</div>
|
||||
<!-- SHARE BUTTONS -->
|
||||
<div class="share-buttons">
|
||||
<span class="title-color">Share: </span>
|
||||
<a href="https://www.facebook.com/sharer/sharer.php?u={{ urlencode(route('read_post', $post->slug)) }}"
|
||||
target="_blank" class="btn-facebook">
|
||||
<i class="ti-facebook"></i>
|
||||
</a>
|
||||
<a href="https://twitter.com/intent/tweet?url={{ urlencode(route('read_post', $post->slug)) }}&text={{ urlencode($post->title) }}"
|
||||
target="_blank" class="btn-twitter">
|
||||
<i class="ti-twitter-alt"></i>
|
||||
</a>
|
||||
<a href="https://www.pinterest.com/pin/create/button?url={{ urlencode(route('read_post', $post->slug)) }}&description={{ urlencode($post->title) }}"
|
||||
target="_blank" class="btn-pinterest">
|
||||
<i class="ti-pinterest"></i>
|
||||
</a>
|
||||
<a href="mailto:?subject={{ urlencode('Schau dir das an: ' . $post->title) }}&body={{ urlencode('Schau dir diesen Post an: ' . route('read_post', $post->slug)) }}"
|
||||
target="_blank" class="btn-email">
|
||||
<i class="ti-email"></i>
|
||||
</a>
|
||||
</div>
|
||||
<!-- SHARE BUTTONS -->
|
||||
<div class="col-lg-12">
|
||||
<div class="content">
|
||||
<p>
|
||||
{!! $post->content !!}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</article>
|
||||
<div class="prev-next-posts mt-3 mb-3">
|
||||
<div class="row justify-content-between p-4">
|
||||
<div class="col-md-6 mb-2">
|
||||
@if ($prevPost)
|
||||
<div>
|
||||
<h6>« Vorige</h6>
|
||||
<a href="{{ route('read_post', $prevPost->slug) }}">{{ $prevPost->title }}</a>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
<div class="col-md-6 mb-2 text-md-right">
|
||||
@if ($nextPost)
|
||||
<div>
|
||||
<h6>Nächste »</h6>
|
||||
<a href="{{ route('read_post', $nextPost->slug) }}">{{ $nextPost->title }}</a>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@if ($relatedPosts)
|
||||
<section>
|
||||
<h4>Relevante Posts</h4>
|
||||
<hr>
|
||||
@foreach ($relatedPosts as $related)
|
||||
<article class="row mb-5 mt-4">
|
||||
<div class="col-md-4 mb-4 mb-md-0">
|
||||
<div class="post-img-box">
|
||||
<img src="/images/posts/resized/thumb_{{ $related->featured_image }}"
|
||||
class="img-fluid rounded-lg" alt="post-thumb">
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-8">
|
||||
<h4>
|
||||
<a class="post-title" href="{{ route('read_post', $related->slug) }}">
|
||||
{{ $related->title }}
|
||||
</a>
|
||||
</h4>
|
||||
<ul class="list-inline post-meta mb-2">
|
||||
<li class="list-inline-item">
|
||||
<i class="ti-user mr-1"></i><a
|
||||
href="{{ route('author_posts', $post->author->username) }}">{{ $related->author->name }}</a>
|
||||
</li>
|
||||
<li class="list-inline-item">
|
||||
<i class="ti-calendar mr-1"></i>{{ date_formatter($related->created_at) }}
|
||||
</li>
|
||||
<li class="list-inline-item">
|
||||
Kategorie : <a href="{{ route('category_posts', $related->post_category->slug) }}"
|
||||
class="ml-1">{{ $related->post_category->name }}</a>
|
||||
</li>
|
||||
<li class="list-inline-item"><i class="ti-timer mr-1"></i>
|
||||
{{ readDuration($post->title, $post->content) }} @choice('min|mins', readDuration($related->title, $related->content))
|
||||
</li>
|
||||
</ul>
|
||||
{!! Str::ucfirst(words($related->content, 28)) !!}
|
||||
<a href="{{ route('read_post', $related->slug) }}" class="btn btn-outline-primary">Mehr
|
||||
lesen...</a>
|
||||
</div>
|
||||
</article>
|
||||
@endforeach
|
||||
</section>
|
||||
@endif
|
||||
|
||||
</div>
|
||||
<aside class="col-lg-4">
|
||||
<!-- Search -->
|
||||
<x-sidebar-search></x-sidebar-search>
|
||||
<!-- categories -->
|
||||
<x-sidebar-categories></x-sidebar-categories>
|
||||
<!-- tags -->
|
||||
<x-sidebar-tags></x-sidebar-tags>
|
||||
<!-- latest post -->
|
||||
<div class="widget">
|
||||
<h5 class="widget-title"><span>Letzte Post</span></h5>
|
||||
<!-- post-item -->
|
||||
@foreach (sidebar_latest_posts(4, $post->id) as $item)
|
||||
<ul class="list-unstyled widget-list">
|
||||
<li class="media widget-post align-items-center">
|
||||
<a href="{{ route('read_post', $item->slug) }}">
|
||||
<img loading="lazy" class="mr-3" alt="post-thumb"
|
||||
src="/images/posts/resized/thumb_{{ $item->featured_image }}">
|
||||
</a>
|
||||
<div class="media-body">
|
||||
<h6 class="mb-0">
|
||||
<a href="{{ route('read_post', $item->slug) }}">{{ $item->title }}</a>
|
||||
</h6>
|
||||
<small>{{ date_formatter($item->created_at) }}</small>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
@endforeach
|
||||
|
||||
</div>
|
||||
</aside>
|
||||
</div>
|
||||
@endsection
|
||||
@push('scripts')
|
||||
<script>
|
||||
$(document).on('click', '.share-buttons > a', function(e) {
|
||||
e.preventDefault();
|
||||
window.open($(this).attr('href'), '', 'height=450,width=450,top=' + ($(window).height() / 2 - 275) +
|
||||
', left=' + ($(window).width() / 2 - 225) +
|
||||
', toolbar=0, location=0, menubar=0, directories=0, scrollbars=0');
|
||||
return false;
|
||||
});
|
||||
</script>
|
||||
@endpush
|
||||
45
resources/views/front/pages/tag_posts.blade.php
Normal file
45
resources/views/front/pages/tag_posts.blade.php
Normal file
@@ -0,0 +1,45 @@
|
||||
@extends('front.layout.pages-layout')
|
||||
@section('pageTitle', isset($pageTitle) ? $pageTitle : 'Document Title')
|
||||
@section('head')
|
||||
<meta name="robots" content="noindex,follow">
|
||||
@endsection
|
||||
@section('meta_tags')
|
||||
{!! SEO::generate() !!}
|
||||
@endsection
|
||||
@section('content')
|
||||
<div class="w-full mb-3">
|
||||
<h3 class="title-color">{{ $pageTitle }}</h3>
|
||||
</div>
|
||||
@if ($posts->count())
|
||||
<div class="row">
|
||||
@foreach ($posts as $post)
|
||||
<div class="col-sm-6 col-md-4 col-lg-3 mb-2">
|
||||
<article class="mb-2">
|
||||
<div class="mb-2">
|
||||
<img src="/images/posts/resized/resized_{{ $post->featured_image }}" alt="tag-thumb"
|
||||
class="img-fluid rounded-lg" />
|
||||
</div>
|
||||
<h5>
|
||||
<a class="post-title" href="{{ route('read_post', $post->slug) }}">
|
||||
{{ $post->title }}
|
||||
</a>
|
||||
</h5>
|
||||
<ul class="list-inline post-meta mb-2">
|
||||
<li class="list-inline-item">Datum: {{ date_formatter($post->created_at) }}</li>
|
||||
<li class="list-inline-item">Kategorie: <a
|
||||
href="{{ route('category_posts', $post->post_category->slug) }}"
|
||||
class="ml-1">{{ $post->post_category->name }}</a> </li>
|
||||
</ul>
|
||||
</article>
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
@else
|
||||
<p><span class="text-danger">Keine Posts mit diesen Tags gefunden</span></p>
|
||||
@endif
|
||||
|
||||
<div class="pagination-block">
|
||||
{{ $posts->appends(request()->input())->links('custom_pagination') }}
|
||||
</div>
|
||||
|
||||
@endsection
|
||||
203
resources/views/livewire/admin/categories.blade.php
Normal file
203
resources/views/livewire/admin/categories.blade.php
Normal file
@@ -0,0 +1,203 @@
|
||||
<div>
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="pd-20 card-box mb-30">
|
||||
<div class="clearfix">
|
||||
<div class="pull-left">
|
||||
<h4 class="h4 text-blue">Haupt Kategorien</h4>
|
||||
</div>
|
||||
<div class="pull-right">
|
||||
<a href="javascript:;" wire:click="addParentCategory()" class="btn btn-primary btn-sm">Haupt
|
||||
Kategorie hinzufügen.</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="table-responsive mt-4">
|
||||
<table class="table table-borderless table-striped table-sm">
|
||||
<thead class="bg-secondary text-white">
|
||||
<th>#</th>
|
||||
<th>Name</th>
|
||||
<th>Anzahl der Kategorien</th>
|
||||
<th>Actions</th>
|
||||
</thead>
|
||||
<tbody id="sortable_parent_categories">
|
||||
@forelse ($pcategories as $item)
|
||||
<tr data-index="{{ $item->id }}" data-ordering="{{ $item->ordering }}">
|
||||
<td>{{ $item->id }}</td>
|
||||
<td>{{ $item->name }}</td>
|
||||
<td>{{ $item->children->count() }}</td>
|
||||
<td>
|
||||
<div class="table-actions">
|
||||
<a href="javascript:;" wire:click="editParentCategory({{ $item->id }})"
|
||||
class="text-primary mx-2">
|
||||
<i class="dw dw-edit2"></i>
|
||||
</a>
|
||||
<a href="javascript:;"
|
||||
wire:click="deleteParentCategory({{ $item->id }})"
|
||||
class="text-danger mx-2">
|
||||
<i class="dw dw-delete-3"></i>
|
||||
</a>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@empty
|
||||
<tr>
|
||||
<td colspan="4">
|
||||
<span class="text-danger">Keine Items gefunden</span>
|
||||
</td>
|
||||
</tr>
|
||||
@endforelse
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="d-blcok mt-1 text-center">
|
||||
{{ $pcategories->links('livewire::bootstrap') }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-12">
|
||||
<div class="pd-20 card-box mb-30">
|
||||
<div class="clearfix">
|
||||
<div class="pull-left">
|
||||
<h4 class="h4 text-blue">Kategorien</h4>
|
||||
</div>
|
||||
<div class="pull-right">
|
||||
<a href="javascript:;" wire:click="addCategory() " class="btn btn-primary btn-sm">Kategorie
|
||||
hinzufügen.</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="table-responsive mt-4">
|
||||
<table class="table table-borderless table-striped table-sm">
|
||||
<thead class="bg-secondary text-white">
|
||||
<th>#</th>
|
||||
<th>Name</th>
|
||||
<th>Haupt Kategorie</th>
|
||||
<th>Anzahl der Posts</th>
|
||||
<th>Actions</th>
|
||||
</thead>
|
||||
<tbody id="sortable_categories">
|
||||
@forelse ($categories as $item)
|
||||
<tr data-index="{{ $item->id }}" data-ordering="{{ $item->ordering }}">
|
||||
<td>{{ $item->id }}</td>
|
||||
<td>{{ $item->name }}</td>
|
||||
<td>{{ !is_null($item->parent_category) ? $item->parent_category->name : ' - ' }}
|
||||
</td>
|
||||
<td>{{ $item->posts->count() }}</td>
|
||||
<td>
|
||||
<div class="table-actions">
|
||||
<a href="javascript:;" wire:click="editCategory({{ $item->id }})"
|
||||
class="text-primary mx-2">
|
||||
<i class="dw dw-edit2"></i>
|
||||
</a>
|
||||
<a href="javascript:;" wire:click="deleteCategory({{ $item->id }})"
|
||||
class="text-danger mx-2">
|
||||
<i class="dw dw-delete-3"></i>
|
||||
</a>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@empty
|
||||
<tr>
|
||||
<td colspan="5">
|
||||
<span class="text-danger">Keine Items gefunden</span>
|
||||
</td>
|
||||
</tr>
|
||||
@endforelse
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="d-blcok mt-1 text-center">
|
||||
{{ $categories->links('livewire::bootstrap') }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div wire:ignore.self class="modal fade" id="pcategory_modal" tabindex="-1" role="dialog"
|
||||
aria-labelledby="myLargeModalLabel" aria-hidden="true" data-backdrop="static" data-keyboard="false">
|
||||
<div class="modal-dialog modal-dialog-centered">
|
||||
<form class="modal-content"
|
||||
wire:submit="{{ $isUpdateParentCategoryMode ? 'updateParentCategory()' : 'createParentCategory()' }}">
|
||||
<div class="modal-header">
|
||||
<h4 class="modal-title" id="myLargeModalLabel">
|
||||
{{ $isUpdateParentCategoryMode ? 'Update Haupt Kategorie' : 'Haupt Kategorie hinzufügen' }}
|
||||
</h4>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">
|
||||
×
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
@if ($isUpdateParentCategoryMode)
|
||||
<input type="hidden" wire:model="pcategory_id" />
|
||||
@endif
|
||||
<div class="form-group">
|
||||
<label for=""><b>Haupt Kategorie Name</b></label>
|
||||
<input type="text" class="form-control" wire:model="pcategory_name"
|
||||
placeholder="Hauptr Kategorie Namen eingeben" />
|
||||
@error('pcategory_name')
|
||||
<span class="text-danger ml-1">{{ $message }}</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="submit" class="btn btn-secondary" data-dismiss="modal">
|
||||
Schließen
|
||||
</button>
|
||||
<button type="submit" class="btn btn-primary">
|
||||
{{ $isUpdateParentCategoryMode ? 'Update Haupt Kategorie' : 'Haupt Kategorie erstellen' }}
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div wire:ignore.self class="modal fade" id="category_modal" tabindex="-1" role="dialog"
|
||||
aria-labelledby="myLargeModalLabel" aria-hidden="true" data-backdrop="static" data-keyboard="false">
|
||||
<div class="modal-dialog modal-dialog-centered">
|
||||
<form class="modal-content"
|
||||
wire:submit="{{ $isUpdateCategoryMode ? 'updateCategory()' : 'createCategory()' }}">
|
||||
<div class="modal-header">
|
||||
<h4 class="modal-title" id="myLargeModalLabel">
|
||||
{{ $isUpdateParentCategoryMode ? 'Update Kategorie' : 'Kategorie hinzufügen' }}
|
||||
</h4>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">
|
||||
×
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
@if ($isUpdateCategoryMode)
|
||||
<input type="hidden" wire:model="category_id" />
|
||||
@endif
|
||||
<div class="form-group">
|
||||
<label for=""><b>Haupt Kategorie</b></label>
|
||||
<select wire:model="parent" class="custom-select">
|
||||
<option value="0">Unkategoriert</option>
|
||||
@foreach ($pcategories as $item)
|
||||
<option value="{{ $item->id }}">{{ $item->name }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
@error('parent')
|
||||
<span class="text-danger ml-1">{{ $message }}</span>
|
||||
@enderror
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for=""><b>Kategorie Name</b></label>
|
||||
<input type="text" class="form-control" wire:model="category_name"
|
||||
placeholder="Kategorie Namen eingeben" />
|
||||
@error('category_name')
|
||||
<span class="text-danger ml-1">{{ $message }}</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="submit" class="btn btn-secondary" data-dismiss="modal">
|
||||
Schließen
|
||||
</button>
|
||||
<button type="submit" class="btn btn-primary">
|
||||
{{ $isUpdateCategoryMode ? 'Update Kategorie' : 'Kategorie erstellen' }}
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
104
resources/views/livewire/admin/posts.blade.php
Normal file
104
resources/views/livewire/admin/posts.blade.php
Normal file
@@ -0,0 +1,104 @@
|
||||
<div>
|
||||
<div class="pd-20 card-box mb-30">
|
||||
<div class="row mb-20">
|
||||
<div class="col-md-4">
|
||||
<label for="search"><b class="text-secondary">Suche:</b></label>
|
||||
<input wire:model.live="search" id="search" type="text" class="form-control"
|
||||
placeholder="Suche Posts..." />
|
||||
</div>
|
||||
@if (auth()->user()->type == 'superAdmin')
|
||||
<div class="col-md-2">
|
||||
<label for="author"><b class="text-secondary">Author:</b></label>
|
||||
<select wire:model.live="author" id="author" class="custom-select form-control">
|
||||
<option value="">Keine Ausgewählt</option>
|
||||
@foreach (App\Models\User::whereHas('posts')->get() as $user)
|
||||
<option value="{{ $user->id }}">{{ $user->name }}</option>
|
||||
@endforeach
|
||||
|
||||
</select>
|
||||
</div>
|
||||
@endif
|
||||
<div class="col-md-2">
|
||||
<label for="category"><b class="text-secondary">Kategorie:</b></label>
|
||||
<select wire:model.live="category" id="category" class="custom-select form-control">
|
||||
<option value="">Keine Ausgewählt</option>
|
||||
{!! $categories_html !!}
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-2">
|
||||
<label for="visibility"><b class="text-secondary">Sichtbarkeit:</b></label>
|
||||
<select wire:model.live="visibility" id="visibility" class="custom-select form-control">
|
||||
<option value="">Keine Ausgewählt</option>
|
||||
<option value="public">Öffentlich</option>
|
||||
<option value="private">Privat</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-2">
|
||||
<label for="sort"><b class="text-secondary">Sortiert nach:</b></label>
|
||||
<select wire:model.live="sortBy" id="sort" class="custom-select form-control">
|
||||
<option value="asc">Aufsteigend sortiert</option>
|
||||
<option value="desc">Absteigend sortiert</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="table-responsive">
|
||||
<table class="table table-striped table-auto table-sm">
|
||||
<thead class="bg-secondary text-white">
|
||||
<th scope="col">#ID</th>
|
||||
<th scope="col">Image</th>
|
||||
<th scope="col">Titel</th>
|
||||
<th scope="col">Author</th>
|
||||
<th scope="col">Kategorie</th>
|
||||
<th scope="col">Sichtbar</th>
|
||||
<th scope="col">Action</th>
|
||||
</thead>
|
||||
<tbody>
|
||||
@forelse ($posts as $item)
|
||||
<tr>
|
||||
<td scope="row">{{ $item->id }}</td>
|
||||
<td>
|
||||
<img src="/images/posts/resized/resized_{{ $item->featured_image }}" width="100"
|
||||
alt="{{ $item->featured_image }}" />
|
||||
</td>
|
||||
<td>{{ $item->title }}</td>
|
||||
<td>{{ $item->author->name }}</td>
|
||||
<td>{{ $item->post_category->name }}</td>
|
||||
<td>
|
||||
@if ($item->visibility == 1)
|
||||
<span class="badge badge-pill badge-success">
|
||||
<i class="icon-copy ti-world"></i> Public
|
||||
</span>
|
||||
@else
|
||||
<span class="badge badge-pill badge-warning">
|
||||
<i class="icon-copy ti-lock"></i> Privat
|
||||
</span>
|
||||
@endif
|
||||
</td>
|
||||
<td>
|
||||
<div class="table-actions">
|
||||
<a href="{{ route('admin.edit_post', ['id' => $item->id]) }}" data-color="#265ed7"
|
||||
style="color: rgb(38,94,215)">
|
||||
<i class="icon-copy dw dw-edit2"></i>
|
||||
</a>
|
||||
<a href="javascript:;" wire:click="deletePost({{ $item->id }})"
|
||||
data-color="#e95959" style="color: rgb(233,89,89)">
|
||||
<i class="icon-copy dw dw-delete-3"></i>
|
||||
</a>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@empty
|
||||
<tr>
|
||||
<td colspan="7">
|
||||
<span class="text-danger">Keine Post(s) gefunden! </span>
|
||||
</td>
|
||||
</tr>
|
||||
@endforelse
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="block mt-1">
|
||||
{{ $posts->links('livewire::bootstrap') }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
269
resources/views/livewire/admin/profile.blade.php
Normal file
269
resources/views/livewire/admin/profile.blade.php
Normal file
@@ -0,0 +1,269 @@
|
||||
<div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xl-4 col-lg-4 col-md-4 col-sm-12 mb-30">
|
||||
<div class="pd-20 card-box height-100-p">
|
||||
<div class="profile-photo">
|
||||
<a href="javascript:;"
|
||||
onclick="event.preventDefault();document.getElementById('profilePictureFile').click();"
|
||||
class="edit-avatar"><i class="fa fa-pencil"></i></a>
|
||||
<img src="{{ $user->picture }}" alt="" class="avatar-photo" id="profilePicturePreview"
|
||||
alt="profilePicturePreview" />
|
||||
<input type="file" name="profilePictureFile" id="profilePictureFile" class="d-none"
|
||||
style="opacity: 0" accept=".jpg,.jpeg,.png">
|
||||
</div>
|
||||
<h5 class="text-center h5 mb-0">{{ $user->name }}</h5>
|
||||
<p class="text-center text-muted font-14">
|
||||
{{ $user->email }}
|
||||
</p>
|
||||
<div class="profile-social">
|
||||
<h5 class="mb-20 h5 text-blue">Social Links</h5>
|
||||
<ul class="clearfix">
|
||||
@if (auth()->user()->social_links->facebook_url != '')
|
||||
<li>
|
||||
<a href="{{ auth()->user()->social_links->facebook_url }}" class="btn"
|
||||
data-bgcolor="#3b5998" data-color="#ffffff"><i class="fa fa-facebook"></i></a>
|
||||
</li>
|
||||
@endif
|
||||
@if (auth()->user()->social_links->twitter_url != '')
|
||||
<li>
|
||||
<a href="{{ auth()->user()->social_links->twitter_url }}" class="btn"
|
||||
data-bgcolor="#1da1f2" data-color="#ffffff"><i class="fa fa-twitter"></i></a>
|
||||
</li>
|
||||
@endif
|
||||
@if (auth()->user()->social_links->linkedin_url != '')
|
||||
<li>
|
||||
<a href="{{ auth()->user()->social_links->linkedin_url }}" class="btn"
|
||||
data-bgcolor="#007bb5" data-color="#ffffff"><i class="fa fa-linkedin"></i></a>
|
||||
</li>
|
||||
@endif
|
||||
@if (auth()->user()->social_links->instagram_url != '')
|
||||
<li>
|
||||
<a href="{{ auth()->user()->social_links->instagram_url }}" class="btn"
|
||||
data-bgcolor="#f46f30" data-color="#ffffff"><i class="fa fa-instagram"></i></a>
|
||||
</li>
|
||||
@endif
|
||||
@if (auth()->user()->social_links->youtube_url != '')
|
||||
<li>
|
||||
<a href="{{ auth()->user()->social_links->youtube_url }}" class="btn"
|
||||
data-bgcolor="#ff0000" data-color="#ffffff"><i class="fa fa-youtube"></i></a>
|
||||
</li>
|
||||
@endif
|
||||
@if (auth()->user()->social_links->github_url != '')
|
||||
<li>
|
||||
<a href="{{ auth()->user()->social_links->github_url }}" class="btn"
|
||||
data-bgcolor="#a6a6a6" data-color="#ffffff"><i class="fa fa-github"></i></a>
|
||||
</li>
|
||||
@endif
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xl-8 col-lg-8 col-md-8 col-sm-12 mb-30">
|
||||
<div class="card-box height-100-p overflow-hidden">
|
||||
<div class="profile-tab height-100-p">
|
||||
<div class="tab height-100-p">
|
||||
<ul class="nav nav-tabs customtab" role="tablist">
|
||||
<li class="nav-item">
|
||||
<a wire:click="selectTab('personal_details')"
|
||||
class="nav-link {{ $tab == 'personal_details' ? 'active' : '' }}" data-toggle="tab"
|
||||
href="#personal_details" role="tab">Personal
|
||||
Details</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a wire:click="selectTab('update_password')"
|
||||
class="nav-link {{ $tab == 'update_password' ? 'active' : '' }}" data-toggle="tab"
|
||||
href="#update_password" role="tab">Update
|
||||
Passwort</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a wire:click="selectTab('social_links')"
|
||||
class="nav-link {{ $tab == 'social_links' ? 'active' : '' }}" data-toggle="tab"
|
||||
href="#social_links" role="tab">Social
|
||||
Links</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab-content">
|
||||
<!-- Timeline Tab start -->
|
||||
<div class="tab-pane fade {{ $tab == 'personal_details' ? 'show active' : '' }} "
|
||||
id="personal_details" role="tabpanel">
|
||||
<div class="pd-20">
|
||||
<form wire:submit="updatePersonalDetails()">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div class="form-group">
|
||||
<label for="">Dein Namen<span
|
||||
style="color:red">*</span></label>
|
||||
<input type="text" class="form-control" wire:model="name"
|
||||
placeholder="Dein Namen" />
|
||||
@error('name')
|
||||
<span class="text-danger">{{ $message }}</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="form-group">
|
||||
<label for="">Deine E-Mail</label>
|
||||
<input type="email" class="form-control" wire:model="email"
|
||||
disabled placeholder="Deine Email" />
|
||||
@error('email')
|
||||
<span class="text-danger">{{ $message }}</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="form-group">
|
||||
<label for="">Benutzername<span
|
||||
style="color:red">*</span></label>
|
||||
<input type="text" class="form-control" wire:model="username"
|
||||
placeholder="Dein Benutzername" />
|
||||
@error('username')
|
||||
<span class="text-danger">{{ $message }}</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="form-group">
|
||||
<label for="">Deine Bio</label>
|
||||
<textarea wire:model="bio" cols="4" rows="4" class="form-control" placeholder="Deine Bio"></textarea>
|
||||
@error('bio')
|
||||
<span class="text-danger">{{ $message }}</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<button type="submit" class="btn btn-primary">Einstellungen
|
||||
speichern</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Timeline Tab End -->
|
||||
<!-- Tasks Tab start -->
|
||||
<div class="tab-pane fade {{ $tab == 'update_password' ? 'show active' : '' }}"
|
||||
id="update_password" role="tabpanel">
|
||||
<div class="pd-20 profile-task-wrap">
|
||||
<form wire:submit="updatePassword()">
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
<div class="form-group">
|
||||
<label for="">Aktuelles Passwort</label>
|
||||
<input type="password" class="form-control"
|
||||
wire:model="current_password"
|
||||
placeholder="Gib dein aktuelles Passwort ein" />
|
||||
|
||||
@error('current_password')
|
||||
<span class="text-danger">{{ $message }}</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<div class="form-group">
|
||||
<label for="">Neues Passwort</label>
|
||||
<input type="password" class="form-control"
|
||||
wire:model="new_password"
|
||||
placeholder="Gib dein neues Passwort ein" />
|
||||
|
||||
@error('new_password')
|
||||
<span class="text-danger">{{ $message }}</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<div class="form-group">
|
||||
<label for="">Neues Passwort bestötigen</label>
|
||||
<input type="password" class="form-control"
|
||||
wire:model="new_password_confirmation"
|
||||
placeholder="Bestätige dein neues Passwort ein" />
|
||||
|
||||
@error('new_password_confirmation')
|
||||
<span class="text-danger">{{ $message }}</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary">Passwort ändern</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Tasks Tab End -->
|
||||
<!-- Setting Tab start -->
|
||||
<div class="tab-pane fade {{ $tab == 'social_links' ? 'show active' : '' }}"
|
||||
id="social_links" role="tabpanel">
|
||||
<div class="pd-20 profile-task-wrap">
|
||||
<form method="POST" wire:submit="updateSocialLinks()">
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<div class="mb-3">
|
||||
<label for=""><b>Facebook</b></label>
|
||||
<input type="text" class="form-control"
|
||||
wire:model="facebook_url" placeholder="Facebook Url" />
|
||||
@error('facebook_url')
|
||||
<span class="text-danger ml-1">{{ $message }}</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="mb-3">
|
||||
<label for=""><b>Instagram</b></label>
|
||||
<input type="text" class="form-control"
|
||||
wire:model="instagram_url" placeholder="Instagram Url" />
|
||||
@error('instagram_url')
|
||||
<span class="text-danger ml-1">{{ $message }}</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="mb-3">
|
||||
<label for=""><b>YouTube</b></label>
|
||||
<input type="text" class="form-control"
|
||||
wire:model="youtube_url" placeholder="Youtube Url" />
|
||||
@error('youtube_url')
|
||||
<span class="text-danger ml-1">{{ $message }}</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="mb-3">
|
||||
<label for=""><b>LinkedIn</b></label>
|
||||
<input type="text" class="form-control"
|
||||
wire:model="linkedin_url" placeholder="LinkedIn Url" />
|
||||
@error('linkedin_url')
|
||||
<span class="text-danger ml-1">{{ $message }}</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="mb-3">
|
||||
<label for=""><b>Twitter</b></label>
|
||||
<input type="text" class="form-control"
|
||||
wire:model="twitter_url" placeholder="Twitter Url" />
|
||||
@error('twitter_url')
|
||||
<span class="text-danger ml-1">{{ $message }}</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="mb-3">
|
||||
<label for=""><b>GitHub</b></label>
|
||||
<input type="text" class="form-control"
|
||||
wire:model="github_url" placeholder="GitHub Url" />
|
||||
@error('github_url')
|
||||
<span class="text-danger ml-1">{{ $message }}</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary">Speichern</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Setting Tab End -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
180
resources/views/livewire/admin/settings.blade.php
Normal file
180
resources/views/livewire/admin/settings.blade.php
Normal file
@@ -0,0 +1,180 @@
|
||||
<div>
|
||||
<div class="tab">
|
||||
<ul class="nav nav-tabs customtab" role="tablist">
|
||||
<li class="nav-item">
|
||||
<a wire:click="selectTab('general_settings')"
|
||||
class="nav-link {{ $tab == 'general_settings' ? 'active' : '' }}" data-toggle="tab"
|
||||
href="#general_settings" role="tab" aria-selected="true">Allgemeine Einstellungen</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a wire:click="selectTab('logo_favicon')" class="nav-link {{ $tab == 'logo_favicon' ? 'active' : '' }}"
|
||||
data-toggle="tab" href="#logo_favicon" role="tab" aria-selected="false">Logo &
|
||||
Favicon</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a wire:click="selectTab('social_links')" class="nav-link {{ $tab == 'social_links' ? 'active' : '' }}"
|
||||
data-toggle="tab" href="#social_links" role="tab" aria-selected="false">Social Links</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab-content">
|
||||
<div class="tab-pane fade {{ $tab == 'general_settings' ? 'active show' : '' }}" id="general_settings"
|
||||
role="tabpanel">
|
||||
<div class="pd-20">
|
||||
<form wire:submit="updateSiteInfo()">
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<div class="form-group">
|
||||
<label><b>Seiten Titel</b><span style="color:red">*</span></label>
|
||||
<input type="text" class="form-control" wire:model="site_title"
|
||||
placeholder="Seiten Titel angeben" />
|
||||
@error('site_title')
|
||||
<span class="text-danger ml-1">{{ $message }}</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="form-group">
|
||||
<label for=""><b>Seiten Kontakt E-Mail</b><span
|
||||
style="color:red">*</span></label>
|
||||
<input type="text" class="form-control" wire:model="site_email"
|
||||
placeholder="Kontakt E-Mail Adresse angeben" />
|
||||
@error('site_email')
|
||||
<span class="text-danger ml-1">{{ $message }}</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="form-group">
|
||||
<label for=""><b>Seiten Kontakt Telefonnummer</b><small>
|
||||
(optional)</small></label>
|
||||
<input type="text" class="form-control" wire:model="site_phone"
|
||||
placeholder="Kontakt Telefonnummer angeben" />
|
||||
@error('site_phone')
|
||||
<span class="text-danger ml-1">{{ $message }}</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="form-group">
|
||||
<label for=""><b>Seiten Meta Keywords</b><small>
|
||||
(optional)</small></label>
|
||||
<input type="text" class="form-control" wire:model="site_meta_keywords"
|
||||
placeholder="Eg: ecommerce, free api, laravel, dropshipping" />
|
||||
@error('site_meta_keywords')
|
||||
<span class="text-danger ml-1">{{ $message }}</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for=""><b>Seiten Meta Description</b><small>
|
||||
(optional)</small></label>
|
||||
<textarea class="form-control" rows="4" cols="4" wire:model="site_meta_description"
|
||||
placeholder="Meta Description hier angeben"></textarea>
|
||||
@error('site_meta_description')
|
||||
<span class="text-danger ml-1">{{ $message }}</span>
|
||||
@enderror
|
||||
</div>
|
||||
<button class="btn btn-primary" type="submit">Speichern</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab-pane fade {{ $tab == 'logo_favicon' ? 'active show' : '' }}" id="logo_favicon"
|
||||
role="tabpanel">
|
||||
<div class="pd-20">
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<h6>Seiten Logo</h6>
|
||||
<div class="mb-2 mt-1" style="max-width: 200px">
|
||||
<img wire:ignore
|
||||
src="/images/site/{{ isset(settings()->site_logo) ? settings()->site_logo : '' }}"
|
||||
alt="img-thumbnail" class="img-thumbnail" id="preview_site_logo">
|
||||
</div>
|
||||
<form action="{{ route('admin.update_logo') }}" method="post"
|
||||
enctype="multipart/form-data" id="updateLogoForm">
|
||||
@csrf
|
||||
|
||||
<div class="mb-2">
|
||||
<input type="file" name="site_logo" id="profileLogoFile" accept="image/*"
|
||||
class="form-control" />
|
||||
<span class="text-danger ml-1"></span>
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary">Logo ändern</button>
|
||||
</form>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<h6>Seiten Favicon</h6>
|
||||
<div class="mb-2 mt-1" style="max-width: 100px">
|
||||
<img wire:ignore
|
||||
src="/images/site/{{ isset(settings()->site_favicon) ? settings()->site_favicon : '' }}"
|
||||
alt="img-thumbnail" class="img-thumbnail" id="preview_site_favicon">
|
||||
</div>
|
||||
<form action="{{ route('admin.update_favicon') }}" method="POST"
|
||||
enctype="multipart/form-data" id="updateFaviconForm">
|
||||
@csrf
|
||||
<div class="mb-2">
|
||||
<input type="file" name="site_favicon" id="profileFaviconFile"
|
||||
class="form-control" accept="image/png,image/jpeg, image/jpg" />
|
||||
<span class="text-danger
|
||||
ml-1"></span>
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary">Favicon ändern</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab-pane fade {{ $tab == 'social_links' ? 'active show' : '' }}" id="social_links"
|
||||
role="tabpanel">
|
||||
<div class="pd-20">
|
||||
<form method="POST" wire:submit="updateSiteSocialLinks()">
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<div class="mb-3">
|
||||
<label for=""><b>Facebook</b></label>
|
||||
<input type="text" class="form-control" wire:model="facebook_url"
|
||||
placeholder="Facebook Url" />
|
||||
@error('facebook_url')
|
||||
<span class="text-danger ml-1">{{ $message }}</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="mb-3">
|
||||
<label for=""><b>Instagram</b></label>
|
||||
<input type="text" class="form-control" wire:model="instagram_url"
|
||||
placeholder="Instagram Url" />
|
||||
@error('instagram_url')
|
||||
<span class="text-danger ml-1">{{ $message }}</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="mb-3">
|
||||
<label for=""><b>LinkedIn</b></label>
|
||||
<input type="text" class="form-control" wire:model="linkedin_url"
|
||||
placeholder="LinkedIn Url" />
|
||||
@error('linkedin_url')
|
||||
<span class="text-danger ml-1">{{ $message }}</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="mb-3">
|
||||
<label for=""><b>Twitter (X)</b></label>
|
||||
<input type="text" class="form-control" wire:model="twitter_url"
|
||||
placeholder="Twitter Url" />
|
||||
@error('twitter_url')
|
||||
<span class="text-danger ml-1">{{ $message }}</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary">Speichern</button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
149
resources/views/livewire/admin/slides.blade.php
Normal file
149
resources/views/livewire/admin/slides.blade.php
Normal file
@@ -0,0 +1,149 @@
|
||||
<div>
|
||||
<div class="page-header">
|
||||
<div class="row">
|
||||
<div class="col-md-6 col-sm-12">
|
||||
<div class="title">
|
||||
<h4>Slider hinzufügen</h4>
|
||||
</div>
|
||||
<nav aria-label="breadcrumb" role="navigation">
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item">
|
||||
<a href="{{ route('admin.dashboard') }}">Home</a>
|
||||
</li>
|
||||
<li class="breadcrumb-item active" aria-current="page">
|
||||
Manage Slider
|
||||
</li>
|
||||
</ol>
|
||||
</nav>
|
||||
</div>
|
||||
<div class="col-md-6 col-sm-12 text-right">
|
||||
<a href="javascript:;" wire:click="addSlide()" class="btn btn-primary">Slider hinzufügen</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card-box pd-20 mb-4">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-striped table-auto table-sm table-condensed">
|
||||
<thead class="bg-secondary text-white">
|
||||
<th scope="col">#ID</th>
|
||||
<th scope="col">Image</th>
|
||||
<th scope="col">Heading</th>
|
||||
<th scope="col">Link</th>
|
||||
<th scope="col">Status</th>
|
||||
<th scope="col">Action</th>
|
||||
</thead>
|
||||
<tbody id="sortable_slides">
|
||||
@forelse ($slides as $slide)
|
||||
<tr data-index="{{ $slide->id }}" data-ordering="{{ $slide->ordering }}">
|
||||
<td scope="row">#{{ $slide->id }}</td>
|
||||
<td>
|
||||
<a href="">
|
||||
<img src="/images/slides/{{ $slide->image }}" width="100" alt="img-thumbnail" />
|
||||
</a>
|
||||
</td>
|
||||
<td>{{ $slide->heading }}</td>
|
||||
<td><a
|
||||
href="{{ $slide->link ? $slide->link : ' - ' }}">{{ $slide->link ? 'Klick mich' : ' - ' }}</a>
|
||||
</td>
|
||||
<td>
|
||||
@if ($slide->status == 1)
|
||||
<span class="badge badge-pill badge-success">Public</span>
|
||||
@else
|
||||
<span class="badge badge-pill badge-secondary">Unveröffentlicht</span>
|
||||
@endif
|
||||
</td>
|
||||
<td>
|
||||
<div class="table-actions">
|
||||
<a href="javascript:;" wire:click="editSlide({{ $slide->id }})"
|
||||
class="text-primary mx-2">
|
||||
<i class="dw dw-edit2"></i>
|
||||
</a>
|
||||
<a href="javascript:;"
|
||||
wire:click="$dispatch('deleteSlide',{id:{{ $slide->id }} })"
|
||||
class="text-danger mx-2">
|
||||
<i class="dw dw-delete-3"></i>
|
||||
</a>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@empty
|
||||
<tr>
|
||||
<td colspan="6">
|
||||
<span class="text-danger">Keine Slides gefunden</span>
|
||||
</td>
|
||||
</tr>
|
||||
@endforelse
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Slider -->
|
||||
<div wire:ignore.self class="modal fade" id="slide_modal" tabindex="-1" role="dialog"
|
||||
aria-labelledby="myLargeModalLabel" aria-hidden="true" data-backdrop="static" data-keyword="false">
|
||||
<div class="modal-dialog modal-dialog-centered">
|
||||
<form class="modal-content" wire:submit="{{ $isUpdateSlideMode ? 'updateSlide()' : 'createSlide()' }}">
|
||||
<div class="modal-header">
|
||||
<h4 class="modal-title" id="myLargeModalLabel">
|
||||
{{ $isUpdateSlideMode ? 'Update Slide' : 'Slide hinzufügen' }}
|
||||
</h4>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">
|
||||
×
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
@if ($isUpdateSlideMode)
|
||||
<input type="hidden" wire:model="slide_id" />
|
||||
@endif
|
||||
<div class="form-group">
|
||||
<label for=""><b>Heading:</b></label>
|
||||
<input type="text" class="form-control" wire:model="slide_heading"
|
||||
placeholder="Enter Slide Heading" />
|
||||
@error('slide_heading')
|
||||
<span class="text-danger ml-1">{{ $message }}</span>
|
||||
@enderror
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for=""><b>Link:</b></label>
|
||||
<input type="text" class="form-control" wire:model="slide_link"
|
||||
placeholder="Enter Slide Link" />
|
||||
@error('slide_link')
|
||||
<span class="text-danger ml-1">{{ $message }}</span>
|
||||
@enderror
|
||||
</div>
|
||||
@if ($selected_slide_image)
|
||||
<div class="d-block" style="max-width: 200px;">
|
||||
<img src="{{ $selected_slide_image }}" alt="img-thumbnail" class="img-thumbnail"
|
||||
style="max-width: 100%; height: auto;" />
|
||||
</div>
|
||||
@endif
|
||||
<div class="form-group">
|
||||
<label for=""><b>Image:</b></label>
|
||||
<input type="file" class="form-control" wire:model="slide_image"
|
||||
accept="image/png,image/jpeg, image/jpg" />
|
||||
@error('slide_image')
|
||||
<span class="text-danger ml-1">{{ $message }}</span>
|
||||
@enderror
|
||||
</div>
|
||||
<div class="custom-control custom-checkbox mb-5">
|
||||
<input type="checkbox" class="custom-control-input" id="customCheck"
|
||||
wire:model="slide_status" />
|
||||
<label for="customCheck" class="custom-control-label">
|
||||
Visible on Slider
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">
|
||||
Close
|
||||
</button>
|
||||
<button type="submit" class="btn btn-primary">
|
||||
{{ $isUpdateSlideMode ? 'Speichern' : 'Erstellen' }}
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /Slider -->
|
||||
</div>
|
||||
25
resources/views/livewire/admin/top-user-info.blade.php
Normal file
25
resources/views/livewire/admin/top-user-info.blade.php
Normal file
@@ -0,0 +1,25 @@
|
||||
<div>
|
||||
<div class="user-info-dropdown">
|
||||
<div class="dropdown">
|
||||
<a class="dropdown-toggle" href="#" role="button" data-toggle="dropdown">
|
||||
<span class="user-icon">
|
||||
<img src="{{ $user->picture }}" alt="{{ $user->name }}" />
|
||||
</span>
|
||||
<span class="user-name">{{ $user->name }}</span>
|
||||
</a>
|
||||
<div class="dropdown-menu dropdown-menu-right dropdown-menu-icon-list">
|
||||
<a class="dropdown-item" href="{{ route('admin.profile') }}"><i class="dw dw-user1"></i>
|
||||
Profile</a>
|
||||
<a class="dropdown-item" href="{{ route('admin.profile') }} "><i class="dw dw-settings2"></i>
|
||||
Einstellung</a>
|
||||
<a class="dropdown-item" href="{{ route('admin.logout') }}"
|
||||
onclick="event.preventDefault(); document.getElementById("logout-form").submit();"><i
|
||||
class="dw dw-logout"></i>
|
||||
Ausloggen</a>
|
||||
<form action="{{ route('admin.logout') }}" id="logout-form" method="POST">
|
||||
@csrf
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
12
resources/views/livewire/newsletter-form.blade.php
Normal file
12
resources/views/livewire/newsletter-form.blade.php
Normal file
@@ -0,0 +1,12 @@
|
||||
<div>
|
||||
<form class="subscription" wire:submit="subscribe()" method="post">
|
||||
<div class="position-relative">
|
||||
<i class="ti-email email-icon"></i>
|
||||
<input type="email" wire:model.live="email" class="form-control" placeholder="Ihre Email Address">
|
||||
@error('email')
|
||||
<span class="text-danger ml-1">{{ $message }}</span>
|
||||
@enderror
|
||||
</div>
|
||||
<button class="btn btn-primary btn-block rounded" type="submit">Subscribe now</button>
|
||||
</form>
|
||||
</div>
|
||||
0
resources/views/vendor/elfinder/.gitkeep
vendored
Normal file
0
resources/views/vendor/elfinder/.gitkeep
vendored
Normal file
64
resources/views/vendor/elfinder/ckeditor4.blade.php
vendored
Normal file
64
resources/views/vendor/elfinder/ckeditor4.blade.php
vendored
Normal file
@@ -0,0 +1,64 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="{{ app()->getLocale() }}">
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Filemanager</title>
|
||||
|
||||
<!-- jQuery and jQuery UI (REQUIRED) -->
|
||||
<link rel="stylesheet" href="/extra-assets/jquery-ui/jquery-ui.min.css" />
|
||||
<script src="/extra-assets/jquery-ui/external/jquery/jquery.js"></script>
|
||||
<script src="/extra-assets/jquery-ui/jquery-ui.min.js"></script>
|
||||
|
||||
<!-- elFinder CSS (REQUIRED) -->
|
||||
<link rel="stylesheet" type="text/css" href="{{ asset($dir . '/css/elfinder.min.css') }}">
|
||||
<link rel="stylesheet" type="text/css" href="{{ asset($dir . '/css/theme.css') }}">
|
||||
|
||||
<!-- elFinder JS (REQUIRED) -->
|
||||
<script src="{{ asset($dir . '/js/elfinder.min.js') }}"></script>
|
||||
|
||||
@if ($locale)
|
||||
<!-- elFinder translation (OPTIONAL) -->
|
||||
<script src="{{ asset($dir . "/js/i18n/elfinder.$locale.js") }}"></script>
|
||||
@endif
|
||||
|
||||
<!-- elFinder initialization (REQUIRED) -->
|
||||
<script type="text/javascript" charset="utf-8">
|
||||
// Helper function to get parameters from the query string.
|
||||
function getUrlParam(paramName) {
|
||||
var reParam = new RegExp('(?:[\?&]|&)' + paramName + '=([^&]+)', 'i');
|
||||
var match = window.location.search.match(reParam);
|
||||
|
||||
return (match && match.length > 1) ? match[1] : '';
|
||||
}
|
||||
|
||||
$().ready(function() {
|
||||
var funcNum = getUrlParam('CKEditorFuncNum');
|
||||
|
||||
var elf = $('#elfinder').elfinder({
|
||||
// set your elFinder options here
|
||||
@if ($locale)
|
||||
lang: '{{ $locale }}', // locale
|
||||
@endif
|
||||
customData: {
|
||||
_token: '{{ csrf_token() }}'
|
||||
},
|
||||
url: '{{ route('elfinder.connector') }}', // connector URL
|
||||
soundPath: '{{ asset($dir . '/sounds') }}',
|
||||
getFileCallback: function(file) {
|
||||
window.opener.CKEDITOR.tools.callFunction(funcNum, file.url);
|
||||
window.close();
|
||||
}
|
||||
}).elfinder('instance');
|
||||
});
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<!-- Element where elFinder will be created (REQUIRED) -->
|
||||
<div id="elfinder"></div>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
61
resources/views/vendor/elfinder/ckeditor4.php
vendored
Normal file
61
resources/views/vendor/elfinder/ckeditor4.php
vendored
Normal file
@@ -0,0 +1,61 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="<?= app()->getLocale() ?>">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>elFinder 2.0</title>
|
||||
|
||||
<!-- jQuery and jQuery UI (REQUIRED) -->
|
||||
<link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/themes/smoothness/jquery-ui.css" />
|
||||
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
|
||||
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/jquery-ui.min.js"></script>
|
||||
|
||||
<!-- elFinder CSS (REQUIRED) -->
|
||||
<link rel="stylesheet" type="text/css" href="<?= asset($dir.'/css/elfinder.min.css') ?>">
|
||||
<link rel="stylesheet" type="text/css" href="<?= asset($dir.'/css/theme.css') ?>">
|
||||
|
||||
<!-- elFinder JS (REQUIRED) -->
|
||||
<script src="<?= asset($dir.'/js/elfinder.min.js') ?>"></script>
|
||||
|
||||
<?php if($locale){ ?>
|
||||
<!-- elFinder translation (OPTIONAL) -->
|
||||
<script src="<?= asset($dir."/js/i18n/elfinder.$locale.js") ?>"></script>
|
||||
<?php } ?>
|
||||
|
||||
<!-- elFinder initialization (REQUIRED) -->
|
||||
<script type="text/javascript" charset="utf-8">
|
||||
// Helper function to get parameters from the query string.
|
||||
function getUrlParam(paramName) {
|
||||
var reParam = new RegExp('(?:[\?&]|&)' + paramName + '=([^&]+)', 'i') ;
|
||||
var match = window.location.search.match(reParam) ;
|
||||
|
||||
return (match && match.length > 1) ? match[1] : '' ;
|
||||
}
|
||||
|
||||
$().ready(function() {
|
||||
var funcNum = getUrlParam('CKEditorFuncNum');
|
||||
|
||||
var elf = $('#elfinder').elfinder({
|
||||
// set your elFinder options here
|
||||
<?php if($locale){ ?>
|
||||
lang: '<?= $locale ?>', // locale
|
||||
<?php } ?>
|
||||
customData: {
|
||||
_token: '<?= csrf_token() ?>'
|
||||
},
|
||||
url: '<?= route("elfinder.connector") ?>', // connector URL
|
||||
soundPath: '<?= asset($dir.'/sounds') ?>',
|
||||
getFileCallback : function(file) {
|
||||
window.opener.CKEDITOR.tools.callFunction(funcNum, file.url);
|
||||
window.close();
|
||||
}
|
||||
}).elfinder('instance');
|
||||
});
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<!-- Element where elFinder will be created (REQUIRED) -->
|
||||
<div id="elfinder"></div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
49
resources/views/vendor/elfinder/elfinder.blade.php
vendored
Normal file
49
resources/views/vendor/elfinder/elfinder.blade.php
vendored
Normal file
@@ -0,0 +1,49 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="{{ app()->getLocale() }}">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>elFinder 2.0</title>
|
||||
|
||||
<!-- jQuery and jQuery UI (REQUIRED) -->
|
||||
<link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/jqueryui/1.13.2/themes/smoothness/jquery-ui.css" />
|
||||
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
|
||||
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.13.2/jquery-ui.min.js"></script>
|
||||
|
||||
<!-- elFinder CSS (REQUIRED) -->
|
||||
<link rel="stylesheet" type="text/css" href="{{ asset($dir.'/css/elfinder.min.css') }}">
|
||||
<link rel="stylesheet" type="text/css" href="{{ asset($dir.'/css/theme.css') }}">
|
||||
|
||||
<!-- elFinder JS (REQUIRED) -->
|
||||
<script src="{{ asset($dir.'/js/elfinder.min.js') }}"></script>
|
||||
|
||||
@if($locale)
|
||||
<!-- elFinder translation (OPTIONAL) -->
|
||||
<script src="{{ asset($dir."/js/i18n/elfinder.$locale.js") }}"></script>
|
||||
@endif
|
||||
|
||||
<!-- elFinder initialization (REQUIRED) -->
|
||||
<script type="text/javascript" charset="utf-8">
|
||||
// Documentation for client options:
|
||||
// https://github.com/Studio-42/elFinder/wiki/Client-configuration-options
|
||||
$().ready(function() {
|
||||
$('#elfinder').elfinder({
|
||||
// set your elFinder options here
|
||||
@if($locale)
|
||||
lang: '{{ $locale }}', // locale
|
||||
@endif
|
||||
customData: {
|
||||
_token: '{{ csrf_token() }}'
|
||||
},
|
||||
url : '{{ route("elfinder.connector") }}', // connector URL
|
||||
soundPath: '{{ asset($dir.'/sounds') }}'
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<!-- Element where elFinder will be created (REQUIRED) -->
|
||||
<div id="elfinder"></div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
49
resources/views/vendor/elfinder/elfinder.php
vendored
Normal file
49
resources/views/vendor/elfinder/elfinder.php
vendored
Normal file
@@ -0,0 +1,49 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="<?= app()->getLocale() ?>">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>elFinder 2.0</title>
|
||||
|
||||
<!-- jQuery and jQuery UI (REQUIRED) -->
|
||||
<link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/jqueryui/1.13.2/themes/smoothness/jquery-ui.css" />
|
||||
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
|
||||
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.13.2/jquery-ui.min.js"></script>
|
||||
|
||||
<!-- elFinder CSS (REQUIRED) -->
|
||||
<link rel="stylesheet" type="text/css" href="<?= asset($dir.'/css/elfinder.min.css') ?>">
|
||||
<link rel="stylesheet" type="text/css" href="<?= asset($dir.'/css/theme.css') ?>">
|
||||
|
||||
<!-- elFinder JS (REQUIRED) -->
|
||||
<script src="<?= asset($dir.'/js/elfinder.min.js') ?>"></script>
|
||||
|
||||
<?php if($locale){ ?>
|
||||
<!-- elFinder translation (OPTIONAL) -->
|
||||
<script src="<?= asset($dir."/js/i18n/elfinder.$locale.js") ?>"></script>
|
||||
<?php } ?>
|
||||
|
||||
<!-- elFinder initialization (REQUIRED) -->
|
||||
<script type="text/javascript" charset="utf-8">
|
||||
// Documentation for client options:
|
||||
// https://github.com/Studio-42/elFinder/wiki/Client-configuration-options
|
||||
$().ready(function() {
|
||||
$('#elfinder').elfinder({
|
||||
// set your elFinder options here
|
||||
<?php if($locale){ ?>
|
||||
lang: '<?= $locale ?>', // locale
|
||||
<?php } ?>
|
||||
customData: {
|
||||
_token: '<?= csrf_token() ?>'
|
||||
},
|
||||
url : '<?= route("elfinder.connector") ?>', // connector URL
|
||||
soundPath: '<?= asset($dir.'/sounds') ?>'
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<!-- Element where elFinder will be created (REQUIRED) -->
|
||||
<div id="elfinder"></div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
82
resources/views/vendor/elfinder/filepicker.blade.php
vendored
Normal file
82
resources/views/vendor/elfinder/filepicker.blade.php
vendored
Normal file
@@ -0,0 +1,82 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="{{ app()->getLocale() }}">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>elFinder 2.0</title>
|
||||
|
||||
<!-- jQuery and jQuery UI (REQUIRED) -->
|
||||
<link rel="stylesheet" type="text/css" href="//ajax.googleapis.com/ajax/libs/jqueryui/1.8.23/themes/smoothness/jquery-ui.css">
|
||||
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
|
||||
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/jquery-ui.min.js"></script>
|
||||
|
||||
<!-- elFinder CSS (REQUIRED) -->
|
||||
<link rel="stylesheet" type="text/css" href="{{ asset($dir . '/css/elfinder.min.css') }}">
|
||||
<link rel="stylesheet" type="text/css" href="{{ asset($dir . '/css/theme.css') }}">
|
||||
|
||||
<!-- elFinder JS (REQUIRED) -->
|
||||
<script src="{{ asset($dir . '/js/elfinder.min.js') }}"></script>
|
||||
|
||||
@if($locale)
|
||||
<!-- elFinder translation (OPTIONAL) -->
|
||||
<script src="{{ asset($dir . "/js/i18n/elfinder.$locale.js") }}"></script>
|
||||
@endif
|
||||
<!-- Include jQuery, jQuery UI, elFinder (REQUIRED) -->
|
||||
|
||||
<script type="text/javascript">
|
||||
$().ready(function () {
|
||||
var elf = $('#elfinder').elfinder({
|
||||
// set your elFinder options here
|
||||
@if($locale)
|
||||
lang: '{{ $locale }}', // locale
|
||||
@endif
|
||||
customData: {
|
||||
_token: '{{ csrf_token() }}'
|
||||
},
|
||||
url: '{{ route("elfinder.connector") }}', // connector URL
|
||||
soundPath: '{{ asset($dir.'/sounds') }}',
|
||||
resizable: false,
|
||||
ui: ['toolbar', 'path','stat'],
|
||||
onlyMimes: [{{ $mimeTypes }}],
|
||||
rememberLastDir : false,
|
||||
height: 300,
|
||||
defaultView: 'list',
|
||||
getFileCallback: function (file) {
|
||||
window.parent.processSelectedFile(file, '{{ $input_id }}');
|
||||
console.log(file);
|
||||
},
|
||||
uiOptions : {
|
||||
// toolbar configuration
|
||||
toolbar : [
|
||||
['home', 'up'],
|
||||
['upload'],
|
||||
['quicklook'],
|
||||
],
|
||||
// directories tree options
|
||||
tree : {
|
||||
// expand current root on init
|
||||
openRootOnLoad : true,
|
||||
// auto load current dir parents
|
||||
syncTree : true
|
||||
},
|
||||
// navbar options
|
||||
navbar : {
|
||||
minWidth : 150,
|
||||
maxWidth : 500
|
||||
},
|
||||
// current working directory options
|
||||
cwd : {
|
||||
// display parent directory in listing as ".."
|
||||
oldSchool : false
|
||||
}
|
||||
}
|
||||
}).elfinder('instance');
|
||||
});
|
||||
</script>
|
||||
</head>
|
||||
<body style="margin: 0;">
|
||||
|
||||
<!-- Element where elFinder will be created (REQUIRED) -->
|
||||
<div id="elfinder"></div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
83
resources/views/vendor/elfinder/filepicker.php
vendored
Normal file
83
resources/views/vendor/elfinder/filepicker.php
vendored
Normal file
@@ -0,0 +1,83 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="<?= app()->getLocale() ?>">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>elFinder 2.0</title>
|
||||
|
||||
<!-- jQuery and jQuery UI (REQUIRED) -->
|
||||
<link rel="stylesheet" type="text/css" href="//ajax.googleapis.com/ajax/libs/jqueryui/1.8.23/themes/smoothness/jquery-ui.css">
|
||||
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
|
||||
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/jquery-ui.min.js"></script>
|
||||
|
||||
<!-- elFinder CSS (REQUIRED) -->
|
||||
<link rel="stylesheet" type="text/css" href="<?= asset($dir . '/css/elfinder.min.css') ?>">
|
||||
<link rel="stylesheet" type="text/css" href="<?= asset($dir . '/css/theme.css') ?>">
|
||||
|
||||
<!-- elFinder JS (REQUIRED) -->
|
||||
<script src="<?= asset($dir . '/js/elfinder.min.js') ?>"></script>
|
||||
|
||||
<?php if ($locale) { ?>
|
||||
<!-- elFinder translation (OPTIONAL) -->
|
||||
<script src="<?= asset($dir . "/js/i18n/elfinder.$locale.js") ?>"></script>
|
||||
<?php } ?>
|
||||
<!-- Include jQuery, jQuery UI, elFinder (REQUIRED) -->
|
||||
|
||||
<script type="text/javascript">
|
||||
$().ready(function () {
|
||||
var elf = $('#elfinder').elfinder({
|
||||
// set your elFinder options here
|
||||
<?php if($locale){ ?>
|
||||
lang: '<?= $locale ?>', // locale
|
||||
<?php } ?>
|
||||
customData: {
|
||||
_token: '<?= csrf_token() ?>'
|
||||
},
|
||||
url: '<?= route("elfinder.connector") ?>', // connector URL
|
||||
soundPath: '<?= asset($dir.'/sounds') ?>',
|
||||
resizable: false,
|
||||
ui: ['toolbar', 'path','stat'],
|
||||
onlyMimes: [<?= $mimeTypes ?>],
|
||||
rememberLastDir : false,
|
||||
height: 300,
|
||||
defaultView: 'list',
|
||||
getFileCallback: function (file) {
|
||||
window.parent.processSelectedFile(file, '<?= $input_id?>');
|
||||
console.log(file);
|
||||
},
|
||||
uiOptions : {
|
||||
// toolbar configuration
|
||||
toolbar : [
|
||||
['home', 'up'],
|
||||
['upload'],
|
||||
['quicklook'],
|
||||
],
|
||||
// directories tree options
|
||||
tree : {
|
||||
// expand current root on init
|
||||
openRootOnLoad : true,
|
||||
// auto load current dir parents
|
||||
syncTree : true
|
||||
},
|
||||
// navbar options
|
||||
navbar : {
|
||||
minWidth : 150,
|
||||
maxWidth : 500
|
||||
},
|
||||
// current working directory options
|
||||
cwd : {
|
||||
// display parent directory in listing as ".."
|
||||
oldSchool : false
|
||||
}
|
||||
}
|
||||
}).elfinder('instance');
|
||||
});
|
||||
</script>
|
||||
|
||||
</head>
|
||||
<body style="margin: 0;">
|
||||
|
||||
<!-- Element where elFinder will be created (REQUIRED) -->
|
||||
<div id="elfinder"></div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
59
resources/views/vendor/elfinder/standalonepopup.blade.php
vendored
Normal file
59
resources/views/vendor/elfinder/standalonepopup.blade.php
vendored
Normal file
@@ -0,0 +1,59 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="{{ app()->getLocale() }}">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>elFinder 2.0</title>
|
||||
|
||||
<!-- jQuery and jQuery UI (REQUIRED) -->
|
||||
<link rel="stylesheet" type="text/css" href="//ajax.googleapis.com/ajax/libs/jqueryui/1.8.23/themes/smoothness/jquery-ui.css">
|
||||
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
|
||||
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/jquery-ui.min.js"></script>
|
||||
|
||||
<!-- elFinder CSS (REQUIRED) -->
|
||||
<link rel="stylesheet" type="text/css" href="{{ asset($dir . '/css/elfinder.min.css') }}">
|
||||
<link rel="stylesheet" type="text/css" href="{{ asset($dir . '/css/theme.css') }}">
|
||||
|
||||
<!-- elFinder JS (REQUIRED) -->
|
||||
<script src="{{ asset($dir . '/js/elfinder.min.js') }}"></script>
|
||||
|
||||
@if($locale)
|
||||
<!-- elFinder translation (OPTIONAL) -->
|
||||
<script src="{{ asset($dir . "/js/i18n/elfinder.$locale.js") }}"></script>
|
||||
@endif
|
||||
<!-- Include jQuery, jQuery UI, elFinder (REQUIRED) -->
|
||||
|
||||
<script type="text/javascript">
|
||||
$().ready(function () {
|
||||
var elf = $('#elfinder').elfinder({
|
||||
// set your elFinder options here
|
||||
@if($locale)
|
||||
lang: '{{ $locale }}', // locale
|
||||
@endif
|
||||
customData: {
|
||||
_token: '{{ csrf_token() }}'
|
||||
},
|
||||
url: '{{ route("elfinder.connector") }}', // connector URL
|
||||
soundPath: '{{ asset($dir.'/sounds') }}',
|
||||
dialog: {width: 900, modal: true, title: 'Select a file'},
|
||||
resizable: false,
|
||||
commandsOptions: {
|
||||
getfile: {
|
||||
oncomplete: 'destroy'
|
||||
}
|
||||
},
|
||||
getFileCallback: function (file) {
|
||||
window.parent.processSelectedFile(file.path, '{{ $input_id }}');
|
||||
parent.jQuery.colorbox.close();
|
||||
}
|
||||
}).elfinder('instance');
|
||||
});
|
||||
</script>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<!-- Element where elFinder will be created (REQUIRED) -->
|
||||
<div id="elfinder"></div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
60
resources/views/vendor/elfinder/standalonepopup.php
vendored
Normal file
60
resources/views/vendor/elfinder/standalonepopup.php
vendored
Normal file
@@ -0,0 +1,60 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="<?= app()->getLocale() ?>">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>elFinder 2.0</title>
|
||||
|
||||
<!-- jQuery and jQuery UI (REQUIRED) -->
|
||||
<link rel="stylesheet" type="text/css" href="//ajax.googleapis.com/ajax/libs/jqueryui/1.8.23/themes/smoothness/jquery-ui.css">
|
||||
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
|
||||
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/jquery-ui.min.js"></script>
|
||||
|
||||
<!-- elFinder CSS (REQUIRED) -->
|
||||
<link rel="stylesheet" type="text/css" href="<?= asset($dir . '/css/elfinder.min.css') ?>">
|
||||
<link rel="stylesheet" type="text/css" href="<?= asset($dir . '/css/theme.css') ?>">
|
||||
|
||||
<!-- elFinder JS (REQUIRED) -->
|
||||
<script src="<?= asset($dir . '/js/elfinder.min.js') ?>"></script>
|
||||
|
||||
<?php if ($locale)
|
||||
{ ?>
|
||||
<!-- elFinder translation (OPTIONAL) -->
|
||||
<script src="<?= asset($dir . "/js/i18n/elfinder.$locale.js") ?>"></script>
|
||||
<?php } ?>
|
||||
<!-- Include jQuery, jQuery UI, elFinder (REQUIRED) -->
|
||||
|
||||
<script type="text/javascript">
|
||||
$().ready(function () {
|
||||
var elf = $('#elfinder').elfinder({
|
||||
// set your elFinder options here
|
||||
<?php if($locale){ ?>
|
||||
lang: '<?= $locale ?>', // locale
|
||||
<?php } ?>
|
||||
customData: {
|
||||
_token: '<?= csrf_token() ?>'
|
||||
},
|
||||
url: '<?= route("elfinder.connector") ?>', // connector URL
|
||||
soundPath: '<?= asset($dir.'/sounds') ?>',
|
||||
dialog: {width: 900, modal: true, title: 'Select a file'},
|
||||
resizable: false,
|
||||
commandsOptions: {
|
||||
getfile: {
|
||||
oncomplete: 'destroy'
|
||||
}
|
||||
},
|
||||
getFileCallback: function (file) {
|
||||
window.parent.processSelectedFile(file.path, '<?= $input_id?>');
|
||||
parent.jQuery.colorbox.close();
|
||||
}
|
||||
}).elfinder('instance');
|
||||
});
|
||||
</script>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<!-- Element where elFinder will be created (REQUIRED) -->
|
||||
<div id="elfinder"></div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
83
resources/views/vendor/elfinder/tinymce.blade.php
vendored
Normal file
83
resources/views/vendor/elfinder/tinymce.blade.php
vendored
Normal file
@@ -0,0 +1,83 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="{{ app()->getLocale() }}">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>elFinder 2.0</title>
|
||||
|
||||
<!-- jQuery and jQuery UI (REQUIRED) -->
|
||||
<link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/themes/smoothness/jquery-ui.css" />
|
||||
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
|
||||
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/jquery-ui.min.js"></script>
|
||||
|
||||
<!-- elFinder CSS (REQUIRED) -->
|
||||
<link rel="stylesheet" type="text/css" href="{{ asset($dir.'/css/elfinder.min.css') }}">
|
||||
<link rel="stylesheet" type="text/css" href="{{ asset($dir.'/css/theme.css') }}">
|
||||
|
||||
<!-- elFinder JS (REQUIRED) -->
|
||||
<script src="{{ asset($dir.'/js/elfinder.min.js') }}"></script>
|
||||
|
||||
<!-- TinyMCE Popup class (REQUIRED) -->
|
||||
<script type="text/javascript" src="{{ asset($dir.'/js/tiny_mce_popup.js') }}"></script>
|
||||
|
||||
@if($locale)
|
||||
<!-- elFinder translation (OPTIONAL) -->
|
||||
<script src="{{ asset($dir."/js/i18n/elfinder.$locale.js") }}"></script>
|
||||
@endif
|
||||
|
||||
|
||||
<script type="text/javascript">
|
||||
var FileBrowserDialogue = {
|
||||
init: function() {
|
||||
// Here goes your code for setting your custom things onLoad.
|
||||
},
|
||||
mySubmit: function (URL) {
|
||||
var win = tinyMCEPopup.getWindowArg('window');
|
||||
|
||||
// pass selected file path to TinyMCE
|
||||
win.document.getElementById(tinyMCEPopup.getWindowArg('input')).value = URL;
|
||||
|
||||
// are we an image browser?
|
||||
if (typeof(win.ImageDialog) != 'undefined') {
|
||||
// update image dimensions
|
||||
if (win.ImageDialog.getImageData) {
|
||||
win.ImageDialog.getImageData();
|
||||
}
|
||||
// update preview if necessary
|
||||
if (win.ImageDialog.showPreviewImage) {
|
||||
win.ImageDialog.showPreviewImage(URL);
|
||||
}
|
||||
}
|
||||
|
||||
// close popup window
|
||||
tinyMCEPopup.close();
|
||||
}
|
||||
}
|
||||
|
||||
tinyMCEPopup.onInit.add(FileBrowserDialogue.init, FileBrowserDialogue);
|
||||
|
||||
$().ready(function() {
|
||||
var elf = $('#elfinder').elfinder({
|
||||
// set your elFinder options here
|
||||
@if($locale)
|
||||
lang: '{{ $locale }}', // locale
|
||||
@endif
|
||||
customData: {
|
||||
_token: '{{ csrf_token() }}'
|
||||
},
|
||||
url : '{{ route("elfinder.connector") }}', // connector URL
|
||||
soundPath: '{{ asset($dir.'/sounds') }}',
|
||||
getFileCallback: function(file) { // editor callback
|
||||
FileBrowserDialogue.mySubmit(file.url); // pass selected file path to TinyMCE
|
||||
}
|
||||
}).elfinder('instance');
|
||||
});
|
||||
</script>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<!-- Element where elFinder will be created (REQUIRED) -->
|
||||
<div id="elfinder"></div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
82
resources/views/vendor/elfinder/tinymce.php
vendored
Normal file
82
resources/views/vendor/elfinder/tinymce.php
vendored
Normal file
@@ -0,0 +1,82 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="<?= app()->getLocale() ?>">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>elFinder 2.0</title>
|
||||
|
||||
<!-- jQuery and jQuery UI (REQUIRED) -->
|
||||
<link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/themes/smoothness/jquery-ui.css" />
|
||||
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
|
||||
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/jquery-ui.min.js"></script>
|
||||
|
||||
<!-- elFinder CSS (REQUIRED) -->
|
||||
<link rel="stylesheet" type="text/css" href="<?= asset($dir.'/css/elfinder.min.css') ?>">
|
||||
<link rel="stylesheet" type="text/css" href="<?= asset($dir.'/css/theme.css') ?>">
|
||||
|
||||
<!-- elFinder JS (REQUIRED) -->
|
||||
<script src="<?= asset($dir.'/js/elfinder.min.js') ?>"></script>
|
||||
|
||||
<!-- TinyMCE Popup class (REQUIRED) -->
|
||||
<script type="text/javascript" src="<?= asset($dir.'/js/tiny_mce_popup.js') ?>"></script>
|
||||
|
||||
<?php if($locale){ ?>
|
||||
<!-- elFinder translation (OPTIONAL) -->
|
||||
<script src="<?= asset($dir."/js/i18n/elfinder.$locale.js") ?>"></script>
|
||||
<?php } ?>
|
||||
|
||||
<script type="text/javascript">
|
||||
var FileBrowserDialogue = {
|
||||
init: function() {
|
||||
// Here goes your code for setting your custom things onLoad.
|
||||
},
|
||||
mySubmit: function (URL) {
|
||||
var win = tinyMCEPopup.getWindowArg('window');
|
||||
|
||||
// pass selected file path to TinyMCE
|
||||
win.document.getElementById(tinyMCEPopup.getWindowArg('input')).value = URL;
|
||||
|
||||
// are we an image browser?
|
||||
if (typeof(win.ImageDialog) != 'undefined') {
|
||||
// update image dimensions
|
||||
if (win.ImageDialog.getImageData) {
|
||||
win.ImageDialog.getImageData();
|
||||
}
|
||||
// update preview if necessary
|
||||
if (win.ImageDialog.showPreviewImage) {
|
||||
win.ImageDialog.showPreviewImage(URL);
|
||||
}
|
||||
}
|
||||
|
||||
// close popup window
|
||||
tinyMCEPopup.close();
|
||||
}
|
||||
}
|
||||
|
||||
tinyMCEPopup.onInit.add(FileBrowserDialogue.init, FileBrowserDialogue);
|
||||
|
||||
$().ready(function() {
|
||||
var elf = $('#elfinder').elfinder({
|
||||
// set your elFinder options here
|
||||
<?php if($locale){ ?>
|
||||
lang: '<?= $locale ?>', // locale
|
||||
<?php } ?>
|
||||
customData: {
|
||||
_token: '<?= csrf_token() ?>'
|
||||
},
|
||||
url : '<?= route("elfinder.connector") ?>', // connector URL
|
||||
soundPath: '<?= asset($dir.'/sounds') ?>',
|
||||
getFileCallback: function(file) { // editor callback
|
||||
FileBrowserDialogue.mySubmit(file.url); // pass selected file path to TinyMCE
|
||||
}
|
||||
}).elfinder('instance');
|
||||
});
|
||||
</script>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<!-- Element where elFinder will be created (REQUIRED) -->
|
||||
<div id="elfinder"></div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
63
resources/views/vendor/elfinder/tinymce4.blade.php
vendored
Normal file
63
resources/views/vendor/elfinder/tinymce4.blade.php
vendored
Normal file
@@ -0,0 +1,63 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>elFinder 2.0</title>
|
||||
|
||||
<!-- jQuery and jQuery UI (REQUIRED) -->
|
||||
<link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/themes/smoothness/jquery-ui.css" />
|
||||
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
|
||||
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/jquery-ui.min.js"></script>
|
||||
|
||||
<!-- elFinder CSS (REQUIRED) -->
|
||||
<link rel="stylesheet" type="text/css" href="{{ asset($dir.'/css/elfinder.min.css') }}">
|
||||
<link rel="stylesheet" type="text/css" href="{{ asset($dir.'/css/theme.css') }}">
|
||||
|
||||
<!-- elFinder JS (REQUIRED) -->
|
||||
<script src="{{ asset($dir.'/js/elfinder.min.js') }}"></script>
|
||||
|
||||
@if($locale)
|
||||
<!-- elFinder translation (OPTIONAL) -->
|
||||
<script src="{{ asset($dir."/js/i18n/elfinder.$locale.js") }}"></script>
|
||||
@endif
|
||||
|
||||
<!-- elFinder initialization (REQUIRED) -->
|
||||
<script type="text/javascript">
|
||||
var FileBrowserDialogue = {
|
||||
init: function() {
|
||||
// Here goes your code for setting your custom things onLoad.
|
||||
},
|
||||
mySubmit: function (URL) {
|
||||
// pass selected file path to TinyMCE
|
||||
parent.tinymce.activeEditor.windowManager.getParams().setUrl(URL);
|
||||
|
||||
// close popup window
|
||||
parent.tinymce.activeEditor.windowManager.close();
|
||||
}
|
||||
}
|
||||
|
||||
$().ready(function() {
|
||||
var elf = $('#elfinder').elfinder({
|
||||
// set your elFinder options here
|
||||
@if($locale)
|
||||
lang: '{{ $locale }}', // locale
|
||||
@endif
|
||||
customData: {
|
||||
_token: '{{ csrf_token() }}'
|
||||
},
|
||||
url: '{{ route("elfinder.connector") }}', // connector URL
|
||||
soundPath: '{{ asset($dir.'/sounds') }}',
|
||||
getFileCallback: function(file) { // editor callback
|
||||
FileBrowserDialogue.mySubmit(file.url); // pass selected file path to TinyMCE
|
||||
}
|
||||
}).elfinder('instance');
|
||||
});
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<!-- Element where elFinder will be created (REQUIRED) -->
|
||||
<div id="elfinder"></div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
63
resources/views/vendor/elfinder/tinymce4.php
vendored
Normal file
63
resources/views/vendor/elfinder/tinymce4.php
vendored
Normal file
@@ -0,0 +1,63 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="<?= app()->getLocale() ?>">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>elFinder 2.0</title>
|
||||
|
||||
<!-- jQuery and jQuery UI (REQUIRED) -->
|
||||
<link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/themes/smoothness/jquery-ui.css" />
|
||||
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
|
||||
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/jquery-ui.min.js"></script>
|
||||
|
||||
<!-- elFinder CSS (REQUIRED) -->
|
||||
<link rel="stylesheet" type="text/css" href="<?= asset($dir.'/css/elfinder.min.css') ?>">
|
||||
<link rel="stylesheet" type="text/css" href="<?= asset($dir.'/css/theme.css') ?>">
|
||||
|
||||
<!-- elFinder JS (REQUIRED) -->
|
||||
<script src="<?= asset($dir.'/js/elfinder.min.js') ?>"></script>
|
||||
|
||||
<?php if($locale){ ?>
|
||||
<!-- elFinder translation (OPTIONAL) -->
|
||||
<script src="<?= asset($dir."/js/i18n/elfinder.$locale.js") ?>"></script>
|
||||
<?php } ?>
|
||||
|
||||
<!-- elFinder initialization (REQUIRED) -->
|
||||
<script type="text/javascript">
|
||||
var FileBrowserDialogue = {
|
||||
init: function() {
|
||||
// Here goes your code for setting your custom things onLoad.
|
||||
},
|
||||
mySubmit: function (URL) {
|
||||
// pass selected file path to TinyMCE
|
||||
parent.tinymce.activeEditor.windowManager.getParams().setUrl(URL);
|
||||
|
||||
// close popup window
|
||||
parent.tinymce.activeEditor.windowManager.close();
|
||||
}
|
||||
}
|
||||
|
||||
$().ready(function() {
|
||||
var elf = $('#elfinder').elfinder({
|
||||
// set your elFinder options here
|
||||
<?php if($locale){ ?>
|
||||
lang: '<?= $locale ?>', // locale
|
||||
<?php } ?>
|
||||
customData: {
|
||||
_token: '<?= csrf_token() ?>'
|
||||
},
|
||||
url: '<?= route("elfinder.connector") ?>', // connector URL
|
||||
soundPath: '<?= asset($dir.'/sounds') ?>',
|
||||
getFileCallback: function(file) { // editor callback
|
||||
FileBrowserDialogue.mySubmit(file.url); // pass selected file path to TinyMCE
|
||||
}
|
||||
}).elfinder('instance');
|
||||
});
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<!-- Element where elFinder will be created (REQUIRED) -->
|
||||
<div id="elfinder"></div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
64
resources/views/vendor/elfinder/tinymce5.blade.php
vendored
Normal file
64
resources/views/vendor/elfinder/tinymce5.blade.php
vendored
Normal file
@@ -0,0 +1,64 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>elFinder 2.0</title>
|
||||
|
||||
<!-- jQuery and jQuery UI (REQUIRED) -->
|
||||
<link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/themes/smoothness/jquery-ui.css" />
|
||||
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
|
||||
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/jquery-ui.min.js"></script>
|
||||
|
||||
<!-- elFinder CSS (REQUIRED) -->
|
||||
<link rel="stylesheet" type="text/css" href="{{ asset($dir.'/css/elfinder.min.css') }}">
|
||||
<link rel="stylesheet" type="text/css" href="{{ asset($dir.'/css/theme.css') }}">
|
||||
|
||||
<!-- elFinder JS (REQUIRED) -->
|
||||
<script src="{{ asset($dir.'/js/elfinder.min.js') }}"></script>
|
||||
|
||||
@if($locale)
|
||||
<!-- elFinder translation (OPTIONAL) -->
|
||||
<script src="{{ asset($dir."/js/i18n/elfinder.$locale.js") }}"></script>
|
||||
@endif
|
||||
|
||||
<!-- elFinder initialization (REQUIRED) -->
|
||||
<script type="text/javascript">
|
||||
var FileBrowserDialogue = {
|
||||
init: function() {
|
||||
// Here goes your code for setting your custom things onLoad.
|
||||
},
|
||||
mySubmit: function (file) {
|
||||
window.parent.postMessage({
|
||||
mceAction: 'fileSelected',
|
||||
data: {
|
||||
file: file
|
||||
}
|
||||
}, '*');
|
||||
}
|
||||
};
|
||||
|
||||
$().ready(function() {
|
||||
var elf = $('#elfinder').elfinder({
|
||||
// set your elFinder options here
|
||||
@if($locale)
|
||||
lang: '{{ $locale }}', // locale
|
||||
@endif
|
||||
customData: {
|
||||
_token: '{{ csrf_token() }}'
|
||||
},
|
||||
url: '{{ route("elfinder.connector") }}', // connector URL
|
||||
soundPath: '{{ asset($dir.'/sounds') }}',
|
||||
getFileCallback: function(file) { // editor callback
|
||||
FileBrowserDialogue.mySubmit(file); // pass selected file path to TinyMCE
|
||||
}
|
||||
}).elfinder('instance');
|
||||
});
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<!-- Element where elFinder will be created (REQUIRED) -->
|
||||
<div id="elfinder"></div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
64
resources/views/vendor/elfinder/tinymce5.php
vendored
Normal file
64
resources/views/vendor/elfinder/tinymce5.php
vendored
Normal file
@@ -0,0 +1,64 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="<?= app()->getLocale() ?>">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>elFinder 2.0</title>
|
||||
|
||||
<!-- jQuery and jQuery UI (REQUIRED) -->
|
||||
<link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/themes/smoothness/jquery-ui.css" />
|
||||
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
|
||||
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/jquery-ui.min.js"></script>
|
||||
|
||||
<!-- elFinder CSS (REQUIRED) -->
|
||||
<link rel="stylesheet" type="text/css" href="<?= asset($dir.'/css/elfinder.min.css') ?>">
|
||||
<link rel="stylesheet" type="text/css" href="<?= asset($dir.'/css/theme.css') ?>">
|
||||
|
||||
<!-- elFinder JS (REQUIRED) -->
|
||||
<script src="<?= asset($dir.'/js/elfinder.min.js') ?>"></script>
|
||||
|
||||
<?php if($locale){ ?>
|
||||
<!-- elFinder translation (OPTIONAL) -->
|
||||
<script src="<?= asset($dir."/js/i18n/elfinder.$locale.js") ?>"></script>
|
||||
<?php } ?>
|
||||
|
||||
<!-- elFinder initialization (REQUIRED) -->
|
||||
<script type="text/javascript">
|
||||
var FileBrowserDialogue = {
|
||||
init: function() {
|
||||
// Here goes your code for setting your custom things onLoad.
|
||||
},
|
||||
mySubmit: function (file) {
|
||||
window.parent.postMessage({
|
||||
mceAction: 'fileSelected',
|
||||
data: {
|
||||
file: file
|
||||
}
|
||||
}, '*');
|
||||
}
|
||||
};
|
||||
|
||||
$().ready(function() {
|
||||
var elf = $('#elfinder').elfinder({
|
||||
// set your elFinder options here
|
||||
<?php if($locale){ ?>
|
||||
lang: '<?= $locale ?>', // locale
|
||||
<?php } ?>
|
||||
customData: {
|
||||
_token: '<?= csrf_token() ?>'
|
||||
},
|
||||
url: '<?= route("elfinder.connector") ?>', // connector URL
|
||||
soundPath: '<?= asset($dir.'/sounds') ?>',
|
||||
getFileCallback: function(file) { // editor callback
|
||||
FileBrowserDialogue.mySubmit(file); // pass selected file path to TinyMCE
|
||||
}
|
||||
}).elfinder('instance');
|
||||
});
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<!-- Element where elFinder will be created (REQUIRED) -->
|
||||
<div id="elfinder"></div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
277
resources/views/welcome.blade.php
Normal file
277
resources/views/welcome.blade.php
Normal file
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user