diff --git a/Classes/Domain/Model/Menu.php b/Classes/Domain/Model/Menu.php index 7f83e894b91fd51bbfa38d64564904586ccd1663..323c09293e481624b12a8cacaed4e8c44d921b98 100644 --- a/Classes/Domain/Model/Menu.php +++ b/Classes/Domain/Model/Menu.php @@ -85,6 +85,54 @@ class Menu extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity $this->menuItem = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage(); } + /** + * @return array + */ + public function getMenuItemPages(): array + { + return $this->getMenuItemByType(MenuItem::TYPE_PAGE); + } + + /** + * @return array + */ + public function getMenuItemLinks(): array + { + return $this->getMenuItemByType(MenuItem::TYPE_LINK); + } + + /** + * @return array + */ + public function getMenuItemContents(): array + { + return $this->getMenuItemByType(MenuItem::TYPE_CONTENT); + } + + /** + * @return array + */ + public function getMenuItemSubmenus(): array + { + return $this->getMenuItemByType(MenuItem::TYPE_SUBMENU); + } + + /** + * @param int $type + * @return array + */ + public function getMenuItemByType(int $type): array + { + if ($items = $this->getMenuItem()) { + return array_filter($items->toArray(), function ($item) use ($type) { + /** @var MenuItem $item */ + return $item->getType() === $type; + }); + } + + return []; + } + /** * Returns the menuGroup * diff --git a/Classes/Hooks/ItemsProcFunc.php b/Classes/Hooks/ItemsProcFunc.php index 1ca8bf54e38c52c68b44c08ad0e897e8a867a368..e265887d0528368c7cb9fc7e11703ecc20fa210d 100644 --- a/Classes/Hooks/ItemsProcFunc.php +++ b/Classes/Hooks/ItemsProcFunc.php @@ -2,10 +2,10 @@ namespace NL\NlMenubuilder\Hooks; +use TYPO3\CMS\Core\Utility\DebugUtility; use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Extbase\Object\ObjectManager; use TYPO3\CMS\Fluid\View\TemplatePaths; -use TYPO3\CMS\Lang\LanguageService; class ItemsProcFunc { @@ -55,7 +55,7 @@ class ItemsProcFunc foreach ($templates as $template) { $template = str_replace('.html', '', $template); $config['items'][] = [ - htmlspecialchars($this->getLanguageService()->sL($this->langPrefix . $template)), + htmlspecialchars($this->getLanguageService()->sL($this->langPrefix . $template)) ?: $template, $template ]; } @@ -64,9 +64,9 @@ class ItemsProcFunc /** * Returns LanguageService * - * @return LanguageService + * @return mixed */ - protected function getLanguageService(): LanguageService + protected function getLanguageService() { return $GLOBALS['LANG']; } diff --git a/Classes/ViewHelpers/GetViewHelper.php b/Classes/ViewHelpers/GetViewHelper.php new file mode 100644 index 0000000000000000000000000000000000000000..8ad70e6037862175581d7de769b86b7be641837d --- /dev/null +++ b/Classes/ViewHelpers/GetViewHelper.php @@ -0,0 +1,63 @@ +<?php + + +namespace NL\NlMenubuilder\ViewHelpers; + +use FluidTYPO3\Vhs\Traits\TemplateVariableViewHelperTrait; +use NL\NlMenubuilder\Domain\Repository\MenuRepository; +use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Extbase\Object\ObjectManager; +use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface; +use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper; +use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic; + + +class GetViewHelper extends AbstractViewHelper +{ + use CompileWithRenderStatic; + use TemplateVariableViewHelperTrait; + + /** + * @var boolean + */ + protected $escapeChildren = false; + + /** + * @var boolean + */ + protected $escapeOutput = false; + + /** + * @return void + */ + public function initializeArguments(): void + { + $this->registerAsArgument(); + $this->registerArgument('uuid', 'int', 'UUID of the menu', true, 0); + } + + /** + * @param array $arguments + * @param \Closure $renderChildrenClosure + * @param RenderingContextInterface $renderingContext + * @return mixed|string + * @throws \TYPO3\CMS\Extbase\Object\Exception + */ + public static function renderStatic(array $arguments, \Closure $renderChildrenClosure, RenderingContextInterface $renderingContext) + { + /** @var ObjectManager $objectManager */ + $objectManager = GeneralUtility::makeInstance(ObjectManager::class); + + /** @var MenuRepository $menuRepository */ + $menuRepository = $objectManager->get(MenuRepository::class); + + return static::renderChildrenWithVariableOrReturnInputStatic( + $menuRepository->findByUid($arguments['uuid'] ?? 0), + $arguments['as'], + $renderingContext, + $renderChildrenClosure + ); + + + } +} diff --git a/Configuration/TCA/tx_nlmenubuilder_domain_model_menugroup.php b/Configuration/TCA/tx_nlmenubuilder_domain_model_menugroup.php index b9406678814d6b21a76a30a045d5c83793db3b8a..016fdadf310218bf04f9bebde0014a35dc6ab497 100644 --- a/Configuration/TCA/tx_nlmenubuilder_domain_model_menugroup.php +++ b/Configuration/TCA/tx_nlmenubuilder_domain_model_menugroup.php @@ -125,7 +125,7 @@ return [ 'config' => [ 'type' => 'input', 'size' => 30, - 'eval' => 'trim' + 'eval' => 'trim,required' ], ], @@ -134,7 +134,10 @@ return [ 'label' => "$ll:tx_nlmenubuilder_domain_model_menugroup.template", 'config' => [ 'type' => 'select', - 'items' => [], + 'renderType' => 'selectSingle', + 'items' => [ + ['-', ''] + ], 'itemsProcFunc' => 'NL\NlMenubuilder\Hooks\ItemsProcFunc->loadMenuGroupTemplates' ], ], diff --git a/Resources/Private/Partials/MenuItem/Page.html b/Resources/Private/Partials/MenuItem/Page.html index b78e6bf2c6ac5b962a27a0f06d7cd9edeadf6eda..8015bb3b80386ad3dc43dcdcf28e00d248d19312 100644 --- a/Resources/Private/Partials/MenuItem/Page.html +++ b/Resources/Private/Partials/MenuItem/Page.html @@ -1,5 +1,5 @@ <html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true"> <div class="menu-builder menu-item-page"> - <f:link.page>{menuItem.page}</f:link.page> + <f:link.page pageUid="{menuItem.page}">{menuItem.title}</f:link.page> </div> diff --git a/composer.json b/composer.json index 3790001f5a730ec7c4f6e5fdcab743bbe4f162c1..0c3572aced7c61c5a72caabe624a1e56a43047fc 100644 --- a/composer.json +++ b/composer.json @@ -12,7 +12,7 @@ ], "require": { "php": "^7.2", - "typo3/cms-core": "^9.5" + "typo3/cms-core": "^9.5 || ^10.4" }, "autoload": { "psr-4": { diff --git a/ext_emconf.php b/ext_emconf.php index 0020851ca981f40ac616fbdf46f46c9167b3c51f..e73235135a0605adea4aadf188b2712348fa181c 100644 --- a/ext_emconf.php +++ b/ext_emconf.php @@ -23,7 +23,7 @@ $EM_CONF[$_EXTKEY] = [ 'version' => '1.0.0', 'constraints' => [ 'depends' => [ - 'typo3' => '9.5.0-9.5.99', + 'typo3' => '9.5.0-10.4.99', ], 'conflicts' => [], 'suggests' => [],