+
+ {% block content %}{% endblock %}
+
+
+ {{ outputjs() }}
+
+
\ No newline at end of file
diff --git a/example/site/pages/1-kontakt.md b/example/site/pages/1-kontakt.md
new file mode 100644
index 00000000..42bc303e
--- /dev/null
+++ b/example/site/pages/1-kontakt.md
@@ -0,0 +1,45 @@
+---
+title: Kontakt
+nocache: 1
+simplecontact:
+ subject: "Kontaktanfrage deiner Herbie-Website!"
+ recipient: "blackhole@example.com"
+ fields:
+ name:
+ label: "Dein Name"
+ placeholder:
+ email:
+ label: "Deine E-Mail"
+ placeholder:
+ message:
+ label: "Deine Nachricht"
+ placeholder:
+ antispam:
+ label: "Antispam"
+ placeholder:
+ submit:
+ label: "Formular absenden"
+ messages:
+ success: "Vielen Dank! Deine Nachricht wurde versendet."
+ error: "Uups! Da gibt's ein Problem. Bitte vervollständige das Formular und probier's nochmal."
+ fail: "Uups! Etwas ist schief gegangen. Das Nachricht konnte nicht übermittelt werden."
+ errors:
+ empty_field: "Dies ist ein Pflichtfeld"
+ invalid_email: "Die eingegebene E-Mail ist ungültig"
+---
+
+
Kontakt
+
+[simplecontact]
+
+
+--- sidebar ---
+
+### Adresse
+
+Hans Muster
+Musterstrasse 43
+3020 Mustern
+
+
+
\ No newline at end of file
diff --git a/example/site/pages/2-dienstleistung.md b/example/site/pages/2-dienstleistung.md
new file mode 100644
index 00000000..9da053ac
--- /dev/null
+++ b/example/site/pages/2-dienstleistung.md
@@ -0,0 +1,9 @@
+---
+title: Dienstleistung
+---
+
+# Vivamus sit amet libero in dolor euismod bibendum
+
+Duis sed nisl ac mauris semper cursus. Vivamus sit amet libero in dolor euismod bibendum sed in massa. Nulla iaculis bibendum tempus. Pellentesque condimentum turpis nec tortor interdum ut blandit mauris vehicula. Fusce scelerisque odio vel dui luctus vel viverra odio semper. Nunc euismod luctus sapien, eu euismod lorem iaculis id. Pellentesque suscipit, lectus id volutpat posuere, nulla risus egestas erat, vitae cursus orci augue eu tellus.
+
+Etiam erat mauris, ullamcorper quis fringilla at, venenatis sed eros. Mauris et nisl non libero scelerisque volutpat. Mauris luctus metus quis odio sagittis luctus. Pellentesque et arcu congue tortor tincidunt venenatis. Praesent eget diam sed nunc vulputate fringilla. Pellentesque sit amet quam vel mi tristique tristique. Praesent dictum gravida dolor vitae pulvinar. In hac habitasse platea dictumst. Integer sit amet feugiat erat. Integer vitae lacus suscipit dolor adipiscing egestas sed sed libero.
diff --git a/example/site/pages/3-produkte.md b/example/site/pages/3-produkte.md
new file mode 100644
index 00000000..40c642a5
--- /dev/null
+++ b/example/site/pages/3-produkte.md
@@ -0,0 +1,9 @@
+---
+title: Produkte
+---
+
+# In mollis luctus libero nec euismod
+
+Etiam erat mauris, ullamcorper quis fringilla at, venenatis sed eros. Mauris et nisl non libero scelerisque volutpat. Mauris luctus metus quis odio sagittis luctus. Pellentesque et arcu congue tortor tincidunt venenatis. Praesent eget diam sed nunc vulputate fringilla. Pellentesque sit amet quam vel mi tristique tristique. Praesent dictum gravida dolor vitae pulvinar. In hac habitasse platea dictumst. Integer sit amet feugiat erat. Integer vitae lacus suscipit dolor adipiscing egestas sed sed libero.
+
+Duis sed nisl ac mauris semper cursus. Vivamus sit amet libero in dolor euismod bibendum sed in massa. Nulla iaculis bibendum tempus. Pellentesque condimentum turpis nec tortor interdum ut blandit mauris vehicula. Fusce scelerisque odio vel dui luctus vel viverra odio semper. Nunc euismod luctus sapien, eu euismod lorem iaculis id. Pellentesque suscipit, lectus id volutpat posuere, nulla risus egestas erat, vitae cursus orci augue eu tellus. Donec quis elit in neque vulputate dignissim a eu justo. Ut tempus magna non tellus ultrices rhoncus. Duis sagittis blandit ultricies.
diff --git a/example/site/pages/3-ueber.md b/example/site/pages/3-ueber.md
new file mode 100644
index 00000000..f2eb04d2
--- /dev/null
+++ b/example/site/pages/3-ueber.md
@@ -0,0 +1,9 @@
+---
+title: Über uns
+---
+
+# Duis sed nisl ac mauris semper cursus
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed blandit tempus molestie. In pretium iaculis lorem id ultricies. Curabitur lobortis sapien ac magna ullamcorper faucibus. Aenean ac nibh diam. Donec id felis nunc, et bibendum erat. Nulla faucibus, lacus iaculis aliquet ultricies, diam nibh auctor risus, eget placerat est orci sed arcu. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Etiam diam tellus, scelerisque ut imperdiet eget, faucibus vel sapien. Sed vitae libero vel nisl tincidunt sodales.
+
+In mollis luctus libero nec euismod. Proin pellentesque rutrum tortor id venenatis. Integer eu lorem quis odio lacinia sollicitudin. Aenean leo urna, dictum at adipiscing et, posuere eget ipsum. Cras id dolor est. Curabitur at lorem eget neque gravida imperdiet nec quis lacus. Proin et facilisis justo. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Suspendisse ut mauris vel est cursus ornare non id nisl. Aenean porttitor fringilla lectus, vitae lobortis nisi interdum id. Nullam semper, ante id dictum consectetur, elit velit accumsan urna, eu faucibus lectus justo id nibh.
diff --git a/example/site/pages/index.md b/example/site/pages/index.md
new file mode 100644
index 00000000..92c898fe
--- /dev/null
+++ b/example/site/pages/index.md
@@ -0,0 +1,20 @@
+---
+title: Übersicht
+layout: home.html
+---
+
+# Deine neue Herbie-Website läuft!
+
+
+--- left ---
+
+## Vestibulum ut eros id diam viverra malesuada
+
+In mollis luctus libero nec euismod. Proin pellentesque rutrum tortor id venenatis. Integer eu lorem quis odio lacinia sollicitudin. Aenean leo urna, dictum at adipiscing et, posuere eget ipsum. Cras id dolor est. Curabitur at lorem eget neque gravida imperdiet nec quis lacus. Proin et facilisis justo. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Suspendisse ut mauris vel est cursus ornare non id nisl. Aenean porttitor fringilla lectus, vitae lobortis nisi interdum id. Nullam semper, ante id dictum consectetur, elit velit accumsan urna, eu faucibus lectus justo id nibh.
+
+--- right ---
+
+## Pellentesque mi mi, pretium in scelerisque nec, facilisis id massa
+
+Vestibulum ut eros id diam viverra malesuada. Praesent vel odio odio. Nulla molestie, lectus ut vulputate posuere, sapien felis pretium magna, feugiat laoreet arcu mauris a nibh. Etiam sed tellus metus. Nam vehicula justo in odio venenatis lobortis et vel ipsum. Fusce facilisis sem non sem dictum eu congue diam euismod. Aenean at lectus nulla, nec dignissim elit. Donec viverra nunc sed tortor vehicula eu feugiat dui varius. Aenean orci tellus, adipiscing consequat bibendum placerat, molestie eu lectus. Nulla quis nunc orci.
+
diff --git a/example/site/posts/.gitkeep b/example/site/posts/.gitkeep
new file mode 100644
index 00000000..9a67bdee
--- /dev/null
+++ b/example/site/posts/.gitkeep
@@ -0,0 +1 @@
+# keep empty folder
\ No newline at end of file
diff --git a/example/site/runtime/cache/data/.gitignore b/example/site/runtime/cache/data/.gitignore
new file mode 100644
index 00000000..c96a04f0
--- /dev/null
+++ b/example/site/runtime/cache/data/.gitignore
@@ -0,0 +1,2 @@
+*
+!.gitignore
\ No newline at end of file
diff --git a/example/site/runtime/cache/page/.gitignore b/example/site/runtime/cache/page/.gitignore
new file mode 100644
index 00000000..c96a04f0
--- /dev/null
+++ b/example/site/runtime/cache/page/.gitignore
@@ -0,0 +1,2 @@
+*
+!.gitignore
\ No newline at end of file
diff --git a/example/site/runtime/cache/twig/.gitignore b/example/site/runtime/cache/twig/.gitignore
new file mode 100644
index 00000000..c96a04f0
--- /dev/null
+++ b/example/site/runtime/cache/twig/.gitignore
@@ -0,0 +1,2 @@
+*
+!.gitignore
\ No newline at end of file
diff --git a/example/site/runtime/log/.gitignore b/example/site/runtime/log/.gitignore
new file mode 100644
index 00000000..c96a04f0
--- /dev/null
+++ b/example/site/runtime/log/.gitignore
@@ -0,0 +1,2 @@
+*
+!.gitignore
\ No newline at end of file
diff --git a/log/.gitignore b/example/web/assets/.gitignore
similarity index 83%
rename from log/.gitignore
rename to example/web/assets/.gitignore
index 5e7d2734..86d0cb27 100644
--- a/log/.gitignore
+++ b/example/web/assets/.gitignore
@@ -1,4 +1,4 @@
# Ignore everything in this directory
*
# Except this file
-!.gitignore
+!.gitignore
\ No newline at end of file
diff --git a/example/web/cache/.gitignore b/example/web/cache/.gitignore
new file mode 100644
index 00000000..86d0cb27
--- /dev/null
+++ b/example/web/cache/.gitignore
@@ -0,0 +1,4 @@
+# Ignore everything in this directory
+*
+# Except this file
+!.gitignore
\ No newline at end of file
diff --git a/example/web/index.php b/example/web/index.php
new file mode 100644
index 00000000..f242e191
--- /dev/null
+++ b/example/web/index.php
@@ -0,0 +1,29 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+use Herbie\Application;
+
+if (php_sapi_name() == 'cli-server') {
+ if (preg_match('/\.(?:js|css|gif|jpg|jpeg|png)$/', $_SERVER["REQUEST_URI"])) {
+ return false;
+ }
+}
+
+require_once(dirname(__DIR__, 2) . '/vendor/autoload.php');
+
+define('HERBIE_DEBUG', true);
+
+$app = new Application(
+ dirname(__DIR__) . '/site/',
+ dirname(__DIR__, 2) . '/vendor/'
+);
+
+$app->run();
diff --git a/src/config/defaults.example.yml b/src/config/defaults.example.yml
index 640ce0d6..e88851e2 100644
--- a/src/config/defaults.example.yml
+++ b/src/config/defaults.example.yml
@@ -54,11 +54,11 @@ twig:
cache:
page:
enable: false
- dir: SITE_PATH/cache/page
+ dir: SITE_PATH/runtime/cache/page
expire: 86400
data:
enable: false
- dir: SITE_PATH/cache/data
+ dir: SITE_PATH/runtime/cache/data
expire: 86400
language: de
diff --git a/src/config/defaults.php b/src/config/defaults.php
index 6d15ebe5..1026a7d0 100644
--- a/src/config/defaults.php
+++ b/src/config/defaults.php
@@ -64,12 +64,12 @@
'cache' => [
'page' => [
'enable' => false,
- 'dir' => $SITE_PATH . '/cache/page',
+ 'dir' => $SITE_PATH . '/runtime/cache/page',
'expire' => 86400
],
'data' => [
'enable' => false,
- 'dir' => $SITE_PATH . '/cache/data',
+ 'dir' => $SITE_PATH . '/runtime/cache/data',
'expire' => 86400
]
],
diff --git a/src/plugins/twig/twig.php b/src/plugins/twig/twig.php
index fa5b918d..4f40376e 100644
--- a/src/plugins/twig/twig.php
+++ b/src/plugins/twig/twig.php
@@ -21,8 +21,7 @@ public function initTwig()
$config = DI::get('Config');
// Add custom namespace path to Imagine lib
- $vendorDir = $config->get('site.path') . '/../vendor';
- $autoload = require($vendorDir . '/autoload.php');
+ $autoload = require($config->vendorPath . '/autoload.php');
$autoload->add('Twig_', __DIR__ . '/vendor/twig/twig/lib');
$this->twig = new Twig($config);
diff --git a/src/system/Application.php b/src/system/Application.php
index ef980839..19532f8c 100644
--- a/src/system/Application.php
+++ b/src/system/Application.php
@@ -51,9 +51,15 @@ public function __construct($sitePath, $vendorDir = '../vendor')
*/
private function init()
{
-
+ $logDir = $this->sitePath . '/runtime/log'; // NOTE kind of hard-coded, I know
+ if (!is_dir($logDir)) {
+ die("Logdir {$logDir} does not exist");
+ } elseif (!is_writable($logDir)) {
+ die("Logdir {$logDir} is not writable");
+ }
+
$errorHandler = new ErrorHandler();
- $errorHandler->register();
+ $errorHandler->register($logDir);
static::$DI = $DI = DI::instance();
@@ -61,7 +67,8 @@ private function init()
$DI['Config'] = $config = new Config(
$this->sitePath,
dirname($_SERVER['SCRIPT_FILENAME']),
- $request->getBaseUrl()
+ $request->getBaseUrl(),
+ $this->vendorDir
);
$DI['Alias'] = new Alias([
diff --git a/src/system/Config.php b/src/system/Config.php
index 2beec7e3..24e20eb7 100644
--- a/src/system/Config.php
+++ b/src/system/Config.php
@@ -38,17 +38,24 @@ class Config
*/
private $sitePath;
+ /**
+ * @var string
+ */
+ public $vendorPath;
+
/**
* @param string $sitePath
* @param string $webPath
* @param string $webUrl
+ * @param string $vendorPath
*/
- public function __construct($sitePath, $webPath, $webUrl)
+ public function __construct($sitePath, $webPath, $webUrl, $vendorPath)
{
$this->appPath = realpath(__DIR__);
$this->sitePath = $sitePath;
$this->webPath = $webPath;
$this->webUrl = preg_replace('#\/?index.php#', '', $webUrl);
+ $this->vendorPath = $vendorPath;
$this->items = [];
$this->cache = [];
$this->loadConfig(false);
@@ -203,12 +210,16 @@ private function loadMainFile()
$WEB_PATH = $this->webPath;
$WEB_URL = $this->webUrl;
- $defaults = require(__DIR__ . '/../config/defaults.php');
- if (is_file($this->sitePath . '/config/main.php')) {
- $userConfig = require($this->sitePath . '/config.php');
+ $defaultConfig = __DIR__ . '/../config/defaults.php';
+ $userPhpConfig = $this->sitePath . '/config/main.php';
+ $userYmlConfig = $this->sitePath . '/config/main.yml';
+
+ $defaults = require($defaultConfig);
+ if (is_file($userPhpConfig)) {
+ $userConfig = require($userPhpConfig);
$defaults = $this->merge($defaults, $userConfig);
- } elseif (is_file($this->sitePath . '/config/main.yml')) {
- $content = file_get_contents($this->sitePath . '/config/main.yml');
+ } elseif (is_file($userYmlConfig)) {
+ $content = file_get_contents($userYmlConfig);
$content = $this->replaceConstants($content);
$userConfig = Yaml::parse($content);
$defaults = $this->merge($defaults, $userConfig);
diff --git a/src/system/ErrorHandler.php b/src/system/ErrorHandler.php
index 3635d763..a10b9b6a 100644
--- a/src/system/ErrorHandler.php
+++ b/src/system/ErrorHandler.php
@@ -19,11 +19,12 @@ class ErrorHandler
/**
* Registers this error handler.
*/
- public function register()
+ public function register(string $logDir)
{
+ error_reporting(E_ALL);
ini_set("display_errors", 0);
ini_set("log_errors", 1);
- ini_set("error_log", sprintf("%s/log/%s-error.log", dirname(__DIR__), date('Y-m')));
+ ini_set("error_log", sprintf("%s/%s-error.log", $logDir, date('Y-m')));
set_exception_handler([$this, 'handleException']);
set_error_handler([$this, 'handleError'], error_reporting());