diff --git a/DependencyInjection/Compiler/ThemeCompilerPass.php b/DependencyInjection/Compiler/ThemeCompilerPass.php
index b88cb2e..a5cde62 100644
--- a/DependencyInjection/Compiler/ThemeCompilerPass.php
+++ b/DependencyInjection/Compiler/ThemeCompilerPass.php
@@ -23,9 +23,34 @@ public function process(ContainerBuilder $container)
$container->setAlias('templating.cache_warmer.template_paths', 'liip_theme.templating.cache_warmer.template_paths');
+ if (true === $container->hasDefinition('twig')) {
+ $twigLoader = $container->findDefinition('twig.loader');
+ $aliasedTo = $this->resolveAlias('twig.loader', $container);
+ if ($aliasedTo == 'twig.loader.chain') {
+ $methodCalls = $twigLoader->getMethodCalls();
+ foreach($methodCalls as $index => $methodCall) {
+ if ($methodCall[0] == 'addLoader' && (string) $methodCall[1][0] == 'twig.loader.filesystem') {
+ $methodCalls[$index] = array($methodCall[0], array(new Reference('liip_theme.twig.loader.filesystem')));
+ }
+ }
+ $twigLoader->setMethodCalls($methodCalls);
+ } elseif ($aliasedTo == 'twig.loader.filesystem') {
+ $container->setAlias('twig.loader.filesystem', 'liip_theme.twig.loader.filesystem');
+ }
+ }
+
if (!$container->getParameter('liip_theme.cache_warming')) {
$container->getDefinition('liip_theme.templating.cache_warmer.template_paths')
->replaceArgument(2, null);
}
}
+
+ public function resolveContainerAlias($id, ContainerBuilder $container) {
+ while($container->hasAlias($id)) {
+ $id = $container->getAlias($id);
+ }
+
+ return $id;
+ }
+
}
diff --git a/Loader/FilesystemLoader.php b/Loader/FilesystemLoader.php
new file mode 100644
index 0000000..0fd2de5
--- /dev/null
+++ b/Loader/FilesystemLoader.php
@@ -0,0 +1,39 @@
+activeTheme = $activeTheme;
+ parent::__construct($locator, $parser);
+ }
+
+ protected function findTemplate($template)
+ {
+ $logicalName = (string)$template;
+ $cacheKey = $logicalName;
+ if($theme = $this->activeTheme->getName()) {
+ $cacheKey = $cacheKey . '|' . $theme;
+ }
+
+ if(isset($this->cache[$cacheKey])) {
+ return $this->cache[$cacheKey];
+ }
+
+ $file = parent::findTemplate($template);
+
+ unset($this->cache[$logicalName]);
+ $this->cache[$cacheKey] = $file;
+
+ return $file;
+ }
+
+}
\ No newline at end of file
diff --git a/Resources/config/templating.xml b/Resources/config/templating.xml
index 56da6f0..e405a52 100644
--- a/Resources/config/templating.xml
+++ b/Resources/config/templating.xml
@@ -9,6 +9,7 @@
Liip\ThemeBundle\ActiveTheme
Liip\ThemeBundle\CacheWarmer\TemplatePathsCacheWarmer
Liip\ThemeBundle\Helper\DeviceDetection
+ Liip\ThemeBundle\Loader\FilesystemLoader
@@ -25,6 +26,12 @@
+
+
+
+
+
+