You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
FipamoThemeKit/engine/ThemeEngine.php

157 lines
6.4 KiB
PHTML

<?php
namespace engine;
class ThemeEngine
{
public $data = [];
public $loader;
public $twig;
public function __construct(string $themePath, string $themeAssetPath)
{
$var = [];
$this->themePath = $themePath;
$this->themeAssetPath = $themeAssetPath;
$path = explode('/', $themeAssetPath);
$this->themeFolder = $path[4];
$this->settings = json_decode(
file_get_contents('./data/settings.json'),
true
);
$this->posts = json_decode(file_get_contents('./data/posts.json'), true);
$this->archives = json_decode(
file_get_contents('./data/archives.json'),
true
);
$this->loader = new \Twig\Loader\FilesystemLoader(
$themePath . '/' . $path[4]
);
$this->twig = new \Twig\Environment($this->loader, []);
$this->router($_SERVER['REQUEST_URI']);
}
public function router(string $request)
{
$pageInfo = [
'keywords' => $this->settings['keywords'],
'description' => $this->settings['description'],
'image' => $this->themeAssetPath . '/assets/images/global/default-bg.jpg',
];
$featureList = explode(',', $this->posts['feature']);
$fileList = explode(',', $this->posts['files']);
$images = [];
$files = [];
foreach ($featureList as $file) {
$item = trim($file);
$ext = pathinfo($item, PATHINFO_EXTENSION);
if ($item != null || $item != '') {
array_push($images, ['file' => $item, 'type' => trim($ext)]);
}
}
foreach ($fileList as $file) {
$item = trim($file);
$ext = pathinfo($item, PATHINFO_EXTENSION);
if ($item != null || $item != '') {
array_push($files, ['file' => $item, 'type' => trim($ext)]);
}
}
$menu = $this->settings['menu'];
switch ($request) {
case '/':
$recent = $this->posts['recent_posts'];
$featured = $this->posts['featured_posts'];
$template = 'index.twig';
$content = $this->posts['index-content-no-image'];
$pageOptions = [
'debug' => true, // for theme kit
'theme' => $this->themeFolder, // for theme kit
'title' => 'This is Fipamo',
'dynamicRender' => $this->settings['dynamicRender'],
'background' => $this->themeAssetPath . '/assets/images/global/default-bg.jpg',
'recent' => $recent,
'featured' => $featured,
'info' => $pageInfo,
'menu' => $menu,
'content' => $content,
'media' => $images,
'files' => $files,
];
break;
case '/page':
$content = $this->posts['content'];
$meta = $this->posts['meta'];
$template = $request . '.twig';
$pageOptions = [
'debug' => true, // for theme kit
'theme' => $this->themeFolder, // for theme kit
'title' => 'Page Title',
'dynamicRender' => $this->settings['dynamicRender'],
'background' => $this->themeAssetPath . '/assets/images/global/default-bg.jpg',
'content' => $content,
'meta' => $meta,
'info' => $pageInfo,
'menu' => $menu,
'media' => $images,
'files' => $files,
];
break;
case '/tags':
$tags = $this->settings['tag_list'];
$template = 'tags.twig';
$pageOptions = [
'debug' => true, // for theme kit
'theme' => $this->themeFolder, // for theme kit
'title' => 'Pages Tagged as Tag',
'dynamicRender' => $this->settings['dynamicRender'],
'background' => $this->themeAssetPath . '/assets/images/global/default-bg.jpg',
'tag_list' => $tags,
'info' => $pageInfo,
'menu' => $menu,
];
break;
case '/archive':
$archive = $this->archives;
$template = 'archive.twig';
$pageOptions = [
'debug' => true, // for theme kit
'theme' => $this->themeFolder, // for theme kit
'title' => 'Archive',
'dynamicRender' => $this->settings['dynamicRender'],
'background' => $this->themeAssetPath . '/assets/images/global/default-bg.jpg',
'archives' => $archive['archives'],
'info' => $pageInfo,
'menu' => $menu,
];
break;
default:
set_error_handler(function ($errno, $errstr, $errfile, $errline) {
throw new \ErrorException($errstr, $errno, 0, $errfile, $errline);
$error = $errstr;
});
$template = 'error.twig';
$pageOptions = [
'debug' => true, // for theme kit
'theme' => $this->themeFolder, // for theme kit
'title' => 'Uh oh',
'dynamicRender' => $this->settings['dynamicRender'],
'background' => $this->themeAssetPath . '/assets/images/global/default-bg.jpg',
'info' => $pageInfo,
'content' => "This page is not defined",
'menu' => $menu,
'media' => $images,
'files' => $files,
];
break;
}
echo $this->twig->render($template, $pageOptions);
}
}