70 lines
1.6 KiB
PHP
70 lines
1.6 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
use Twig\Environment;
|
|
use Twig\Loader\FilesystemLoader;
|
|
|
|
/**
|
|
* Render a Twig view.
|
|
*
|
|
* @param string $name Template name without extension (e.g. "index")
|
|
* @param array $moreData Additional variables to merge into template context
|
|
*
|
|
* @return bool
|
|
*/
|
|
function view(string $name = '', array $moreData = []): bool
|
|
{
|
|
global $config, $data;
|
|
|
|
if (!is_array($data)) {
|
|
$data = [];
|
|
}
|
|
|
|
if (!empty($moreData)) {
|
|
$data = array_merge($data, $moreData);
|
|
}
|
|
|
|
// ----------------------------------------
|
|
// Setup Twig
|
|
// ----------------------------------------
|
|
|
|
$loader = new FilesystemLoader(BASEPATH . '/App/views/');
|
|
|
|
// Add namespace paths
|
|
if (is_dir(FRAMEWORKPATH . '/twig')) {
|
|
$loader->addPath(FRAMEWORKPATH . '/twig', 'novaconium');
|
|
}
|
|
|
|
if (is_dir(FRAMEWORKPATH . '/views')) {
|
|
$loader->addPath(FRAMEWORKPATH . '/views', 'novacore');
|
|
}
|
|
|
|
if (is_dir(BASEPATH . '/App/templates')) {
|
|
$loader->addPath(BASEPATH . '/App/templates', 'override');
|
|
}
|
|
|
|
$twig = new Environment($loader);
|
|
|
|
$twig->addGlobal('config', $config);
|
|
|
|
// ----------------------------------------
|
|
// Render template
|
|
// ----------------------------------------
|
|
|
|
$appTemplatePath = BASEPATH . '/App/views/' . $name . '.html.twig';
|
|
|
|
if (file_exists($appTemplatePath)) {
|
|
echo $twig->render($name . '.html.twig', $data);
|
|
return true;
|
|
}
|
|
|
|
if (str_starts_with($name, '@')) {
|
|
echo $twig->render($name . '.html.twig', $data);
|
|
return true;
|
|
}
|
|
|
|
echo "Error: Twig Template ($name) Not Found.";
|
|
return false;
|
|
}
|