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

142 lines
5.1 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"];
$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,
];
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 = $this->themeFolder . "/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 = $this->themeFolder . "/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,
"info" => $pageInfo,
"menu" => $menu,
];
break;
default:
http_response_code(404);
require __DIR__ . "/views/404.php";
break;
}
echo $this->twig->render($template, $pageOptions);
}
}