Chi
9 years ago
commit
00a7a29dde
4 changed files with 179 additions and 0 deletions
@ -0,0 +1,6 @@ |
|||||||
|
-- SUMMARY -- |
||||||
|
|
||||||
|
Twig Tweak module provides developers a Twig extension with some addition |
||||||
|
functions and filters. |
||||||
|
|
||||||
|
See src/TwigExtension.php for details. |
@ -0,0 +1,161 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
/** |
||||||
|
* @file |
||||||
|
* Contains Drupal\twig_tweak\TwigExtension. |
||||||
|
*/ |
||||||
|
|
||||||
|
namespace Drupal\twig_tweak; |
||||||
|
|
||||||
|
use Drupal\Core\Config\ConfigFactoryInterface; |
||||||
|
use Drupal\block\Entity\Block; |
||||||
|
use Drupal\Core\Entity\EntityTypeManagerInterface; |
||||||
|
use Drupal\Core\Utility\Token; |
||||||
|
|
||||||
|
/** |
||||||
|
* A class providing Twig extension with some useful functions and filters. |
||||||
|
*/ |
||||||
|
class TwigExtension extends \Twig_Extension { |
||||||
|
|
||||||
|
/** |
||||||
|
* The entity type manager. |
||||||
|
* |
||||||
|
* @var \Drupal\Core\Entity\EntityTypeManagerInterface |
||||||
|
*/ |
||||||
|
protected $entityTypeManager; |
||||||
|
|
||||||
|
/** |
||||||
|
* The token service. |
||||||
|
* |
||||||
|
* @var \Drupal\Core\Utility\Token |
||||||
|
*/ |
||||||
|
protected $token; |
||||||
|
|
||||||
|
/** |
||||||
|
* The configuration factory. |
||||||
|
* |
||||||
|
* @var \Drupal\Core\Config\ConfigFactoryInterface |
||||||
|
*/ |
||||||
|
protected $configFactory; |
||||||
|
|
||||||
|
/** |
||||||
|
* TwigExtension constructor. |
||||||
|
* |
||||||
|
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager |
||||||
|
* The entity type manager. |
||||||
|
* @param \Drupal\Core\Utility\Token $token |
||||||
|
* The token service. |
||||||
|
* @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory |
||||||
|
* The configuration factory. |
||||||
|
*/ |
||||||
|
public function __construct(EntityTypeManagerInterface $entity_type_manager, Token $token, ConfigFactoryInterface $config_factory) { |
||||||
|
$this->blockBuilder = \Drupal::entityTypeManager() |
||||||
|
->getViewBuilder('block'); |
||||||
|
|
||||||
|
$this->entityTypeManager = $entity_type_manager; |
||||||
|
$this->token = $token; |
||||||
|
$this->configFactory = $config_factory; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* {@inheritdoc} |
||||||
|
*/ |
||||||
|
public function getFunctions() { |
||||||
|
return [ |
||||||
|
new \Twig_SimpleFunction('drupal_view', [$this, 'drupalView']), |
||||||
|
new \Twig_SimpleFunction('drupal_block', [$this, 'drupalBlock']), |
||||||
|
new \Twig_SimpleFunction('drupal_token', [$this, 'drupalToken']), |
||||||
|
new \Twig_SimpleFunction('drupal_entity', [$this, 'drupalEntity']), |
||||||
|
new \Twig_SimpleFunction('drupal_config', [$this, 'drupalConfig']) |
||||||
|
]; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* {@inheritdoc} |
||||||
|
*/ |
||||||
|
public function getFilters() { |
||||||
|
return [ |
||||||
|
new \Twig_SimpleFilter('php', [$this, 'phpFilter']), |
||||||
|
new \Twig_SimpleFilter('token_replace', [$this, 'tokenReplaceFilter']), |
||||||
|
new \Twig_SimpleFilter('preg_replace', [$this, 'pregPeplaceFilter']), |
||||||
|
]; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* {@inheritdoc} |
||||||
|
*/ |
||||||
|
public function getName() { |
||||||
|
return 'twig_tweak'; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Embeds a view. |
||||||
|
*/ |
||||||
|
public function drupalView($name, $display_id = 'default') { |
||||||
|
$args = func_get_args(); |
||||||
|
return views_embed_view( |
||||||
|
$name, |
||||||
|
$display_id, |
||||||
|
isset($args[2]) ? $args[2] : NULL, |
||||||
|
isset($args[3]) ? $args[3] : NULL, |
||||||
|
isset($args[4]) ? $args[2] : NULL |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Builds the render array for the provided block. |
||||||
|
*/ |
||||||
|
public function drupalBlock($id) { |
||||||
|
$block = Block::load($id); |
||||||
|
return $this->entityTypeManager->getViewBuilder('block')->view($block); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Replaces a given tokens with appropriate value. |
||||||
|
*/ |
||||||
|
public function drupalToken($token) { |
||||||
|
return $this->token->replace("[$token]"); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Returns the render array for an entity. |
||||||
|
*/ |
||||||
|
public function drupalEntity($entity_type, $id, $view_mode = NULL, $langcode = NULL) { |
||||||
|
$entity = $this->entityTypeManager->getStorage($entity_type)->load($id); |
||||||
|
$render_controller = $this->entityTypeManager->getViewBuilder($entity->getEntityTypeId()); |
||||||
|
return $render_controller->view($entity, $view_mode, $langcode); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Gets data from this configuration. |
||||||
|
*/ |
||||||
|
public function drupalConfig($name, $key) { |
||||||
|
return $this->configFactory->get($name)->get($key); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Evaluates a string of PHP code. |
||||||
|
*/ |
||||||
|
public function phpFilter($code) { |
||||||
|
ob_start(); |
||||||
|
print eval($code); |
||||||
|
$output = ob_get_contents(); |
||||||
|
ob_end_clean(); |
||||||
|
return $output; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Replaces all tokens in a given string with appropriate values. |
||||||
|
*/ |
||||||
|
public function tokenReplaceFilter($text) { |
||||||
|
return $this->token->replace($text); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Performs a regular expression search and replace. |
||||||
|
*/ |
||||||
|
public function pregPeplaceFilter($text, $pattern, $replacement) { |
||||||
|
return preg_replace('/' . preg_quote($pattern, '/') . '/', $replacement, $text); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,6 @@ |
|||||||
|
name: Twig tweak |
||||||
|
type: module |
||||||
|
description: Provides some extra twig functions. |
||||||
|
package: custom |
||||||
|
version: 8.x-1.0-dev |
||||||
|
core: 8.x |
Loading…
Reference in new issue