@ -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> |