mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-08-27 13:06:04 +02:00
91 lines
1.9 KiB
PHP
91 lines
1.9 KiB
PHP
<?php
|
|
/**
|
|
* Handles finding templates from a stack of template manifest objects.
|
|
*
|
|
* @package framework
|
|
* @subpackage manifest
|
|
*/
|
|
class SS_TemplateLoader {
|
|
|
|
/**
|
|
* @var SS_TemplateLoader
|
|
*/
|
|
private static $instance;
|
|
|
|
/**
|
|
* @var SS_TemplateManifest[]
|
|
*/
|
|
protected $manifests = array();
|
|
|
|
/**
|
|
* @return SS_TemplateLoader
|
|
*/
|
|
public static function instance() {
|
|
return self::$instance ? self::$instance : self::$instance = new self();
|
|
}
|
|
|
|
/**
|
|
* Returns the currently active template manifest instance.
|
|
*
|
|
* @return SS_TemplateManifest
|
|
*/
|
|
public function getManifest() {
|
|
return $this->manifests[count($this->manifests) - 1];
|
|
}
|
|
|
|
/**
|
|
* @param SS_TemplateManifest $manifest
|
|
*/
|
|
public function pushManifest(SS_TemplateManifest $manifest) {
|
|
$this->manifests[] = $manifest;
|
|
}
|
|
|
|
/**
|
|
* @return SS_TemplateManifest
|
|
*/
|
|
public function popManifest() {
|
|
return array_pop($this->manifests);
|
|
}
|
|
|
|
/**
|
|
* Attempts to find possible candidate templates from a set of template
|
|
* names from modules, current theme directory and finally the application
|
|
* folder.
|
|
*
|
|
* The template names can be passed in as plain strings, or be in the
|
|
* format "type/name", where type is the type of template to search for
|
|
* (e.g. Includes, Layout).
|
|
*
|
|
* @param string|array $templates
|
|
* @param string $theme
|
|
*
|
|
* @return array
|
|
*/
|
|
public function findTemplates($templates, $theme = null) {
|
|
$result = array();
|
|
$project = project();
|
|
|
|
foreach ((array) $templates as $template) {
|
|
$found = false;
|
|
|
|
if (strpos($template, '/')) {
|
|
list($type, $template) = explode('/', $template, 2);
|
|
} else {
|
|
$type = null;
|
|
}
|
|
|
|
if ($found = $this->getManifest()->getCandidateTemplate($template, $theme)) {
|
|
if ($type && isset($found[$type])) {
|
|
$found = array(
|
|
'main' => $found[$type]
|
|
);
|
|
}
|
|
$result = array_merge($found, $result);
|
|
}
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
|
|
}
|