| @ -0,0 +1,4 @@ | |||||
| APP_DEBUG=false | |||||
| DIRECTUS_API_URL= | |||||
| DIRECTUS_API_TOKEN= | |||||
| @ -0,0 +1,14 @@ | |||||
| composer.phar | |||||
| /vendor/ | |||||
| /storage/cache/* | |||||
| !/storage/cache/.gitkeep | |||||
| /public/* | |||||
| !/public/.htaccess | |||||
| !/public/index.php | |||||
| node_modules | |||||
| .env | |||||
| *.log | |||||
| rysnc_exclude | |||||
| @ -0,0 +1,75 @@ | |||||
| <?php | |||||
| namespace App\Controllers; | |||||
| use SuperGear\Directus\Controllers\ControllerAbstract; | |||||
| use SuperGear\Repositories\Manager; | |||||
| /** | |||||
| * controller for page items from directus | |||||
| * | |||||
| * | |||||
| * | |||||
| * @author Björn Hase | |||||
| * @license http://opensource.org/licenses/MIT The MIT License | |||||
| * @link https://gitlab.tentakelfabrik.de/super-gear/directus GitHub Repository | |||||
| * | |||||
| */ | |||||
| class PageController extends ControllerAbstract | |||||
| { | |||||
| /** slug for home */ | |||||
| const HOME_SLUG = 'home'; | |||||
| /** default view */ | |||||
| protected $defaultView = 'page/default'; | |||||
| /** | |||||
| * get home page from slug | |||||
| * | |||||
| * | |||||
| */ | |||||
| public function indexAction() | |||||
| { | |||||
| $repository = Manager::get('Page'); | |||||
| $page = $repository->findOneBySlug(self::HOME_SLUG); | |||||
| if ($this->notFound($page)) { | |||||
| $this->app->redirect('404'); | |||||
| } | |||||
| $this->render($page); | |||||
| } | |||||
| /** | |||||
| * get single page from slug | |||||
| * | |||||
| * | |||||
| * @param string $slug | |||||
| */ | |||||
| public function getAction($slug) | |||||
| { | |||||
| $repository = Manager::get('Page'); | |||||
| $page = $repository->findOneBySlug($slug); | |||||
| if ($this->notFound($page)) { | |||||
| $this->app->redirect('404'); | |||||
| } | |||||
| $this->render($page); | |||||
| } | |||||
| /** | |||||
| * if page not found | |||||
| * | |||||
| */ | |||||
| public function notFoundAction() | |||||
| { | |||||
| $page = [ | |||||
| 'data' => [ | |||||
| 'view' => 'page/404' | |||||
| ] | |||||
| ]; | |||||
| $this->render($page); | |||||
| } | |||||
| } | |||||
| @ -0,0 +1,48 @@ | |||||
| <?php | |||||
| namespace App\Repositories; | |||||
| use SuperGear\Directus\Repositories\RepositoryAbstract; | |||||
| /** | |||||
| * request page items from directus | |||||
| * | |||||
| * @author Björn Hase | |||||
| * @license http://opensource.org/licenses/MIT The MIT License | |||||
| * @link https://gitlab.tentakelfabrik.de/super-gear/directus GitHub Repository | |||||
| */ | |||||
| class PageRepository extends RepositoryAbstract | |||||
| { | |||||
| /** name of the collection */ | |||||
| protected $name = 'page'; | |||||
| /** | |||||
| * find single page with a slug, | |||||
| * page must be published | |||||
| * | |||||
| * @param string $slug | |||||
| * @return array | |||||
| */ | |||||
| public function findOneBySlug($slug) | |||||
| { | |||||
| return $this->itemCollection->findOne($this->name, [ | |||||
| 'filter[slug][eq]' => $slug, | |||||
| 'filter[status][eq]' => 'published' | |||||
| ]); | |||||
| } | |||||
| /** | |||||
| * find single page with a slug, | |||||
| * page must be published | |||||
| * | |||||
| * @param string $slug | |||||
| * @return array | |||||
| */ | |||||
| public function findByView($view) | |||||
| { | |||||
| return $this->itemCollection->find($this->name, [ | |||||
| 'filter[view][eq]' => $view, | |||||
| 'filter[status][eq]' => 'published' | |||||
| ]); | |||||
| } | |||||
| } | |||||
| @ -0,0 +1,31 @@ | |||||
| <?php | |||||
| // adding functions | |||||
| require_once(__DIR__.'/../src/SuperGear/Functions.php'); | |||||
| // adding env | |||||
| $env = Dotenv\Dotenv::create(__DIR__.'/../'); | |||||
| $env->load(); | |||||
| // display all errors if debug is true | |||||
| if (getenv('DEBUG') === true) { | |||||
| error_reporting(E_ALL); | |||||
| ini_set('display_errors', 1); | |||||
| } | |||||
| // create app | |||||
| $app = Flight::app(); | |||||
| // setting view path | |||||
| $app->set('flight.views.path', __DIR__.'/../resources/views'); | |||||
| // adding blade for templates | |||||
| Flight::register('view', 'Jenssegers\Blade\Blade', [ $app->get('flight.views.path'), __DIR__.'/../resources/cache']); | |||||
| Flight::map('render', function($view, $data) { | |||||
| echo Flight::view()->make($view, $data); | |||||
| }); | |||||
| // setting path | |||||
| $app->set('basePath', __DIR__.'/../'); | |||||
| $app->set('publicPath', __DIR__.'/../public'); | |||||
| $app->set('storagePath', __DIR__.'/../storage'); | |||||
| @ -0,0 +1,19 @@ | |||||
| { | |||||
| "name": "super-gear/directus-boilerplate", | |||||
| "version": "1.0.0", | |||||
| "type": "boilerplate", | |||||
| "license": "MIT", | |||||
| "authors": [ | |||||
| { "name": "Björn Hase", "email": "me@tentakelfabrik.de" } | |||||
| ], | |||||
| "require": { | |||||
| "php": "^7.0", | |||||
| "vlucas/phpdotenv": "^3.3", | |||||
| "jenssegers/blade": "^1.2" | |||||
| }, | |||||
| "autoload": { | |||||
| "psr-4": { | |||||
| "App\\": "app/" | |||||
| } | |||||
| } | |||||
| } | |||||
| @ -0,0 +1,11 @@ | |||||
| <?php | |||||
| require __DIR__.'/../vendor/autoload.php'; | |||||
| require __DIR__.'/../app/bootstrap.php'; | |||||
| // add routes | |||||
| $app->route('GET /', array(new App\Controllers\PageController, 'indexAction')); | |||||
| $app->route('GET /@slug', array(new App\Controllers\PageController, 'getAction')); | |||||
| $app->route('GET /404', array(new App\Controllers\PageController, 'notFoundAction')); | |||||
| $app->start(); | |||||
| @ -0,0 +1,37 @@ | |||||
| @inject('pageRepository', 'App\Repositories\PagenRepository') | |||||
| <!doctype html> | |||||
| <html lang="de-DE" class="no-js"> | |||||
| <head> | |||||
| <meta charset="utf-8"> | |||||
| <meta http-equiv="x-ua-compatible" content="ie=edge"> | |||||
| <title>Super Gear - Directus Boilerplate | {{ $page['data']['title'] }}</title> | |||||
| <meta name="viewport" content="width=device-width, initial-scale=1"> | |||||
| <link href="{{ (isset($_SERVER['HTTPS']) ? 'https' : 'http').'://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'] }}" rel="canonical"> | |||||
| <link href="/css/styles.css" rel="stylesheet" type="text/css"> | |||||
| </head> | |||||
| <body> | |||||
| <header id="header" class="site-header"> | |||||
| <nav class="group group--horizontal navbar__inner"> | |||||
| <ul class="group__section"> | |||||
| @foreach ($homeSection['data'] as $index => $data) | |||||
| <li class="group__item @if ($index === 0) .current @endif"> | |||||
| <a href="/#{{ $data['slug'] }}"> | |||||
| <i class="icon icon-{{ $data['icon'] }}"></i> {{ $data['title'] }} | |||||
| </a> | |||||
| </li> | |||||
| @endforeach | |||||
| </ul> | |||||
| </nav> | |||||
| </header> | |||||
| @section('content') | |||||
| @show | |||||
| @include('partials.footer') | |||||
| <script src="/js/index.js"></script> | |||||
| </body> | |||||
| </html> | |||||
| @ -0,0 +1,3 @@ | |||||
| @extends('layout') | |||||
| 404 | |||||
| @ -0,0 +1,16 @@ | |||||
| @extends('layout') | |||||
| @inject('markdownHelper', 'SuperGear\Helpers\MarkdownHelper') | |||||
| @section('content') | |||||
| <main> | |||||
| <header class="page__header"> | |||||
| <h1 class="page__title"> | |||||
| {{ $page['data']['title'] }} | |||||
| </h1> | |||||
| </header> | |||||
| <div class="content"> | |||||
| {!! $markdownHelper->text($page['data']['content']) !!} | |||||
| </div> | |||||
| </main> | |||||
| @endsection | |||||
| @ -0,0 +1,47 @@ | |||||
| @inject('pageRepository', 'App\Repositories\PageRepository') | |||||
| @php | |||||
| $pages = $pageRepository->findByView('page/page'); | |||||
| @endphp | |||||
| <footer id="footer" class="site-footer"> | |||||
| <div class="site-footer__links"> | |||||
| <div class="container"> | |||||
| <div class="grid"> | |||||
| <div class="col-md-3"> | |||||
| <div class="group"> | |||||
| <ul class="group__section"> | |||||
| @foreach ($pages['data'] as $data) | |||||
| <li class="group__item"> | |||||
| <a href="/{{ $data['slug'] }}">{{ $data['title'] }}</a> | |||||
| </li> | |||||
| @endforeach | |||||
| </ul> | |||||
| </div> | |||||
| </div> | |||||
| <div class="col-md-9"> | |||||
| <div class="group group--social-media"> | |||||
| <ul class="group__section"> | |||||
| <li class="group__item"> | |||||
| <a href="https://twitter.com/WarpCoreCafe" target="_blank"> | |||||
| <i class="icon icon-twitter"></i> | |||||
| </a> | |||||
| </li> | |||||
| </ul> | |||||
| </div> | |||||
| </div> | |||||
| </div> | |||||
| </div> | |||||
| </div> | |||||
| <div class="site-footer__note"> | |||||
| <div class="container"> | |||||
| <div class="grid"> | |||||
| <div class="col-12"> | |||||
| <p class="text-center"> | |||||
| Diese Seite wird durch <a href="https://directus.io/" target="_blank">Directus</a> und dem Directus PHP Client der <a href="https://tentakelfabrik.de" target="_blank">Tentakelfabrik</a> angezeigt | |||||
| </p> | |||||
| </div> | |||||
| </div> | |||||
| </div> | |||||
| </div> | |||||
| </footer> | |||||