diff --git a/src/PatternLab/PatternEngine/Twig/Loaders/PatternLoader.php b/src/PatternLab/PatternEngine/Twig/Loaders/PatternLoader.php index 3d01683..92371b1 100644 --- a/src/PatternLab/PatternEngine/Twig/Loaders/PatternLoader.php +++ b/src/PatternLab/PatternEngine/Twig/Loaders/PatternLoader.php @@ -64,13 +64,26 @@ public function __construct($options = array()) { // set-up the loader list in order that they should be checked // 1. Patterns 2. Filesystem 3. String $loaders = array(); + // 1. add Patterns $loaders[] = new Twig_Loader_PatternPartialLoader(Config::getOption("patternSourceDir"),array("patternPaths" => $options["patternPaths"])); - // add the paths to the filesystem loader if the paths existed + // 2. add the paths to the filesystem loader if the paths existed if (count($filesystemLoaderPaths) > 0) { $filesystemLoader = new \Twig_Loader_Filesystem($filesystemLoaderPaths); $loaders[] = TwigUtil::addPaths($filesystemLoader, $patternSourceDir); } + + // Setting loaders and giving plugins a chance to manipulate them + TwigUtil::setLoaders($loaders); + // set-up the dispatcher + $dispatcherInstance = Dispatcher::getInstance(); + $dispatcherInstance->dispatch("twigLoaderPreInit.customize"); + // getting the loaders back + $loaders = TwigUtil::getLoaders(); + + // 3. add String loader + // This *must* go last or no loaders after will work ~ https://github.com/symfony/symfony/issues/10865 + // @todo Remove `Twig_Loader_String` - if a Twig include path is wrong, this outputs the string anyway with no error ~ https://github.com/symfony/symfony/issues/10865 $loaders[] = new \Twig_Loader_String(); // set-up Twig @@ -87,8 +100,6 @@ public function __construct($options = array()) { TwigUtil::loadDebug(); TwigUtil::loadMacros(); - // set-up the dispatcher - $dispatcherInstance = Dispatcher::getInstance(); $dispatcherInstance->dispatch("twigLoader.customize"); $dispatcherInstance->dispatch("twigPatternLoader.customize"); diff --git a/src/PatternLab/PatternEngine/Twig/TwigUtil.php b/src/PatternLab/PatternEngine/Twig/TwigUtil.php index b483cd9..64f97da 100644 --- a/src/PatternLab/PatternEngine/Twig/TwigUtil.php +++ b/src/PatternLab/PatternEngine/Twig/TwigUtil.php @@ -19,7 +19,8 @@ class TwigUtil { protected static $instance = ''; - + protected static $loaders = array(); + /** * Get an instance of the Twig environment * @@ -46,7 +47,46 @@ public static function setInstance($instance = "") { } self::$instance = $instance; - + + } + + /** + * Get an instance of the Twig loaders + * + * @return {Array} List of Twig Loaders + */ + public static function getLoaders() { + + if (empty(self::$loaders)) { + return false; + } + + return self::$loaders; + + } + + /** + * Set an instance of the Twig loaders + * @param {Array} List of Twig Loaders + */ + public static function setLoaders($loaders = array()) { + + if (empty($loaders)) { + Console::writeError("please set the loaders"); + } + + self::$loaders = $loaders; + + } + + /** + * Add a loader to the Twig Loaders array + * @param {Loader} A Twig Loader + */ + public static function addLoader($loader) { + + self::$loaders[] = $loader; + } /**