SimpleMegaMenuTwigExtension.php in Simple Mega Menu 2.0.x
File
src/TwigExtension/SimpleMegaMenuTwigExtension.php
View source
<?php
namespace Drupal\simple_megamenu\TwigExtension;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Url;
use Drupal\simple_megamenu\Entity\SimpleMegaMenuInterface;
class SimpleMegaMenuTwigExtension extends \Twig_Extension {
protected $entityTypeManager;
public function __construct(EntityTypeManagerInterface $entity_type_manager) {
$this->entityTypeManager = $entity_type_manager;
}
public function getFunctions() {
return [
new \Twig_SimpleFunction('view_megamenu', [
$this,
'viewMegaMenu',
]),
new \Twig_SimpleFunction('has_megamenu', [
$this,
'hasMegaMenu',
]),
];
}
public function viewMegaMenu(Url $url, $view_mode = 'default') {
if (!$url instanceof Url) {
return [];
}
if (!$this
->hasMegaMenu($url)) {
return [];
}
$build = [];
$menu_attributes = $url
->getOption('attributes');
$simple_mega_menu_id = $menu_attributes['data-simple-mega-menu'];
$simple_mega_menu = $this->entityTypeManager
->getStorage('simple_mega_menu')
->load($simple_mega_menu_id);
if ($simple_mega_menu instanceof SimpleMegaMenuInterface) {
if (!$simple_mega_menu
->access('view')) {
return $build;
}
$viewBuilder = $this->entityTypeManager
->getViewBuilder($simple_mega_menu
->getEntityTypeId());
$build = $viewBuilder
->view($simple_mega_menu, $view_mode);
}
return $build;
}
public function hasMegaMenu(Url $url) {
if (!$url instanceof Url) {
return FALSE;
}
$menu_attributes = $url
->getOption('attributes');
if (isset($menu_attributes['data-simple-mega-menu']) && !empty($menu_attributes['data-simple-mega-menu'])) {
return TRUE;
}
return FALSE;
}
public function getName() {
return 'simple_megamenu.twig.extension';
}
}