Feature: auto-load themes (previously templates) from plugins/*/themes/*

This commit is contained in:
slawkens 2024-01-25 23:06:10 +01:00
parent 0698e7b5f5
commit f719c02050
3 changed files with 38 additions and 1 deletions

View File

@ -798,6 +798,10 @@ function get_templates()
$ret[] = $file; $ret[] = $file;
} }
foreach (Plugins::getThemes() as $name => $path) {
$ret[] = $name;
}
return $ret; return $ret;
} }

View File

@ -147,6 +147,32 @@ class Plugins {
return $routes; return $routes;
} }
public static function getThemes()
{
$cache = Cache::getInstance();
if ($cache->enabled()) {
$tmp = '';
if ($cache->fetch('plugins_themes', $tmp)) {
return unserialize($tmp);
}
}
$themes = [];
$pluginThemes = glob(PLUGINS . '*/themes/*', GLOB_ONLYDIR);
foreach ($pluginThemes as $path) {
$path = str_replace(PLUGINS, 'plugins/', $path);
$name = pathinfo($path, PATHINFO_FILENAME);
$themes[$name] = $path;
}
if ($cache->enabled()) {
$cache->set('plugins_themes', serialize($themes), 600);
}
return $themes;
}
public static function getHooks() public static function getHooks()
{ {
$cache = Cache::getInstance(); $cache = Cache::getInstance();

View File

@ -46,7 +46,14 @@ if(setting('core.template_allow_change'))
} }
} }
} }
$template_path = 'templates/' . $template_name;
$themes = Plugins::getThemes();
if (isset($themes[$template_name])) {
$template_path = $themes[$template_name];
}
else {
$template_path = 'templates/' . $template_name;
}
if(file_exists(BASE . $template_path . '/index.php')) { if(file_exists(BASE . $template_path . '/index.php')) {
$template_index = 'index.php'; $template_index = 'index.php';