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.
120 lines
3.5 KiB
PHP
120 lines
3.5 KiB
PHP
<?php
|
|
|
|
require "vendor/autoload.php";
|
|
class StartKit
|
|
{
|
|
public function __construct()
|
|
{
|
|
$settings = json_decode(file_get_contents("./package.json"), true);
|
|
$theme = $settings["config"]["current_theme"];
|
|
new ThemeEngine(
|
|
"src/themes/theme-" . $theme,
|
|
"/src/themes/theme-" . $theme . "/" . $theme
|
|
);
|
|
}
|
|
}
|
|
|
|
class ThemeEngine
|
|
{
|
|
public $data = [];
|
|
public $loader;
|
|
public $twig;
|
|
public function __construct(string $themePath, string $themeAssetPath)
|
|
{
|
|
$this->themePath = $themePath;
|
|
$this->themeAssetPath = $themeAssetPath;
|
|
$path = explode("/", $themeAssetPath);
|
|
$this->themeFolder = $path[4];
|
|
$this->data = json_decode(file_get_contents("./config.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->data["keywords"],
|
|
"description" => $this->data["description"],
|
|
"image" => $this->themeAssetPath . "/assets/images/global/default-bg.jpg",
|
|
];
|
|
|
|
$menu = $this->data["menu"];
|
|
switch ($request) {
|
|
case "/":
|
|
$recent = $this->data["recent_posts"];
|
|
$featured = $this->data["featured_posts"];
|
|
$template = "index.twig";
|
|
$content = $this->data["index-content"];
|
|
|
|
$pageOptions = [
|
|
"debug" => true, //for theme kit
|
|
"theme" => $this->themeFolder, //for theme kit
|
|
"title" => "This is Fipamo",
|
|
"background" =>
|
|
$this->themeAssetPath . "/assets/images/global/default-bg.jpg",
|
|
"recent" => $recent,
|
|
"featured" => $featured,
|
|
"info" => $pageInfo,
|
|
"menu" => $menu,
|
|
"content" => $content,
|
|
];
|
|
break;
|
|
case "/page":
|
|
$content = $this->data["content"];
|
|
$meta = $this->data["meta"];
|
|
$template = $request . ".twig";
|
|
$pageOptions = [
|
|
"debug" => true, //for theme kit
|
|
"theme" => $this->themeFolder, //for theme kit
|
|
"title" => "Page Title",
|
|
"background" =>
|
|
$this->themeAssetPath . "/assets/images/global/default-bg.jpg",
|
|
"content" => $content,
|
|
"meta" => $meta,
|
|
"info" => $pageInfo,
|
|
"menu" => $menu,
|
|
];
|
|
break;
|
|
case "/tags":
|
|
$tags = $this->data["tag_list"];
|
|
$template = $this->themeFolder . "/tags.twig";
|
|
$pageOptions = [
|
|
"debug" => true, //for theme kit
|
|
"theme" => $this->themeFolder, //for theme kit
|
|
"title" => "Pages Tagged as Tag",
|
|
"background" =>
|
|
$this->themeAssetPath . "/assets/images/global/default-bg.jpg",
|
|
"tag_list" => $tags,
|
|
"info" => $pageInfo,
|
|
"menu" => $menu,
|
|
];
|
|
break;
|
|
case "/archive":
|
|
$archive = $this->data["archives"];
|
|
$template = $this->themeFolder . "/archive.twig";
|
|
$pageOptions = [
|
|
"debug" => true, //for theme kit
|
|
"theme" => $this->themeFolder, //for theme kit
|
|
"title" => "Archive",
|
|
"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);
|
|
}
|
|
}
|
|
|
|
new StartKit();
|