5b3844b196
Styling was a bit stale, so I ovehauled them to use native CSS, eliminating the need for pre-processors. The overall framework was old and convoluted so that needed to be updated to streamline how styles are being applied. There's still some work to do but the base is so much cleaner now.
157 lines
6.4 KiB
PHP
157 lines
6.4 KiB
PHP
<?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);
|
|
}
|
|
}
|