From a5cbdcdccf3566f0d4f115d7ab7200765e5f98c6 Mon Sep 17 00:00:00 2001 From: Maksym Chubin <maksim.chubin@netzlabor.co> Date: Thu, 6 May 2021 10:14:00 +0300 Subject: [PATCH] [TASK] NL-3241 Change domain modeling --- Classes/Domain/Model/Menu.php | 161 +++++-------- Classes/Domain/Model/MenuGroup.php | 100 -------- Classes/Domain/Model/MenuInterface.php | 24 ++ Classes/Domain/Model/MenuItem.php | 155 ++++++------ Classes/Domain/Model/MenuItemContent.php | 10 + Classes/Domain/Model/MenuItemLink.php | 10 + Classes/Domain/Model/MenuItemPage.php | 29 +++ Classes/Domain/Model/MenuItemSubmenu.php | 10 + Classes/Domain/Model/MenuTrait.php | 83 +++++++ Classes/Domain/Model/Page.php | 106 +++++++++ .../Domain/Repository/MenuGroupRepository.php | 20 -- Classes/Domain/Repository/MenuRepository.php | 2 + Classes/Hooks/ItemsProcFunc.php | 5 +- .../Menu/Controller/RenderController.php | 38 +++ .../ViewHelpers/{ => Menu}/GetViewHelper.php | 10 +- Classes/ViewHelpers/Menu/RenderViewHelper.php | 42 ++++ .../Widget/Controller/ShowController.php | 63 ----- Classes/ViewHelpers/Widget/ShowViewHelper.php | 47 ---- Configuration/Extbase/Persistence/Classes.php | 34 +++ .../tx_nlmenubuilder_domain_model_menu.php | 74 ++---- ...x_nlmenubuilder_domain_model_menugroup.php | 146 ------------ ...tx_nlmenubuilder_domain_model_menuitem.php | 140 +++++------ ExtensionBuilder.json | 222 ++++++++++-------- Resources/Private/Language/locallang.xlf | 34 +-- ...csh_tx_nlmenubuilder_domain_model_menu.xlf | 10 +- ...tx_nlmenubuilder_domain_model_menuitem.xlf | 12 +- ...csh_tx_nlmenubuilder_domain_model_page.xlf | 17 ++ Resources/Private/Language/locallang_db.xlf | 42 ++-- Resources/Private/Partials/Menu.html | 8 +- .../Private/Partials/MenuItem/Content.html | 2 + Resources/Private/Partials/MenuItem/Link.html | 2 + Resources/Private/Partials/MenuItem/Page.html | 4 +- .../Private/Partials/MenuItem/Submenu.html | 5 +- .../ViewHelpers/Menu/Render/Index.html | 10 + .../ViewHelpers/Widget/Show/Index.html | 9 - .../ViewHelpers/Widget/Show/Show.html | 9 - ...x_nlmenubuilder_domain_model_menugroup.gif | Bin 5236 -> 0 bytes .../tx_nlmenubuilder_domain_model_page.gif | Bin 0 -> 230 bytes ext_emconf.php | 2 +- ext_tables.php | 6 +- ext_tables.sql | 28 +-- 41 files changed, 838 insertions(+), 893 deletions(-) delete mode 100644 Classes/Domain/Model/MenuGroup.php create mode 100644 Classes/Domain/Model/MenuInterface.php create mode 100644 Classes/Domain/Model/MenuItemContent.php create mode 100644 Classes/Domain/Model/MenuItemLink.php create mode 100644 Classes/Domain/Model/MenuItemPage.php create mode 100644 Classes/Domain/Model/MenuItemSubmenu.php create mode 100644 Classes/Domain/Model/MenuTrait.php create mode 100644 Classes/Domain/Model/Page.php delete mode 100644 Classes/Domain/Repository/MenuGroupRepository.php create mode 100644 Classes/ViewHelpers/Menu/Controller/RenderController.php rename Classes/ViewHelpers/{ => Menu}/GetViewHelper.php (89%) create mode 100644 Classes/ViewHelpers/Menu/RenderViewHelper.php delete mode 100644 Classes/ViewHelpers/Widget/Controller/ShowController.php delete mode 100644 Classes/ViewHelpers/Widget/ShowViewHelper.php create mode 100644 Configuration/Extbase/Persistence/Classes.php delete mode 100644 Configuration/TCA/tx_nlmenubuilder_domain_model_menugroup.php create mode 100644 Resources/Private/Language/locallang_csh_tx_nlmenubuilder_domain_model_page.xlf create mode 100644 Resources/Private/Templates/ViewHelpers/Menu/Render/Index.html delete mode 100644 Resources/Private/Templates/ViewHelpers/Widget/Show/Index.html delete mode 100644 Resources/Private/Templates/ViewHelpers/Widget/Show/Show.html delete mode 100644 Resources/Public/Icons/tx_nlmenubuilder_domain_model_menugroup.gif create mode 100644 Resources/Public/Icons/tx_nlmenubuilder_domain_model_page.gif diff --git a/Classes/Domain/Model/Menu.php b/Classes/Domain/Model/Menu.php index 323c092..ee51ae8 100644 --- a/Classes/Domain/Model/Menu.php +++ b/Classes/Domain/Model/Menu.php @@ -1,7 +1,11 @@ <?php +declare(strict_types=1); + namespace NL\NlMenubuilder\Domain\Model; +use TYPO3\CMS\Extbase\Persistence\ObjectStorage; + /*** * * This file is part of the "Menu Builder" Extension for TYPO3 CMS. @@ -9,65 +13,47 @@ namespace NL\NlMenubuilder\Domain\Model; * For the full copyright and license information, please read the * LICENSE.txt file that was distributed with this source code. * - * (c) 2021 + * (c) 2021 * ***/ /** * Menu */ -class Menu extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity +class Menu extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity implements MenuInterface { + use MenuTrait; + + const DEFAULT_TEMPLATE = 'Default'; /** * Name of the menu - * + * * @var string * @TYPO3\CMS\Extbase\Annotation\Validate("NotEmpty") */ protected $title = ''; /** - * menuGroup - * - * @var \NL\NlMenubuilder\Domain\Model\MenuGroup + * template + * + * @var string + * @TYPO3\CMS\Extbase\Annotation\Validate("NotEmpty") */ - protected $menuGroup = null; + protected $template = self::DEFAULT_TEMPLATE; /** - * menuItem - * - * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\NL\NlMenubuilder\Domain\Model\MenuItem> + * items + * + * @var ObjectStorage<MenuItem> * @TYPO3\CMS\Extbase\Annotation\ORM\Cascade("remove") */ - protected $menuItem = null; - - /** - * Returns the title - * - * @return string $title - */ - public function getTitle() - { - return $this->title; - } - - /** - * Sets the title - * - * @param string $title - * @return void - */ - public function setTitle($title) - { - $this->title = $title; - } + protected $items = null; /** * __construct */ public function __construct() { - //Do not remove the next line: It would break the functionality $this->initStorageObjects(); } @@ -77,123 +63,96 @@ class Menu extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity * Do not modify this method! * It will be rewritten on each save in the extension builder * You may modify the constructor of this class instead - * + * * @return void */ protected function initStorageObjects() { - $this->menuItem = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage(); + $this->items = $this->items ?: new 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 + * Returns the title + * + * @return string $title */ - public function getMenuItemSubmenus(): array + public function getTitle(): string { - return $this->getMenuItemByType(MenuItem::TYPE_SUBMENU); + return $this->title; } /** - * @param int $type - * @return array + * Sets the title + * + * @param string $title + * @return void */ - public function getMenuItemByType(int $type): array + public function setTitle(string $title): string { - if ($items = $this->getMenuItem()) { - return array_filter($items->toArray(), function ($item) use ($type) { - /** @var MenuItem $item */ - return $item->getType() === $type; - }); - } - - return []; + $this->title = $title; } /** - * Returns the menuGroup - * - * @return \NL\NlMenubuilder\Domain\Model\MenuGroup menuGroup + * Returns the template + * + * @return string $template */ - public function getMenuGroup() + public function getTemplate(): string { - return $this->menuGroup; + return $this->template; } /** - * Sets the menuGroup - * - * @param \NL\NlMenubuilder\Domain\Model\MenuGroup $menuGroup + * Sets the template + * + * @param string $template * @return void */ - public function setMenuGroup(\NL\NlMenubuilder\Domain\Model\MenuGroup $menuGroup) + public function setTemplate(string $template): void { - $this->menuGroup = $menuGroup; + $this->template = $template; } /** * Adds a MenuItem - * - * @param \NL\NlMenubuilder\Domain\Model\MenuItem $menuItem + * + * @param MenuItem $item * @return void */ - public function addMenuItem(\NL\NlMenubuilder\Domain\Model\MenuItem $menuItem) + public function addItem(MenuItem $item): void { - $this->menuItem->attach($menuItem); + $this->items->attach($item); } /** * Removes a MenuItem - * - * @param \NL\NlMenubuilder\Domain\Model\MenuItem $menuItemToRemove The MenuItem to be removed + * + * @param MenuItem $itemToRemove The MenuItem to be removed * @return void */ - public function removeMenuItem(\NL\NlMenubuilder\Domain\Model\MenuItem $menuItemToRemove) + public function removeItem(MenuItem $itemToRemove): void { - $this->menuItem->detach($menuItemToRemove); + $this->items->detach($itemToRemove); } /** - * Returns the menuItem - * - * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\NL\NlMenubuilder\Domain\Model\MenuItem> menuItem + * Returns the items + * + * @return ObjectStorage<MenuItem> items */ - public function getMenuItem() + public function getItems(): ?ObjectStorage { - return $this->menuItem; + return $this->items; } /** - * Sets the menuItem - * - * @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\NL\NlMenubuilder\Domain\Model\MenuItem> $menuItem + * Sets the items + * + * @param ObjectStorage<MenuItem> $items * @return void */ - public function setMenuItem(\TYPO3\CMS\Extbase\Persistence\ObjectStorage $menuItem) + public function setItems(ObjectStorage $items): void { - $this->menuItem = $menuItem; + $this->items = $items; } } diff --git a/Classes/Domain/Model/MenuGroup.php b/Classes/Domain/Model/MenuGroup.php deleted file mode 100644 index e37a5ab..0000000 --- a/Classes/Domain/Model/MenuGroup.php +++ /dev/null @@ -1,100 +0,0 @@ -<?php -namespace NL\NlMenubuilder\Domain\Model; - - -/*** - * - * This file is part of the "Menu Builder" Extension for TYPO3 CMS. - * - * For the full copyright and license information, please read the - * LICENSE.txt file that was distributed with this source code. - * - * (c) 2021 - * - ***/ -/** - * MenuGroup - */ -class MenuGroup extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity -{ - - /** - * Name of the menu group - * - * @var string - * @TYPO3\CMS\Extbase\Annotation\Validate("NotEmpty") - */ - protected $title = ''; - - /** - * Name of the template - * - * @var string - * @TYPO3\CMS\Extbase\Annotation\Validate("NotEmpty") - */ - protected $template = ''; - - /** - * __construct - */ - public function __construct() - { - - //Do not remove the next line: It would break the functionality - $this->initStorageObjects(); - } - - /** - * Initializes all ObjectStorage properties - * Do not modify this method! - * It will be rewritten on each save in the extension builder - * You may modify the constructor of this class instead - * - * @return void - */ - protected function initStorageObjects() - { - } - - /** - * Returns the title - * - * @return string title - */ - public function getTitle() - { - return $this->title; - } - - /** - * Sets the title - * - * @param string $title - * @return void - */ - public function setTitle($title) - { - $this->title = $title; - } - - /** - * Returns the template - * - * @return string title - */ - public function getTemplate() - { - return $this->template; - } - - /** - * Sets the template - * - * @param string $template - * @return void - */ - public function setTemplate($template) - { - $this->template = $template; - } -} diff --git a/Classes/Domain/Model/MenuInterface.php b/Classes/Domain/Model/MenuInterface.php new file mode 100644 index 0000000..bb1117f --- /dev/null +++ b/Classes/Domain/Model/MenuInterface.php @@ -0,0 +1,24 @@ +<?php + + +namespace NL\NlMenubuilder\Domain\Model; + + +use TYPO3\CMS\Extbase\Persistence\ObjectStorage; + +interface MenuInterface +{ + public function getTitle(): string; + + public function getItems(): ?ObjectStorage; + + public function getItemsByType(int $type): array; + + public function getPageItems(): array; + + public function getLinkItems(): array; + + public function getContentItems(): array; + + public function getSubmenuItems(): array; +} diff --git a/Classes/Domain/Model/MenuItem.php b/Classes/Domain/Model/MenuItem.php index 14db263..2f6aed4 100644 --- a/Classes/Domain/Model/MenuItem.php +++ b/Classes/Domain/Model/MenuItem.php @@ -1,7 +1,13 @@ <?php +declare(strict_types=1); namespace NL\NlMenubuilder\Domain\Model; + +use TYPO3\CMS\Extbase\Domain\Model\FileReference; +use TYPO3\CMS\Extbase\DomainObject\AbstractEntity; +use TYPO3\CMS\Extbase\Persistence\ObjectStorage; + /*** * * This file is part of the "Menu Builder" Extension for TYPO3 CMS. @@ -15,7 +21,7 @@ namespace NL\NlMenubuilder\Domain\Model; /** * MenuItem */ -class MenuItem extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity +class MenuItem extends AbstractEntity { const TYPE_PAGE = 0; const TYPE_LINK = 1; @@ -48,18 +54,11 @@ class MenuItem extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity /** * Optional link image * - * @var \TYPO3\CMS\Extbase\Domain\Model\FileReference + * @var FileReference * @TYPO3\CMS\Extbase\Annotation\ORM\Cascade("remove") */ protected $image = null; - /** - * page - * - * @var string - */ - protected $page = ''; - /** * link * @@ -75,12 +74,41 @@ class MenuItem extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity protected $content = ''; /** - * submenu + * items * - * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\NL\NlMenubuilder\Domain\Model\Menu> + * @var ObjectStorage<MenuItem> * @TYPO3\CMS\Extbase\Annotation\ORM\Cascade("remove") */ - protected $submenu = null; + protected $items = null; + + /** + * page + * + * @var Page + */ + protected $page = null; + + /** + * __construct + */ + public function __construct() + { + //Do not remove the next line: It would break the functionality + $this->initStorageObjects(); + } + + /** + * Initializes all ObjectStorage properties + * Do not modify this method! + * It will be rewritten on each save in the extension builder + * You may modify the constructor of this class instead + * + * @return void + */ + protected function initStorageObjects() + { + $this->items = $this->items ?: new ObjectStorage(); + } /** * Get type name of the menu item. @@ -108,7 +136,7 @@ class MenuItem extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity * * @return string $title */ - public function getTitle() + public function getTitle(): string { return $this->title; } @@ -119,7 +147,7 @@ class MenuItem extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity * @param string $title * @return void */ - public function setTitle($title) + public function setTitle(string $title): void { $this->title = $title; } @@ -129,7 +157,7 @@ class MenuItem extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity * * @return int $type */ - public function getType() + public function getType(): int { return $this->type; } @@ -140,7 +168,7 @@ class MenuItem extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity * @param int $type * @return void */ - public function setType($type) + public function setType(int $type): void { $this->type = $type; } @@ -150,7 +178,7 @@ class MenuItem extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity * * @return string $subtitle */ - public function getSubtitle() + public function getSubtitle(): string { return $this->subtitle; } @@ -161,7 +189,7 @@ class MenuItem extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity * @param string $subtitle * @return void */ - public function setSubtitle($subtitle) + public function setSubtitle(string $subtitle): void { $this->subtitle = $subtitle; } @@ -169,9 +197,9 @@ class MenuItem extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity /** * Returns the image * - * @return \TYPO3\CMS\Extbase\Domain\Model\FileReference $image + * @return FileReference $image */ - public function getImage() + public function getImage(): ?FileReference { return $this->image; } @@ -179,41 +207,20 @@ class MenuItem extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity /** * Sets the image * - * @param \TYPO3\CMS\Extbase\Domain\Model\FileReference $image + * @param FileReference $image * @return void */ - public function setImage(\TYPO3\CMS\Extbase\Domain\Model\FileReference $image) + public function setImage(FileReference $image): void { $this->image = $image; } - /** - * Returns the page - * - * @return string $page - */ - public function getPage() - { - return $this->page; - } - - /** - * Sets the page - * - * @param string $page - * @return void - */ - public function setPage($page) - { - $this->page = $page; - } - /** * Returns the link * * @return string $link */ - public function getLink() + public function getLink(): string { return $this->link; } @@ -224,7 +231,7 @@ class MenuItem extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity * @param string $link * @return void */ - public function setLink($link) + public function setLink(string $link): void { $this->link = $link; } @@ -234,7 +241,7 @@ class MenuItem extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity * * @return string $content */ - public function getContent() + public function getContent(): string { return $this->content; } @@ -245,74 +252,72 @@ class MenuItem extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity * @param string $content * @return void */ - public function setContent($content) + public function setContent(string $content): void { $this->content = $content; } /** - * __construct + * Adds a MenuItem + * + * @param MenuItem $item + * @return void */ - public function __construct() + public function addItem(MenuItem $item): void { - - //Do not remove the next line: It would break the functionality - $this->initStorageObjects(); + $this->items->attach($item); } /** - * Initializes all ObjectStorage properties - * Do not modify this method! - * It will be rewritten on each save in the extension builder - * You may modify the constructor of this class instead + * Removes a MenuItem * + * @param MenuItem $itemToRemove The MenuItem to be removed * @return void */ - protected function initStorageObjects() + public function removeItem(MenuItem $itemToRemove): void { - $this->submenu = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage(); + $this->items->detach($itemToRemove); } /** - * Adds a Menu + * Returns the items * - * @param \NL\NlMenubuilder\Domain\Model\Menu $submenu - * @return void + * @return ObjectStorage<MenuItem> $items */ - public function addSubmenu(\NL\NlMenubuilder\Domain\Model\Menu $submenu) + public function getItems(): ?ObjectStorage { - $this->submenu->attach($submenu); + return $this->items; } /** - * Removes a Menu + * Sets the items * - * @param \NL\NlMenubuilder\Domain\Model\Menu $submenuToRemove The Menu to be removed + * @param ObjectStorage<MenuItem> $items * @return void */ - public function removeSubmenu(\NL\NlMenubuilder\Domain\Model\Menu $submenuToRemove) + public function setItems(ObjectStorage $items): void { - $this->submenu->detach($submenuToRemove); + $this->items = $items; } /** - * Returns the submenu + * Returns the page * - * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\NL\NlMenubuilder\Domain\Model\Menu> $submenu + * @return Page $page */ - public function getSubmenu() + public function getPage(): ?Page { - return $this->submenu->current(); + return $this->page; } /** - * Sets the submenu + * Sets the page * - * @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\NL\NlMenubuilder\Domain\Model\Menu> $submenu + * @param Page $page * @return void */ - public function setSubmenu(\TYPO3\CMS\Extbase\Persistence\ObjectStorage $submenu) + public function setPage(Page $page): void { - $this->submenu = $submenu; + $this->page = $page; } } diff --git a/Classes/Domain/Model/MenuItemContent.php b/Classes/Domain/Model/MenuItemContent.php new file mode 100644 index 0000000..4146f12 --- /dev/null +++ b/Classes/Domain/Model/MenuItemContent.php @@ -0,0 +1,10 @@ +<?php + + +namespace NL\NlMenubuilder\Domain\Model; + + +class MenuItemContent extends MenuItem +{ + +} diff --git a/Classes/Domain/Model/MenuItemLink.php b/Classes/Domain/Model/MenuItemLink.php new file mode 100644 index 0000000..bdf7f31 --- /dev/null +++ b/Classes/Domain/Model/MenuItemLink.php @@ -0,0 +1,10 @@ +<?php + + +namespace NL\NlMenubuilder\Domain\Model; + + +class MenuItemLink extends MenuItem +{ + +} diff --git a/Classes/Domain/Model/MenuItemPage.php b/Classes/Domain/Model/MenuItemPage.php new file mode 100644 index 0000000..f64b1a7 --- /dev/null +++ b/Classes/Domain/Model/MenuItemPage.php @@ -0,0 +1,29 @@ +<?php + + +namespace NL\NlMenubuilder\Domain\Model; + + +use TYPO3\CMS\Extbase\Reflection\ObjectAccess; + +class MenuItemPage extends MenuItem +{ + /** + * @return string + */ + public function getTitle(): string + { + return $this->title ?: + ObjectAccess::getPropertyPath($this, 'page.navTitle') ?: + ObjectAccess::getPropertyPath($this, 'page.title'); + } + + /** + * @return string + */ + public function getSubtitle(): string + { + return $this->subtitle ?: + ObjectAccess::getPropertyPath($this, 'page.subtitle'); + } +} diff --git a/Classes/Domain/Model/MenuItemSubmenu.php b/Classes/Domain/Model/MenuItemSubmenu.php new file mode 100644 index 0000000..36ed1d5 --- /dev/null +++ b/Classes/Domain/Model/MenuItemSubmenu.php @@ -0,0 +1,10 @@ +<?php + + +namespace NL\NlMenubuilder\Domain\Model; + + +class MenuItemSubmenu extends MenuItem implements MenuInterface +{ + use MenuTrait; +} diff --git a/Classes/Domain/Model/MenuTrait.php b/Classes/Domain/Model/MenuTrait.php new file mode 100644 index 0000000..4318402 --- /dev/null +++ b/Classes/Domain/Model/MenuTrait.php @@ -0,0 +1,83 @@ +<?php + + +namespace NL\NlMenubuilder\Domain\Model; + + +use TYPO3\CMS\Extbase\Persistence\ObjectStorage; + +trait MenuTrait +{ + /** + * Returns the title + * + * @return string $title + */ + public function getTitle(): string + { + return $this->title; + } + + /** + * Returns the items + * + * @return ObjectStorage<MenuItem> items + */ + public function getItems(): ?ObjectStorage + { + return $this->items; + } + + /** + * @return array + */ + public function getPageItems(): array + { + return $this->getItemsByType(MenuItem::TYPE_PAGE); + } + + /** + * @return array + */ + public function getLinkItems(): array + { + return $this->getItemsByType(MenuItem::TYPE_LINK); + } + + /** + * @return array + */ + public function getContentItems(): array + { + return $this->getItemsByType(MenuItem::TYPE_CONTENT); + } + + /** + * @return array + */ + public function getSubmenuItems(): array + { + return $this->getItemsByType(MenuItem::TYPE_SUBMENU); + } + + /** + * @param int $type + * @return array + */ + public function getItemsByType(int $type): array + { + if ($items = $this->getItems()) { + + return array_filter( + $items->toArray(), + function ($item) use($type) { + + /** @var MenuItem $item */ + return $item->getType() === $type; + } + ); + } + + return []; + } +} diff --git a/Classes/Domain/Model/Page.php b/Classes/Domain/Model/Page.php new file mode 100644 index 0000000..f557b2b --- /dev/null +++ b/Classes/Domain/Model/Page.php @@ -0,0 +1,106 @@ +<?php +declare(strict_types=1); + +namespace NL\NlMenubuilder\Domain\Model; + + +/*** + * + * This file is part of the "Menu Builder" Extension for TYPO3 CMS. + * + * For the full copyright and license information, please read the + * LICENSE.txt file that was distributed with this source code. + * + * (c) 2021 + * + ***/ +/** + * Page + */ +class Page extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity +{ + + /** + * title + * + * @var string + */ + protected $title = ''; + + /** + * navTitle + * + * @var string + */ + protected $navTitle = ''; + + /** + * subtitle + * + * @var string + */ + protected $subtitle = ''; + + /** + * Returns the title + * + * @return string $title + */ + public function getTitle() + { + return $this->title; + } + + /** + * Sets the title + * + * @param string $title + * @return void + */ + public function setTitle($title) + { + $this->title = $title; + } + + /** + * Returns the navTitle + * + * @return string $navTitle + */ + public function getNavTitle() + { + return $this->navTitle; + } + + /** + * Sets the navTitle + * + * @param string $navTitle + * @return void + */ + public function setNavTitle($navTitle) + { + $this->navTitle = $navTitle; + } + + /** + * Returns the subtitle + * + * @return string $subtitle + */ + public function getSubtitle() + { + return $this->subtitle; + } + + /** + * Sets the subtitle + * + * @param string $subtitle + * @return void + */ + public function setSubtitle($subtitle) + { + $this->subtitle = $subtitle; + } +} diff --git a/Classes/Domain/Repository/MenuGroupRepository.php b/Classes/Domain/Repository/MenuGroupRepository.php deleted file mode 100644 index b399d90..0000000 --- a/Classes/Domain/Repository/MenuGroupRepository.php +++ /dev/null @@ -1,20 +0,0 @@ -<?php -namespace NL\NlMenubuilder\Domain\Repository; - - -/*** - * - * This file is part of the "Menu Builder" Extension for TYPO3 CMS. - * - * For the full copyright and license information, please read the - * LICENSE.txt file that was distributed with this source code. - * - * (c) 2021 - * - ***/ -/** - * The repository for MenuGroups - */ -class MenuGroupRepository extends \TYPO3\CMS\Extbase\Persistence\Repository -{ -} diff --git a/Classes/Domain/Repository/MenuRepository.php b/Classes/Domain/Repository/MenuRepository.php index 12eb34c..91cc711 100644 --- a/Classes/Domain/Repository/MenuRepository.php +++ b/Classes/Domain/Repository/MenuRepository.php @@ -1,4 +1,6 @@ <?php +declare(strict_types=1); + namespace NL\NlMenubuilder\Domain\Repository; diff --git a/Classes/Hooks/ItemsProcFunc.php b/Classes/Hooks/ItemsProcFunc.php index e265887..376f258 100644 --- a/Classes/Hooks/ItemsProcFunc.php +++ b/Classes/Hooks/ItemsProcFunc.php @@ -2,7 +2,6 @@ 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; @@ -11,7 +10,7 @@ class ItemsProcFunc { protected $extensionKey = 'nl_menubuilder'; - protected $langPrefix = 'LLL:EXT:nl_menubuilder/Resources/Private/Language/locallang_db.xlf:tx_nlmenubuilder_domain_model_menugroup.template.I.'; + protected $langPrefix = 'LLL:EXT:nl_menubuilder/Resources/Private/Language/locallang_db.xlf:tx_nlmenubuilder_domain_model_menu.template.I.'; /** * @var ObjectManager @@ -44,7 +43,7 @@ class ItemsProcFunc $templates = []; foreach ($paths[TemplatePaths::CONFIG_TEMPLATEROOTPATHS] as $templatePath) { - $templatePath .= 'ViewHelpers' . DIRECTORY_SEPARATOR . 'Widget'. DIRECTORY_SEPARATOR . 'Show'; + $templatePath .= 'ViewHelpers' . DIRECTORY_SEPARATOR . 'Menu'. DIRECTORY_SEPARATOR . 'Render'; $foundTemplates = GeneralUtility::getFilesInDir($templatePath, 'html'); $templates = array_merge($templates, $foundTemplates); diff --git a/Classes/ViewHelpers/Menu/Controller/RenderController.php b/Classes/ViewHelpers/Menu/Controller/RenderController.php new file mode 100644 index 0000000..b23855c --- /dev/null +++ b/Classes/ViewHelpers/Menu/Controller/RenderController.php @@ -0,0 +1,38 @@ +<?php + +namespace NL\NlMenubuilder\ViewHelpers\Menu\Controller; + +use NL\NlMenubuilder\Domain\Model\Menu; +use NL\NlMenubuilder\Domain\Repository\MenuRepository; +use TYPO3\CMS\Fluid\Core\Widget\AbstractWidgetController; + +class RenderController extends AbstractWidgetController +{ + /** + * @var MenuRepository + */ + protected $menuRepository; + + /** + * Inject menu repository + * + * @param MenuRepository $repository + */ + public function injectMenuRepository(MenuRepository $repository) + { + $this->menuRepository = $repository; + } + + /** + * @return string + */ + public function indexAction(): string + { + /** @var Menu $menu */ + $menu = $this->menuRepository->findByIdentifier($this->widgetConfiguration['uid']); + + $this->view->assign('menu', $menu); + + return $this->view->render($menu ? $menu->getTemplate() : Menu::DEFAULT_TEMPLATE); + } +} diff --git a/Classes/ViewHelpers/GetViewHelper.php b/Classes/ViewHelpers/Menu/GetViewHelper.php similarity index 89% rename from Classes/ViewHelpers/GetViewHelper.php rename to Classes/ViewHelpers/Menu/GetViewHelper.php index 8ad70e6..a2339f9 100644 --- a/Classes/ViewHelpers/GetViewHelper.php +++ b/Classes/ViewHelpers/Menu/GetViewHelper.php @@ -1,7 +1,6 @@ <?php - -namespace NL\NlMenubuilder\ViewHelpers; +namespace NL\NlMenubuilder\ViewHelpers\Menu; use FluidTYPO3\Vhs\Traits\TemplateVariableViewHelperTrait; use NL\NlMenubuilder\Domain\Repository\MenuRepository; @@ -11,7 +10,6 @@ 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; @@ -33,7 +31,7 @@ class GetViewHelper extends AbstractViewHelper public function initializeArguments(): void { $this->registerAsArgument(); - $this->registerArgument('uuid', 'int', 'UUID of the menu', true, 0); + $this->registerArgument('uid', 'int', 'UID of the menu', true, 0); } /** @@ -52,12 +50,10 @@ class GetViewHelper extends AbstractViewHelper $menuRepository = $objectManager->get(MenuRepository::class); return static::renderChildrenWithVariableOrReturnInputStatic( - $menuRepository->findByUid($arguments['uuid'] ?? 0), + $menuRepository->findByUid($arguments['uid'] ?? 0), $arguments['as'], $renderingContext, $renderChildrenClosure ); - - } } diff --git a/Classes/ViewHelpers/Menu/RenderViewHelper.php b/Classes/ViewHelpers/Menu/RenderViewHelper.php new file mode 100644 index 0000000..58bedd5 --- /dev/null +++ b/Classes/ViewHelpers/Menu/RenderViewHelper.php @@ -0,0 +1,42 @@ +<?php + +namespace NL\NlMenubuilder\ViewHelpers\Menu; + +use NL\NlMenubuilder\ViewHelpers\Menu\Controller\RenderController; +use TYPO3\CMS\Fluid\Core\Widget\AbstractWidgetViewHelper; + +class RenderViewHelper extends AbstractWidgetViewHelper +{ + /** + * @var RenderController + */ + protected $controller; + + /** + * Inject controller + * + * @param RenderController $controller + */ + public function injectController(RenderController $controller): void + { + $this->controller = $controller; + } + + /** + * Initialize arguments + * + * @return void + */ + public function initializeArguments(): void + { + $this->registerArgument('uid', 'int', 'UID of the menu', true); + } + + /** + * @return \TYPO3\CMS\Extbase\Mvc\ResponseInterface + */ + public function render(): \TYPO3\CMS\Extbase\Mvc\ResponseInterface + { + return $this->initiateSubRequest(); + } +} diff --git a/Classes/ViewHelpers/Widget/Controller/ShowController.php b/Classes/ViewHelpers/Widget/Controller/ShowController.php deleted file mode 100644 index b34c6e7..0000000 --- a/Classes/ViewHelpers/Widget/Controller/ShowController.php +++ /dev/null @@ -1,63 +0,0 @@ -<?php - -namespace NL\NlMenubuilder\ViewHelpers\Widget\Controller; - -use NL\NlMenubuilder\Domain\Model\Menu; -use NL\NlMenubuilder\Domain\Repository\MenuRepository; -use TYPO3\CMS\Fluid\Core\Widget\AbstractWidgetController; - -class ShowController extends AbstractWidgetController -{ - /** - * Model object instance of root menu. - * - * @var Menu - */ - protected $menu; - - /** - * Menu group template. - * - * @var string - */ - protected $template; - - /** - * @var MenuRepository - */ - protected $menuRepository; - - /** - * Inject menu repository - * - * @param MenuRepository $controller - */ - public function injectMenuRepository(MenuRepository $menuRepository) - { - $this->menuRepository = $menuRepository; - } - - /** - * Main action - */ - public function indexAction() - { - $this->view->assign('menu', $this->menu); - - return $this->view->render($this->template); - } - - /** - * @return array - */ - public function initializeAction() - { - $uuid = $this->widgetConfiguration['uuid'] ?? 0; - $menu = $this->menuRepository->findByUid($uuid); - - if (!is_null($menu)) { - $this->menu = $menu; - $this->template = $this->menu->getMenuGroup()->getTemplate(); - } - } -} diff --git a/Classes/ViewHelpers/Widget/ShowViewHelper.php b/Classes/ViewHelpers/Widget/ShowViewHelper.php deleted file mode 100644 index 28e979f..0000000 --- a/Classes/ViewHelpers/Widget/ShowViewHelper.php +++ /dev/null @@ -1,47 +0,0 @@ -<?php - -namespace NL\NlMenubuilder\ViewHelpers\Widget; - -use NL\NlMenubuilder\ViewHelpers\Widget\Controller\ShowController; -use TYPO3\CMS\Fluid\Core\Widget\AbstractWidgetViewHelper; - -class ShowViewHelper extends AbstractWidgetViewHelper -{ - /** - * @var ShowController - */ - protected $controller; - - /** - * Inject controller - * - * @param ShowController $controller - */ - public function injectController(ShowController $controller) - { - $this->controller = $controller; - } - - /** - * Initialize arguments - * - * @return void - */ - public function initializeArguments() - { - $this->registerArgument('uuid', 'int', 'UUID of the menu', true, 0); - } - - /** - * Render everything - * - * @param \TYPO3\CMS\Extbase\Persistence\QueryResultInterface $objects - * @param int $uuid - * @param string $as - * @return string - */ - public function render() - { - return $this->initiateSubRequest(); - } -} diff --git a/Configuration/Extbase/Persistence/Classes.php b/Configuration/Extbase/Persistence/Classes.php new file mode 100644 index 0000000..10f7bf4 --- /dev/null +++ b/Configuration/Extbase/Persistence/Classes.php @@ -0,0 +1,34 @@ +<?php + +declare(strict_types = 1); + +return [ + \NL\NlMenubuilder\Domain\Model\Page::class => [ + 'tableName' => 'pages', + ], + \NL\NlMenubuilder\Domain\Model\MenuItem::class => [ + 'tableName' => 'tx_nlmenubuilder_domain_model_menuitem', + 'subclasses' => [ + \NL\NlMenubuilder\Domain\Model\MenuItem::TYPE_PAGE => \NL\NlMenubuilder\Domain\Model\MenuItemPage::class, + \NL\NlMenubuilder\Domain\Model\MenuItem::TYPE_CONTENT => \NL\NlMenubuilder\Domain\Model\MenuItemContent::class, + \NL\NlMenubuilder\Domain\Model\MenuItem::TYPE_LINK => \NL\NlMenubuilder\Domain\Model\MenuItemLink::class, + \NL\NlMenubuilder\Domain\Model\MenuItem::TYPE_SUBMENU => \NL\NlMenubuilder\Domain\Model\MenuItemSubmenu::class, + ] + ], + \NL\NlMenubuilder\Domain\Model\MenuItemPage::class => [ + 'tableName' => 'tx_nlmenubuilder_domain_model_menuitem', + 'recordType' => \NL\NlMenubuilder\Domain\Model\MenuItem::TYPE_PAGE + ], + \NL\NlMenubuilder\Domain\Model\MenuItemContent::class => [ + 'tableName' => 'tx_nlmenubuilder_domain_model_menuitem', + 'recordType' => \NL\NlMenubuilder\Domain\Model\MenuItem::TYPE_CONTENT + ], + \NL\NlMenubuilder\Domain\Model\MenuItemLink::class => [ + 'tableName' => 'tx_nlmenubuilder_domain_model_menuitem', + 'recordType' => \NL\NlMenubuilder\Domain\Model\MenuItem::TYPE_LINK + ], + \NL\NlMenubuilder\Domain\Model\MenuItemSubmenu::class => [ + 'tableName' => 'tx_nlmenubuilder_domain_model_menuitem', + 'recordType' => \NL\NlMenubuilder\Domain\Model\MenuItem::TYPE_SUBMENU + ], +]; diff --git a/Configuration/TCA/tx_nlmenubuilder_domain_model_menu.php b/Configuration/TCA/tx_nlmenubuilder_domain_model_menu.php index 2d0d3d1..1a2d499 100644 --- a/Configuration/TCA/tx_nlmenubuilder_domain_model_menu.php +++ b/Configuration/TCA/tx_nlmenubuilder_domain_model_menu.php @@ -16,17 +16,15 @@ return [ 'delete' => 'deleted', 'enablecolumns' => [ 'disabled' => 'hidden', - 'starttime' => 'starttime', - 'endtime' => 'endtime', ], - 'searchFields' => 'title', + 'searchFields' => 'title,template', 'iconfile' => 'EXT:nl_menubuilder/Resources/Public/Icons/tx_nlmenubuilder_domain_model_menu.gif' ], 'interface' => [ - 'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, title, menu_group, menu_item', + 'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, title, template, items', ], 'types' => [ - '1' => ['showitem' => "menu_group, title, --div--;$ll:menu.tabs.menu_item, menu_item, --div--;$ll:tabs.access, starttime, endtime, sys_language_uid, l10n_parent, l10n_diffsource, hidden"], + '1' => ['showitem' => "title, template, --div--;$ll:menu.tabs.menu_item, items, --div--;$ll:tabs.access, starttime, endtime, sys_language_uid, l10n_parent, l10n_diffsource, hidden"], ], 'columns' => [ 'sys_language_uid' => [ @@ -44,7 +42,8 @@ return [ ] ], 'default' => 0, - ],], + ], + ], 'l10n_parent' => [ 'displayCond' => 'FIELD:sys_language_uid:>:0', 'exclude' => true, @@ -88,35 +87,6 @@ return [ ], ], ], - 'starttime' => [ - 'exclude' => true, - 'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.starttime', - 'config' => [ - 'type' => 'input', - 'renderType' => 'inputDateTime', - 'eval' => 'datetime,int', - 'default' => 0, - 'behaviour' => [ - 'allowLanguageSynchronization' => true - ] - ], - ], - 'endtime' => [ - 'exclude' => true, - 'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.endtime', - 'config' => [ - 'type' => 'input', - 'renderType' => 'inputDateTime', - 'eval' => 'datetime,int', - 'default' => 0, - 'range' => [ - 'upper' => mktime(0, 0, 0, 1, 1, 2038) - ], - 'behaviour' => [ - 'allowLanguageSynchronization' => true - ] - ], - ], 'title' => [ 'exclude' => false, @@ -127,39 +97,36 @@ return [ 'eval' => 'trim,required' ], ], - 'menu_group' => [ + 'template' => [ 'exclude' => false, - 'label' => "$ll:tx_nlmenubuilder_domain_model_menu.menu_group", + 'label' => "$ll:tx_nlmenubuilder_domain_model_menu.template", 'config' => [ 'type' => 'select', 'renderType' => 'selectSingle', - 'foreign_table' => 'tx_nlmenubuilder_domain_model_menugroup', - 'default' => 0, - 'minitems' => 0, - 'maxitems' => 1, - 'eval' => 'required' + 'items' => [], + 'itemsProcFunc' => 'NL\NlMenubuilder\Hooks\ItemsProcFunc->loadMenuGroupTemplates' ], ], - 'menu_item' => [ - 'exclude' => true, - 'label' => "$ll:tx_nlmenubuilder_domain_model_menu.menu_item", + 'items' => [ + 'exclude' => false, + 'label' => "$ll:tx_nlmenubuilder_domain_model_menu.items", 'config' => [ 'type' => 'inline', - 'allowed' => 'menuitem', 'foreign_table' => 'tx_nlmenubuilder_domain_model_menuitem', + 'foreign_field' => 'menuitem', 'foreign_sortby' => 'sorting', - 'foreign_field' => 'menu', - 'minitems' => 0, + 'minitems' => 1, 'maxitems' => 99, 'appearance' => [ 'collapseAll' => true, 'expandSingle' => true, 'levelLinksPosition' => 'bottom', 'useSortable' => true, - 'showSynchronizationLink' => 1, - 'showPossibleLocalizationRecords' => 1, - 'showAllLocalizationLink' => 1, + 'showPossibleLocalizationRecords' => true, + 'showRemovedLocalizationRecords' => true, + 'showAllLocalizationLink' => true, + 'showSynchronizationLink' => true, 'enabledControls' => [ 'info' => false, ] @@ -168,10 +135,5 @@ return [ ], - 'menuitem' => [ - 'config' => [ - 'type' => 'passthrough', - ], - ], ], ]; diff --git a/Configuration/TCA/tx_nlmenubuilder_domain_model_menugroup.php b/Configuration/TCA/tx_nlmenubuilder_domain_model_menugroup.php deleted file mode 100644 index 016fdad..0000000 --- a/Configuration/TCA/tx_nlmenubuilder_domain_model_menugroup.php +++ /dev/null @@ -1,146 +0,0 @@ -<?php - -$ll = 'LLL:EXT:nl_menubuilder/Resources/Private/Language/locallang_db.xlf'; - -return [ - 'ctrl' => [ - 'title' => "$ll:tx_nlmenubuilder_domain_model_menugroup", - 'label' => 'title', - 'tstamp' => 'tstamp', - 'crdate' => 'crdate', - 'cruser_id' => 'cruser_id', - 'versioningWS' => true, - 'languageField' => 'sys_language_uid', - 'transOrigPointerField' => 'l10n_parent', - 'transOrigDiffSourceField' => 'l10n_diffsource', - 'delete' => 'deleted', - 'enablecolumns' => [ - 'disabled' => 'hidden', - 'starttime' => 'starttime', - 'endtime' => 'endtime', - ], - 'searchFields' => 'title', - 'iconfile' => 'EXT:nl_menubuilder/Resources/Public/Icons/tx_nlmenubuilder_domain_model_menugroup.gif' - ], - 'interface' => [ - 'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, title, template', - ], - 'types' => [ - '1' => ['showitem' => "title, template, --div--;$ll:tabs.access, starttime, endtime, sys_language_uid, l10n_parent, l10n_diffsource, hidden"], - ], - 'columns' => [ - 'sys_language_uid' => [ - 'exclude' => true, - 'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.language', - 'config' => [ - 'type' => 'select', - 'renderType' => 'selectSingle', - 'special' => 'languages', - 'items' => [ - [ - 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.allLanguages', - -1, - 'flags-multiple' - ] - ], - 'default' => 0, - ], - ], - 'l10n_parent' => [ - 'displayCond' => 'FIELD:sys_language_uid:>:0', - 'exclude' => true, - 'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.l18n_parent', - 'config' => [ - 'type' => 'select', - 'renderType' => 'selectSingle', - 'default' => 0, - 'items' => [ - ['', 0], - ], - 'foreign_table' => 'tx_nlmenubuilder_domain_model_menugroup', - 'foreign_table_where' => 'AND {#tx_nlmenubuilder_domain_model_menugroup}.{#pid}=###CURRENT_PID### AND {#tx_nlmenubuilder_domain_model_menugroup}.{#sys_language_uid} IN (-1,0)', - ], - ], - 'l10n_diffsource' => [ - 'config' => [ - 'type' => 'passthrough', - ], - ], - 't3ver_label' => [ - 'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.versionLabel', - 'config' => [ - 'type' => 'input', - 'size' => 30, - 'max' => 255, - ], - ], - 'hidden' => [ - 'exclude' => true, - 'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.visible', - 'config' => [ - 'type' => 'check', - 'renderType' => 'checkboxToggle', - 'items' => [ - [ - 0 => '', - 1 => '', - 'invertStateDisplay' => true - ] - ], - ], - ], - 'starttime' => [ - 'exclude' => true, - 'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.starttime', - 'config' => [ - 'type' => 'input', - 'renderType' => 'inputDateTime', - 'eval' => 'datetime,int', - 'default' => 0, - 'behaviour' => [ - 'allowLanguageSynchronization' => true - ] - ], - ], - 'endtime' => [ - 'exclude' => true, - 'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.endtime', - 'config' => [ - 'type' => 'input', - 'renderType' => 'inputDateTime', - 'eval' => 'datetime,int', - 'default' => 0, - 'range' => [ - 'upper' => mktime(0, 0, 0, 1, 1, 2038) - ], - 'behaviour' => [ - 'allowLanguageSynchronization' => true - ] - ], - ], - - 'title' => [ - 'exclude' => false, - 'label' => "$ll:tx_nlmenubuilder_domain_model_menugroup.title", - 'config' => [ - 'type' => 'input', - 'size' => 30, - 'eval' => 'trim,required' - ], - ], - - 'template' => [ - 'exclude' => false, - 'label' => "$ll:tx_nlmenubuilder_domain_model_menugroup.template", - 'config' => [ - 'type' => 'select', - 'renderType' => 'selectSingle', - 'items' => [ - ['-', ''] - ], - 'itemsProcFunc' => 'NL\NlMenubuilder\Hooks\ItemsProcFunc->loadMenuGroupTemplates' - ], - ], - - ], -]; diff --git a/Configuration/TCA/tx_nlmenubuilder_domain_model_menuitem.php b/Configuration/TCA/tx_nlmenubuilder_domain_model_menuitem.php index e538760..08384b1 100644 --- a/Configuration/TCA/tx_nlmenubuilder_domain_model_menuitem.php +++ b/Configuration/TCA/tx_nlmenubuilder_domain_model_menuitem.php @@ -17,26 +17,37 @@ return [ 'delete' => 'deleted', 'enablecolumns' => [ 'disabled' => 'hidden', - 'starttime' => 'starttime', - 'endtime' => 'endtime', ], - 'searchFields' => 'title,subtitle,page,link,content', + 'searchFields' => 'title,subtitle,link,content', 'iconfile' => 'EXT:nl_menubuilder/Resources/Public/Icons/tx_nlmenubuilder_domain_model_menuitem.gif', 'type' => 'type', 'typeicon_column' => 'type', 'typeicon_classes' => [ 'default' => 'ext-menubuilder-menuitem-type-page', + '0' => 'ext-menubuilder-menuitem-type-page', '1' => 'ext-menubuilder-menuitem-type-link', '2' => 'ext-menubuilder-menuitem-type-content', '3' => 'ext-menubuilder-menuitem-type-submenu', ], + 'hideTable' => 1, + ], + 'interface' => [ + 'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, type, title, subtitle, image, link, content, items, page', ], - 'interface' => ['showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, type, title, subtitle, image, page, link, content'], 'types' => [ - '0' => ['showitem' => "type, title, subtitle, page, image, $accessTab"], // page - '1' => ['showitem' => "type, title, subtitle, image, link, $accessTab"], // link + '0' => [ + 'showitem' => "type, title, page, subtitle, image, $accessTab", + 'columnsOverrides' => [ + 'title' => [ + 'config' => [ + 'eval' => 'trim', + ], + ], + ], + ], // page + '1' => ['showitem' => "type, title, link, subtitle, image, $accessTab"], // link '2' => ['showitem' => "type, title, content, $accessTab"], // content - '3' => ['showitem' => "type, title, submenu, $accessTab"], // submenu + '3' => ['showitem' => "type, title, items, $accessTab"], // submenu ], 'columns' => [ 'sys_language_uid' => [ @@ -99,35 +110,7 @@ return [ ], ], ], - 'starttime' => [ - 'exclude' => true, - 'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.starttime', - 'config' => [ - 'type' => 'input', - 'renderType' => 'inputDateTime', - 'eval' => 'datetime,int', - 'default' => 0, - 'behaviour' => [ - 'allowLanguageSynchronization' => true - ] - ], - ], - 'endtime' => [ - 'exclude' => true, - 'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.endtime', - 'config' => [ - 'type' => 'input', - 'renderType' => 'inputDateTime', - 'eval' => 'datetime,int', - 'default' => 0, - 'range' => [ - 'upper' => mktime(0, 0, 0, 1, 1, 2038) - ], - 'behaviour' => [ - 'allowLanguageSynchronization' => true - ] - ], - ], + 'type' => [ 'exclude' => false, 'label' => "$ll:tx_nlmenubuilder_domain_model_menuitem.type", @@ -220,25 +203,6 @@ return [ ), ], - 'page' => [ - 'exclude' => false, - 'label' => "$ll:tx_nlmenubuilder_domain_model_menuitem.page", - 'config' => [ - 'type' => 'group', - 'internal_type' => 'db', - 'allowed' => 'pages', - 'maxitems' => 1, - 'minitems' => 1, - 'size' => 1, - 'default' => 0, - 'suggestOptions' => [ - 'default' => [ - 'additionalSearchFields' => 'nav_title, alias, url', - 'addWhere' => 'AND pages.doktype IN (1, 3, 4)' - ] - ] - ], - ], 'link' => [ 'exclude' => false, 'label' => "$ll:tx_nlmenubuilder_domain_model_menuitem.link", @@ -280,32 +244,49 @@ return [ ] ], ], - ], - 'submenu' => [ - 'exclude' => true, - 'label' => "$ll:tx_nlmenubuilder_domain_model_menuitem.submenu", + 'items' => [ + 'exclude' => false, + 'label' => "$ll:tx_nlmenubuilder_domain_model_menuitem.items", 'config' => [ - 'type' => 'select', - 'renderType' => 'selectMultipleSideBySide', - 'foreign_table' => 'tx_nlmenubuilder_domain_model_menu', - 'size' => 10, - 'autoSizeMax' => 30, - 'maxitems' => 1, + 'type' => 'inline', + 'foreign_table' => 'tx_nlmenubuilder_domain_model_menuitem', + 'foreign_field' => 'menuitem', + 'foreign_sortby' => 'sorting', 'minitems' => 1, - 'multiple' => 0, - 'fieldControl' => [ - 'editPopup' => [ - 'disabled' => false, - ], - 'addRecord' => [ - 'disabled' => false, - ], - 'listModule' => [ - 'disabled' => true, - ], + 'maxitems' => 99, + 'appearance' => [ + 'collapseAll' => true, + 'expandSingle' => true, + 'levelLinksPosition' => 'bottom', + 'useSortable' => true, + 'showPossibleLocalizationRecords' => true, + 'showRemovedLocalizationRecords' => true, + 'showAllLocalizationLink' => true, + 'showSynchronizationLink' => true, + 'enabledControls' => [ + 'info' => false, + ] ], - 'enableMultiSelectFilterTextfield' => true, + ], + ], + 'page' => [ + 'exclude' => false, + 'label' => "$ll:tx_nlmenubuilder_domain_model_menuitem.page", + 'config' => [ + 'type' => 'group', + 'internal_type' => 'db', + 'allowed' => 'pages', + 'maxitems' => 1, + 'minitems' => 1, + 'size' => 1, + 'default' => 0, + 'suggestOptions' => [ + 'default' => [ + 'additionalSearchFields' => 'nav_title, alias, url', + 'addWhere' => 'AND pages.doktype IN (1, 3, 4)' + ] + ] ], ], @@ -315,5 +296,10 @@ return [ 'type' => 'passthrough', ], ], + 'menuitem' => [ + 'config' => [ + 'type' => 'passthrough', + ], + ], ], ]; diff --git a/ExtensionBuilder.json b/ExtensionBuilder.json index a3b783c..de7b5e4 100644 --- a/ExtensionBuilder.json +++ b/ExtensionBuilder.json @@ -3,8 +3,8 @@ { "config": { "position": [ - 982, - 274 + 339, + 152 ] }, "name": "New Model Object", @@ -21,7 +21,7 @@ "objectsettings": { "addDeletedField": true, "addHiddenField": true, - "addStarttimeEndtimeFields": true, + "addStarttimeEndtimeFields": false, "aggregateRoot": true, "categorizable": false, "description": "", @@ -43,6 +43,17 @@ "propertyName": "title", "propertyType": "String", "uid": "1605171702573" + }, + { + "allowedFileTypes": "", + "maxItems": "1", + "propertyDescription": "", + "propertyIsExcludeField": false, + "propertyIsL10nModeExclude": false, + "propertyIsRequired": true, + "propertyName": "template", + "propertyType": "String", + "uid": "1234520526980" } ] }, @@ -53,18 +64,7 @@ "lazyLoading": false, "propertyIsExcludeField": false, "relationDescription": "", - "relationName": "menuGroup", - "relationType": "manyToOne", - "relationWire": "[wired]", - "renderType": "selectSingle", - "uid": "910633819500" - }, - { - "foreignRelationClass": "", - "lazyLoading": false, - "propertyIsExcludeField": false, - "relationDescription": "", - "relationName": "menuItem", + "relationName": "items", "relationType": "zeroToMany", "relationWire": "[wired]", "renderType": "inline", @@ -77,59 +77,8 @@ { "config": { "position": [ - 1258, - 14 - ] - }, - "name": "New Model Object", - "value": { - "actionGroup": { - "_default0_list": false, - "_default1_show": false, - "_default2_new_create": false, - "_default3_edit_update": false, - "_default4_delete": false, - "customActions": [] - }, - "name": "MenuGroup", - "objectsettings": { - "addDeletedField": true, - "addHiddenField": true, - "addStarttimeEndtimeFields": true, - "aggregateRoot": true, - "categorizable": false, - "description": "", - "mapToTable": "", - "parentClass": "", - "sorting": false, - "type": "Entity", - "uid": "908718443858" - }, - "propertyGroup": { - "properties": [ - { - "allowedFileTypes": "", - "maxItems": "1", - "propertyDescription": "Name of the menu group", - "propertyIsExcludeField": false, - "propertyIsL10nModeExclude": false, - "propertyIsRequired": false, - "propertyName": "title", - "propertyType": "String", - "uid": "1499991436488" - } - ] - }, - "relationGroup": { - "relations": [] - } - } - }, - { - "config": { - "position": [ - 471, - 365 + 337, + 384 ] }, "name": "New Model Object", @@ -146,8 +95,8 @@ "objectsettings": { "addDeletedField": true, "addHiddenField": true, - "addStarttimeEndtimeFields": true, - "aggregateRoot": true, + "addStarttimeEndtimeFields": false, + "aggregateRoot": false, "categorizable": false, "description": "", "mapToTable": "", @@ -175,7 +124,7 @@ "propertyDescription": "Name of the menu item", "propertyIsExcludeField": false, "propertyIsL10nModeExclude": false, - "propertyIsRequired": true, + "propertyIsRequired": false, "propertyName": "title", "propertyType": "String", "uid": "1275033111048" @@ -202,17 +151,6 @@ "propertyType": "Image", "uid": "232675499137" }, - { - "allowedFileTypes": "", - "maxItems": "1", - "propertyDescription": "", - "propertyIsExcludeField": false, - "propertyIsL10nModeExclude": false, - "propertyIsRequired": false, - "propertyName": "page", - "propertyType": "String", - "uid": "1319275530787" - }, { "allowedFileTypes": "", "maxItems": "1", @@ -232,7 +170,7 @@ "propertyIsL10nModeExclude": false, "propertyIsRequired": false, "propertyName": "content", - "propertyType": "RichText", + "propertyType": "String", "uid": "1242707690455" } ] @@ -242,15 +180,99 @@ { "foreignRelationClass": "", "lazyLoading": false, - "propertyIsExcludeField": true, + "propertyIsExcludeField": false, "relationDescription": "", - "relationName": "submenu", + "relationName": "items", "relationType": "zeroToMany", "relationWire": "[wired]", "renderType": "inline", - "uid": "1611042414700" + "uid": "16209433090" + }, + { + "foreignRelationClass": "", + "lazyLoading": false, + "propertyIsExcludeField": false, + "relationDescription": "", + "relationName": "page", + "relationType": "zeroToOne", + "relationWire": "[wired]", + "renderType": "inline", + "uid": "148645428661" + } + ] + } + } + }, + { + "config": { + "position": [ + 40, + 407 + ] + }, + "name": "New Model Object", + "value": { + "actionGroup": { + "_default0_list": false, + "_default1_show": false, + "_default2_new_create": false, + "_default3_edit_update": false, + "_default4_delete": false, + "customActions": [] + }, + "name": "Page", + "objectsettings": { + "addDeletedField": false, + "addHiddenField": false, + "addStarttimeEndtimeFields": false, + "aggregateRoot": false, + "categorizable": false, + "description": "", + "mapToTable": "", + "parentClass": "", + "sorting": false, + "type": "Entity", + "uid": "1421122549998" + }, + "propertyGroup": { + "properties": [ + { + "allowedFileTypes": "", + "maxItems": "1", + "propertyDescription": "", + "propertyIsExcludeField": false, + "propertyIsL10nModeExclude": false, + "propertyIsRequired": false, + "propertyName": "title", + "propertyType": "String", + "uid": "927540777152" + }, + { + "allowedFileTypes": "", + "maxItems": "1", + "propertyDescription": "", + "propertyIsExcludeField": false, + "propertyIsL10nModeExclude": false, + "propertyIsRequired": false, + "propertyName": "navTitle", + "propertyType": "String", + "uid": "880413159436" + }, + { + "allowedFileTypes": "", + "maxItems": "1", + "propertyDescription": "", + "propertyIsExcludeField": false, + "propertyIsL10nModeExclude": false, + "propertyIsRequired": false, + "propertyName": "subtitle", + "propertyType": "String", + "uid": "68317247955" } ] + }, + "relationGroup": { + "relations": [] } } } @@ -267,7 +289,7 @@ "skipGenerateDocumentationTemplate": false, "sourceLanguage": "en", "state": "alpha", - "targetVersion": "9.5.0-9.5.99", + "targetVersion": "10.4.0-10.4.99", "version": "1.0.0" }, "extensionKey": "nl_menubuilder", @@ -282,44 +304,44 @@ { "src": { "moduleId": 0, - "terminal": "relationWire_1", + "terminal": "relationWire_0", "uid": "498399672732" }, "tgt": { - "moduleId": 2, + "moduleId": 1, "terminal": "SOURCES", "uid": "461753844786" } }, { "src": { - "moduleId": 0, + "moduleId": 1, "terminal": "relationWire_0", - "uid": "910633819500" + "uid": "16209433090" }, "tgt": { "moduleId": 1, "terminal": "SOURCES", - "uid": "908718443858" + "uid": "461753844786" } }, { "src": { - "moduleId": 2, - "terminal": "relationWire_0", - "uid": "1611042414700" + "moduleId": 1, + "terminal": "relationWire_1", + "uid": "148645428661" }, "tgt": { - "moduleId": 0, + "moduleId": 2, "terminal": "SOURCES", - "uid": "782096674115" + "uid": "1421122549998" } } ], "storagePath": "\/var\/www\/html\/public\/typo3conf\/ext\/", "log": { - "last_modified": "2021-04-23 09:51", - "extension_builder_version": "9.10.3", - "be_user": " (1)" + "last_modified": "2021-05-05 01:13", + "extension_builder_version": "9.11.0", + "be_user": " (4)" } } \ No newline at end of file diff --git a/Resources/Private/Language/locallang.xlf b/Resources/Private/Language/locallang.xlf index ce843a2..d422e49 100644 --- a/Resources/Private/Language/locallang.xlf +++ b/Resources/Private/Language/locallang.xlf @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <xliff version="1.0"> - <file source-language="en" datatype="plaintext" original="EXT:nl_menubuilder/Resources/Private/Language/locallang" date="2021-04-23T09:51:09Z" product-name="nl_menubuilder"> + <file source-language="en" datatype="plaintext" original="EXT:nl_menubuilder/Resources/Private/Language/locallang" date="2021-05-05T13:13:18Z" product-name="nl_menubuilder"> <header/> <body> <trans-unit id="tx_nlmenubuilder_domain_model_menu" resname="tx_nlmenubuilder_domain_model_menu"> @@ -9,21 +9,12 @@ <trans-unit id="tx_nlmenubuilder_domain_model_menu.title" resname="tx_nlmenubuilder_domain_model_menu.title"> <source>Title</source> </trans-unit> - <trans-unit id="tx_nlmenubuilder_domain_model_menu.menu_group" resname="tx_nlmenubuilder_domain_model_menu.menu_group"> - <source>Menu Group</source> - </trans-unit> - <trans-unit id="tx_nlmenubuilder_domain_model_menu.menu_item" resname="tx_nlmenubuilder_domain_model_menu.menu_item"> - <source>Menu Item</source> - </trans-unit> - <trans-unit id="tx_nlmenubuilder_domain_model_menugroup" resname="tx_nlmenubuilder_domain_model_menugroup"> - <source>Menu Group</source> - </trans-unit> - <trans-unit id="tx_nlmenubuilder_domain_model_menugroup.title" resname="tx_nlmenubuilder_domain_model_menugroup.title"> - <source>Title</source> - </trans-unit> - <trans-unit id="tx_nlmenubuilder_domain_model_menugroup.template" resname="tx_nlmenubuilder_domain_model_menugroup.template"> + <trans-unit id="tx_nlmenubuilder_domain_model_menu.template" resname="tx_nlmenubuilder_domain_model_menu.template"> <source>Template</source> </trans-unit> + <trans-unit id="tx_nlmenubuilder_domain_model_menu.items" resname="tx_nlmenubuilder_domain_model_menu.items"> + <source>Items</source> + </trans-unit> <trans-unit id="tx_nlmenubuilder_domain_model_menuitem" resname="tx_nlmenubuilder_domain_model_menuitem"> <source>Menu Item</source> </trans-unit> @@ -51,6 +42,21 @@ <trans-unit id="tx_nlmenubuilder_domain_model_menuitem.submenu" resname="tx_nlmenubuilder_domain_model_menuitem.submenu"> <source>Submenu</source> </trans-unit> + <trans-unit id="tx_nlmenubuilder_domain_model_menuitem.items" resname="tx_nlmenubuilder_domain_model_menuitem.items"> + <source>Items</source> + </trans-unit> + <trans-unit id="tx_nlmenubuilder_domain_model_page" resname="tx_nlmenubuilder_domain_model_page"> + <source>Page</source> + </trans-unit> + <trans-unit id="tx_nlmenubuilder_domain_model_page.title" resname="tx_nlmenubuilder_domain_model_page.title"> + <source>Title</source> + </trans-unit> + <trans-unit id="tx_nlmenubuilder_domain_model_page.nav_title" resname="tx_nlmenubuilder_domain_model_page.nav_title"> + <source>Nav Title</source> + </trans-unit> + <trans-unit id="tx_nlmenubuilder_domain_model_page.subtitle" resname="tx_nlmenubuilder_domain_model_page.subtitle"> + <source>Subtitle</source> + </trans-unit> </body> </file> </xliff> diff --git a/Resources/Private/Language/locallang_csh_tx_nlmenubuilder_domain_model_menu.xlf b/Resources/Private/Language/locallang_csh_tx_nlmenubuilder_domain_model_menu.xlf index 27093ba..eef14fa 100644 --- a/Resources/Private/Language/locallang_csh_tx_nlmenubuilder_domain_model_menu.xlf +++ b/Resources/Private/Language/locallang_csh_tx_nlmenubuilder_domain_model_menu.xlf @@ -1,16 +1,16 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <xliff version="1.0"> - <file source-language="en" datatype="plaintext" original="EXT:nl_menubuilder/Resources/Private/Language/locallang_csh" date="2021-04-23T09:51:09Z" product-name="nl_menubuilder"> + <file source-language="en" datatype="plaintext" original="EXT:nl_menubuilder/Resources/Private/Language/locallang_csh" date="2021-05-05T13:13:18Z" product-name="nl_menubuilder"> <header/> <body> <trans-unit id="title.description" resname="title.description"> <source>Name of the menu</source> </trans-unit> - <trans-unit id="menu_group.description" resname="menu_group.description"> - <source>menuGroup</source> + <trans-unit id="template.description" resname="template.description"> + <source>template</source> </trans-unit> - <trans-unit id="menu_item.description" resname="menu_item.description"> - <source>menuItem</source> + <trans-unit id="items.description" resname="items.description"> + <source>items</source> </trans-unit> </body> </file> diff --git a/Resources/Private/Language/locallang_csh_tx_nlmenubuilder_domain_model_menuitem.xlf b/Resources/Private/Language/locallang_csh_tx_nlmenubuilder_domain_model_menuitem.xlf index 121cf96..0ced5ec 100644 --- a/Resources/Private/Language/locallang_csh_tx_nlmenubuilder_domain_model_menuitem.xlf +++ b/Resources/Private/Language/locallang_csh_tx_nlmenubuilder_domain_model_menuitem.xlf @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <xliff version="1.0"> - <file source-language="en" datatype="plaintext" original="EXT:nl_menubuilder/Resources/Private/Language/locallang_csh" date="2021-04-23T09:51:09Z" product-name="nl_menubuilder"> + <file source-language="en" datatype="plaintext" original="EXT:nl_menubuilder/Resources/Private/Language/locallang_csh" date="2021-05-05T13:13:18Z" product-name="nl_menubuilder"> <header/> <body> <trans-unit id="type.description" resname="type.description"> @@ -15,17 +15,17 @@ <trans-unit id="image.description" resname="image.description"> <source>Optional link image</source> </trans-unit> - <trans-unit id="page.description" resname="page.description"> - <source>page</source> - </trans-unit> <trans-unit id="link.description" resname="link.description"> <source>link</source> </trans-unit> <trans-unit id="content.description" resname="content.description"> <source>content</source> </trans-unit> - <trans-unit id="submenu.description" resname="submenu.description"> - <source>submenu</source> + <trans-unit id="items.description" resname="items.description"> + <source>items</source> + </trans-unit> + <trans-unit id="page.description" resname="page.description"> + <source>page</source> </trans-unit> </body> </file> diff --git a/Resources/Private/Language/locallang_csh_tx_nlmenubuilder_domain_model_page.xlf b/Resources/Private/Language/locallang_csh_tx_nlmenubuilder_domain_model_page.xlf new file mode 100644 index 0000000..77e943a --- /dev/null +++ b/Resources/Private/Language/locallang_csh_tx_nlmenubuilder_domain_model_page.xlf @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<xliff version="1.0"> + <file source-language="en" datatype="plaintext" original="EXT:nl_menubuilder/Resources/Private/Language/locallang_csh" date="2021-05-05T13:13:18Z" product-name="nl_menubuilder"> + <header/> + <body> + <trans-unit id="title.description" resname="title.description"> + <source>title</source> + </trans-unit> + <trans-unit id="nav_title.description" resname="nav_title.description"> + <source>navTitle</source> + </trans-unit> + <trans-unit id="subtitle.description" resname="subtitle.description"> + <source>subtitle</source> + </trans-unit> + </body> + </file> +</xliff> diff --git a/Resources/Private/Language/locallang_db.xlf b/Resources/Private/Language/locallang_db.xlf index 31a1067..09afb8e 100644 --- a/Resources/Private/Language/locallang_db.xlf +++ b/Resources/Private/Language/locallang_db.xlf @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <xliff version="1.0"> - <file source-language="en" datatype="plaintext" original="EXT:nl_menubuilder/Resources/Private/Language/locallang_db" date="2021-04-23T09:51:09Z" product-name="nl_menubuilder"> + <file source-language="en" datatype="plaintext" original="EXT:nl_menubuilder/Resources/Private/Language/locallang_db" date="2021-05-05T13:13:18Z" product-name="nl_menubuilder"> <header/> <body> <trans-unit id="tx_nlmenubuilder_domain_model_menu" resname="tx_nlmenubuilder_domain_model_menu"> @@ -9,21 +9,12 @@ <trans-unit id="tx_nlmenubuilder_domain_model_menu.title" resname="tx_nlmenubuilder_domain_model_menu.title"> <source>Title</source> </trans-unit> - <trans-unit id="tx_nlmenubuilder_domain_model_menu.menu_group" resname="tx_nlmenubuilder_domain_model_menu.menu_group"> - <source>Menu Group</source> - </trans-unit> - <trans-unit id="tx_nlmenubuilder_domain_model_menu.menu_item" resname="tx_nlmenubuilder_domain_model_menu.menu_item"> - <source>Menu Item</source> - </trans-unit> - <trans-unit id="tx_nlmenubuilder_domain_model_menugroup" resname="tx_nlmenubuilder_domain_model_menugroup"> - <source>Menu Group</source> - </trans-unit> - <trans-unit id="tx_nlmenubuilder_domain_model_menugroup.title" resname="tx_nlmenubuilder_domain_model_menugroup.title"> - <source>Title</source> - </trans-unit> - <trans-unit id="tx_nlmenubuilder_domain_model_menugroup.template" resname="tx_nlmenubuilder_domain_model_menugroup.template"> + <trans-unit id="tx_nlmenubuilder_domain_model_menu.template" resname="tx_nlmenubuilder_domain_model_menu.template"> <source>Template</source> </trans-unit> + <trans-unit id="tx_nlmenubuilder_domain_model_menu.items" resname="tx_nlmenubuilder_domain_model_menu.items"> + <source>Items</source> + </trans-unit> <trans-unit id="tx_nlmenubuilder_domain_model_menuitem" resname="tx_nlmenubuilder_domain_model_menuitem"> <source>Menu Item</source> </trans-unit> @@ -51,19 +42,24 @@ <trans-unit id="tx_nlmenubuilder_domain_model_menuitem.submenu" resname="tx_nlmenubuilder_domain_model_menuitem.submenu"> <source>Submenu</source> </trans-unit> - <trans-unit id="tabs.access" resname="tabs.access"> - <source>Access</source> + <trans-unit id="tx_nlmenubuilder_domain_model_menuitem.items" resname="tx_nlmenubuilder_domain_model_menuitem.items"> + <source>Items</source> </trans-unit> - <trans-unit id="menu.tabs.menu_item" resname="menu.tabs.menu_item"> - <source>Menu Items</source> + <trans-unit id="tx_nlmenubuilder_domain_model_page" resname="tx_nlmenubuilder_domain_model_page"> + <source>Page</source> + </trans-unit> + <trans-unit id="tx_nlmenubuilder_domain_model_page.title" resname="tx_nlmenubuilder_domain_model_page.title"> + <source>Title</source> </trans-unit> - <trans-unit id="tx_nlmenubuilder_domain_model_menugroup.template.I.Index" resname="tx_nlmenubuilder_domain_model_menugroup.template.I.Index"> - <source>Index</source> + <trans-unit id="tx_nlmenubuilder_domain_model_page.nav_title" resname="tx_nlmenubuilder_domain_model_page.nav_title"> + <source>Nav Title</source> </trans-unit> - <trans-unit id="tx_nlmenubuilder_domain_model_menugroup.template.I.Show" resname="tx_nlmenubuilder_domain_model_menugroup.template.I.Show"> - <source>Show</source> + <trans-unit id="tx_nlmenubuilder_domain_model_page.subtitle" resname="tx_nlmenubuilder_domain_model_page.subtitle"> + <source>Subtitle</source> + </trans-unit> + <trans-unit id="menu.tabs.menu_item" resname="menu.tabs.menu_item"> + <source>Menu Items</source> </trans-unit> - </body> </file> </xliff> diff --git a/Resources/Private/Partials/Menu.html b/Resources/Private/Partials/Menu.html index ebd4fd7..21cd475 100644 --- a/Resources/Private/Partials/Menu.html +++ b/Resources/Private/Partials/Menu.html @@ -1,10 +1,14 @@ +<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true"> + <div class="menu-builder menu"> <div class="menu-builder menu-title" hidden>{menu.title}</div> <div class="menu-builder menu-item-group"> - <f:for each="{menu.menuItem}" as="menuItem"> + <f:for each="{menu.items}" as="menuItem"> <div class="menu-builder menu-item"> - <f:render partial="MenuItem/{menuItem.typeName}" arguments="{menuItem:menuItem}" /> + <f:render partial="MenuItem/{menuItem.typeName}" arguments="{menuItem: menuItem}" /> </div> </f:for> </div> </div> + +</html> diff --git a/Resources/Private/Partials/MenuItem/Content.html b/Resources/Private/Partials/MenuItem/Content.html index 7da59a8..8f62e1b 100644 --- a/Resources/Private/Partials/MenuItem/Content.html +++ b/Resources/Private/Partials/MenuItem/Content.html @@ -4,3 +4,5 @@ <div class="menu-builder menu-item-title">{menuItem.title}</div> <f:cObject typoscriptObjectPath="lib.tx_nlmenubuilder.contentElementRendering">{menuItem.content}</f:cObject> </div> + +</html> diff --git a/Resources/Private/Partials/MenuItem/Link.html b/Resources/Private/Partials/MenuItem/Link.html index 09fec57..37786f0 100644 --- a/Resources/Private/Partials/MenuItem/Link.html +++ b/Resources/Private/Partials/MenuItem/Link.html @@ -3,3 +3,5 @@ <div class="menu-builder menu-item-link"> <f:link.typolink parameter="{menuItem.link}">{menuItem.title}</f:link.typolink> </div> + +</html> diff --git a/Resources/Private/Partials/MenuItem/Page.html b/Resources/Private/Partials/MenuItem/Page.html index 8015bb3..f19ac94 100644 --- a/Resources/Private/Partials/MenuItem/Page.html +++ b/Resources/Private/Partials/MenuItem/Page.html @@ -1,5 +1,7 @@ <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 pageUid="{menuItem.page}">{menuItem.title}</f:link.page> + <f:link.page pageUid="{menuItem.page.uid}">{menuItem.title}</f:link.page> </div> + +</html> diff --git a/Resources/Private/Partials/MenuItem/Submenu.html b/Resources/Private/Partials/MenuItem/Submenu.html index 462732b..a86e17e 100644 --- a/Resources/Private/Partials/MenuItem/Submenu.html +++ b/Resources/Private/Partials/MenuItem/Submenu.html @@ -2,6 +2,7 @@ <div class="menu-builder menu-item-submenu"> <div class="menu-builder menu-item-title">{menuItem.title}</div> - - <f:render partial="Menu" arguments="{menu:menuItem.submenu}" /> + <f:render partial="Menu" arguments="{menu: menuItem}" /> </div> + +</html> diff --git a/Resources/Private/Templates/ViewHelpers/Menu/Render/Index.html b/Resources/Private/Templates/ViewHelpers/Menu/Render/Index.html new file mode 100644 index 0000000..cf6847e --- /dev/null +++ b/Resources/Private/Templates/ViewHelpers/Menu/Render/Index.html @@ -0,0 +1,10 @@ +<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true"> + +<div class="menu-builder menu"> + <div>[DEV]Index Template[DEV]</div> + <div class="menu-builder menu-title" hidden>{menu.title}</div> + + <f:render partial="Menu" arguments="{menu: menu}" /> +</div> + +</html> diff --git a/Resources/Private/Templates/ViewHelpers/Widget/Show/Index.html b/Resources/Private/Templates/ViewHelpers/Widget/Show/Index.html deleted file mode 100644 index 82456c6..0000000 --- a/Resources/Private/Templates/ViewHelpers/Widget/Show/Index.html +++ /dev/null @@ -1,9 +0,0 @@ -<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true"> - -<div class="menu-builder menu-group"> - <div>[DEV]Index Template[DEV]</div> - <div class="menu-builder menu-group-title" hidden>{menu.menuGroup.title}</div> - - <f:render partial="Menu" arguments="{menu:menu}" /> - -</div> diff --git a/Resources/Private/Templates/ViewHelpers/Widget/Show/Show.html b/Resources/Private/Templates/ViewHelpers/Widget/Show/Show.html deleted file mode 100644 index fc5006d..0000000 --- a/Resources/Private/Templates/ViewHelpers/Widget/Show/Show.html +++ /dev/null @@ -1,9 +0,0 @@ -<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true"> - -<div class="menu-builder menu-group"> - <div>[DEV]Show Template[DEV]</div> - <div class="menu-builder menu-group-title" hidden>{menu.menuGroup.title}</div> - - <f:render partial="Menu" arguments="{menu:menu}" /> - -</div> diff --git a/Resources/Public/Icons/tx_nlmenubuilder_domain_model_menugroup.gif b/Resources/Public/Icons/tx_nlmenubuilder_domain_model_menugroup.gif deleted file mode 100644 index 4013d7a6ea57d909a3d8d073195b548f09256155..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5236 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 CGk3E9 diff --git a/Resources/Public/Icons/tx_nlmenubuilder_domain_model_page.gif b/Resources/Public/Icons/tx_nlmenubuilder_domain_model_page.gif new file mode 100644 index 0000000000000000000000000000000000000000..37ba37b9b3a220018e3a291bf2ee413d0da30ce0 GIT binary patch literal 230 zcmZ?wbh9u|6krfwIKlt|GBPr{y1EAX`lY3%Jv}|Mz+f2|Yy*R1U~nA_UV_1QFkoO{ zC<YmT4=es;VPs$sVbB370@=yHnylbzxrBMHfbu#e<-Hq@NaRQ#);qgPs7kBt!8=n9 zjy{WNO&L2pMZA^??~3wbV-@Mq+QikvbZA;@1?MbtmYY3&E5lPy-ux-1=*QF`m(X-Y alg+M4z)H!HgNuuYr<23UbixEh25SHoqD|5O literal 0 HcmV?d00001 diff --git a/ext_emconf.php b/ext_emconf.php index e732351..902effd 100644 --- a/ext_emconf.php +++ b/ext_emconf.php @@ -3,7 +3,7 @@ /*************************************************************** * Extension Manager/Repository config file for ext: "nl_menubuilder" * - * Auto generated by Extension Builder 2021-04-23 + * Auto generated by Extension Builder 2021-05-05 * * Manual updates: * Only the data in the array - anything else is removed by next write. diff --git a/ext_tables.php b/ext_tables.php index 41d074a..a3d04b5 100644 --- a/ext_tables.php +++ b/ext_tables.php @@ -10,11 +10,11 @@ call_user_func( \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addLLrefForTCAdescr('tx_nlmenubuilder_domain_model_menu', 'EXT:nl_menubuilder/Resources/Private/Language/locallang_csh_tx_nlmenubuilder_domain_model_menu.xlf'); \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::allowTableOnStandardPages('tx_nlmenubuilder_domain_model_menu'); - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addLLrefForTCAdescr('tx_nlmenubuilder_domain_model_menugroup', 'EXT:nl_menubuilder/Resources/Private/Language/locallang_csh_tx_nlmenubuilder_domain_model_menugroup.xlf'); - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::allowTableOnStandardPages('tx_nlmenubuilder_domain_model_menugroup'); - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addLLrefForTCAdescr('tx_nlmenubuilder_domain_model_menuitem', 'EXT:nl_menubuilder/Resources/Private/Language/locallang_csh_tx_nlmenubuilder_domain_model_menuitem.xlf'); \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::allowTableOnStandardPages('tx_nlmenubuilder_domain_model_menuitem'); + \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addLLrefForTCAdescr('tx_nlmenubuilder_domain_model_page', 'EXT:nl_menubuilder/Resources/Private/Language/locallang_csh_tx_nlmenubuilder_domain_model_page.xlf'); + \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::allowTableOnStandardPages('tx_nlmenubuilder_domain_model_page'); + } ); diff --git a/ext_tables.sql b/ext_tables.sql index 9372867..ccd7f98 100644 --- a/ext_tables.sql +++ b/ext_tables.sql @@ -1,41 +1,23 @@ -# -# Table structure for table 'tx_nlmenubuilder_domain_model_menu' -# CREATE TABLE tx_nlmenubuilder_domain_model_menu ( - menuitem int(11) unsigned DEFAULT '0' NOT NULL, - - title varchar(255) DEFAULT '' NOT NULL, - menu_group int(11) unsigned DEFAULT '0', - menu_item int(11) unsigned DEFAULT '0' NOT NULL - -); - -# -# Table structure for table 'tx_nlmenubuilder_domain_model_menugroup' -# -CREATE TABLE tx_nlmenubuilder_domain_model_menugroup ( - title varchar(255) DEFAULT '' NOT NULL, - template varchar(255) DEFAULT '' NOT NULL + template varchar(255) DEFAULT '' NOT NULL, + items int(11) unsigned DEFAULT '0' NOT NULL ); -# -# Table structure for table 'tx_nlmenubuilder_domain_model_menuitem' -# CREATE TABLE tx_nlmenubuilder_domain_model_menuitem ( menu int(11) unsigned DEFAULT '0' NOT NULL, + menuitem int(11) unsigned DEFAULT '0' NOT NULL, - sorting int(11) NOT NULL DEFAULT '0', type int(11) DEFAULT '0' NOT NULL, title varchar(255) DEFAULT '' NOT NULL, subtitle varchar(255) DEFAULT '' NOT NULL, image int(11) unsigned NOT NULL default '0', - page varchar(255) DEFAULT '' NOT NULL, link varchar(255) DEFAULT '' NOT NULL, content varchar(255) DEFAULT '' NOT NULL, - submenu int(11) unsigned DEFAULT '0' NOT NULL + items int(11) unsigned DEFAULT '0' NOT NULL, + page int(11) unsigned DEFAULT '0' ); -- GitLab