Issue #2416831 by cilefen, vasi, tadityar, Noe_, lauriii, akalata, JeroenT, Cottser, davidhernandez: Add an active_theme twig function
parent
e96d427046
commit
ffe9803c1b
|
@ -1323,6 +1323,7 @@ services:
|
||||||
- { name: twig.extension, priority: 100 }
|
- { name: twig.extension, priority: 100 }
|
||||||
calls:
|
calls:
|
||||||
- [setGenerators, ['@url_generator']]
|
- [setGenerators, ['@url_generator']]
|
||||||
|
- [setThemeManager, ['@theme.manager']]
|
||||||
# @todo Figure out what to do about debugging functions.
|
# @todo Figure out what to do about debugging functions.
|
||||||
# @see https://www.drupal.org/node/1804998
|
# @see https://www.drupal.org/node/1804998
|
||||||
twig.extension.debug:
|
twig.extension.debug:
|
||||||
|
|
|
@ -15,6 +15,7 @@ namespace Drupal\Core\Template;
|
||||||
use Drupal\Component\Utility\SafeMarkup;
|
use Drupal\Component\Utility\SafeMarkup;
|
||||||
use Drupal\Core\Render\RendererInterface;
|
use Drupal\Core\Render\RendererInterface;
|
||||||
use Drupal\Core\Routing\UrlGeneratorInterface;
|
use Drupal\Core\Routing\UrlGeneratorInterface;
|
||||||
|
use Drupal\Core\Theme\ThemeManagerInterface;
|
||||||
use Drupal\Core\Url;
|
use Drupal\Core\Url;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -40,6 +41,13 @@ class TwigExtension extends \Twig_Extension {
|
||||||
*/
|
*/
|
||||||
protected $renderer;
|
protected $renderer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The theme manager.
|
||||||
|
*
|
||||||
|
* @var \Drupal\Core\Theme\ThemeManagerInterface
|
||||||
|
*/
|
||||||
|
protected $themeManager;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructs \Drupal\Core\Template\TwigExtension.
|
* Constructs \Drupal\Core\Template\TwigExtension.
|
||||||
*
|
*
|
||||||
|
@ -63,11 +71,24 @@ class TwigExtension extends \Twig_Extension {
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the theme manager.
|
||||||
|
*
|
||||||
|
* @param \Drupal\Core\Theme\ThemeManagerInterface $theme_manager
|
||||||
|
* The theme manager.
|
||||||
|
*
|
||||||
|
* @return $this
|
||||||
|
*/
|
||||||
|
public function setThemeManager(ThemeManagerInterface $theme_manager) {
|
||||||
|
$this->themeManager = $theme_manager;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
public function getFunctions() {
|
public function getFunctions() {
|
||||||
return array(
|
return [
|
||||||
// This function will receive a renderable array, if an array is detected.
|
// This function will receive a renderable array, if an array is detected.
|
||||||
new \Twig_SimpleFunction('render_var', array($this, 'renderVar')),
|
new \Twig_SimpleFunction('render_var', array($this, 'renderVar')),
|
||||||
// The url and path function are defined in close parallel to those found
|
// The url and path function are defined in close parallel to those found
|
||||||
|
@ -77,8 +98,9 @@ class TwigExtension extends \Twig_Extension {
|
||||||
new \Twig_SimpleFunction('url_from_path', array($this, 'getUrlFromPath'), array('is_safe_callback' => array($this, 'isUrlGenerationSafe'))),
|
new \Twig_SimpleFunction('url_from_path', array($this, 'getUrlFromPath'), array('is_safe_callback' => array($this, 'isUrlGenerationSafe'))),
|
||||||
new \Twig_SimpleFunction('link', array($this, 'getLink')),
|
new \Twig_SimpleFunction('link', array($this, 'getLink')),
|
||||||
new \Twig_SimpleFunction('file_url', 'file_create_url'),
|
new \Twig_SimpleFunction('file_url', 'file_create_url'),
|
||||||
new \Twig_SimpleFunction('attach_library', array($this, 'attachLibrary'))
|
new \Twig_SimpleFunction('attach_library', [$this, 'attachLibrary']),
|
||||||
);
|
new \Twig_SimpleFunction('active_theme', [$this, 'getActiveTheme']),
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -246,6 +268,16 @@ class TwigExtension extends \Twig_Extension {
|
||||||
return $build;
|
return $build;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the name of the active theme.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* The name of the active theme.
|
||||||
|
*/
|
||||||
|
public function getActiveTheme() {
|
||||||
|
return $this->themeManager->getActiveTheme()->getName();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Determines at compile time whether the generated URL will be safe.
|
* Determines at compile time whether the generated URL will be safe.
|
||||||
*
|
*
|
||||||
|
|
|
@ -72,4 +72,31 @@ class TwigExtensionTest extends UnitTestCase {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests the active_theme function.
|
||||||
|
*/
|
||||||
|
public function testActiveTheme() {
|
||||||
|
$renderer = $this->getMock('\Drupal\Core\Render\RendererInterface');
|
||||||
|
$extension = new TwigExtension($renderer);
|
||||||
|
$theme_manager = $this->getMock('\Drupal\Core\Theme\ThemeManagerInterface');
|
||||||
|
$active_theme = $this->getMockBuilder('\Drupal\Core\Theme\ActiveTheme')
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->getMock();
|
||||||
|
$active_theme
|
||||||
|
->expects($this->once())
|
||||||
|
->method('getName')
|
||||||
|
->willReturn('test_theme');
|
||||||
|
$theme_manager
|
||||||
|
->expects($this->once())
|
||||||
|
->method('getActiveTheme')
|
||||||
|
->willReturn($active_theme);
|
||||||
|
$extension->setThemeManager($theme_manager);
|
||||||
|
|
||||||
|
$loader = new \Twig_Loader_String();
|
||||||
|
$twig = new \Twig_Environment($loader);
|
||||||
|
$twig->addExtension($extension);
|
||||||
|
$result = $twig->render('{{ active_theme() }}');
|
||||||
|
$this->assertEquals('test_theme', $result);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue