diff --git a/core/Controller/Site/PageController.php b/core/Controller/Site/PageController.php
index 7100869..d85901f 100644
--- a/core/Controller/Site/PageController.php
+++ b/core/Controller/Site/PageController.php
@@ -6,20 +6,43 @@ use App\Core\Site\SiteRequest;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
+use App\Core\Site\SiteStore;
class PageController extends AbstractController
{
+ protected SiteRequest $siteRequest;
+ protected SiteStore $siteStore;
+
+ public function __construct(SiteRequest $siteRequest, SiteStore $siteStore)
+ {
+ $this->siteRequest = $siteRequest;
+ $this->siteStore = $siteStore;
+ }
+
public function show(Request $request, SiteRequest $siteRequest): Response
{
if (!$siteRequest->getPage()) {
throw $this->createNotFoundException();
}
- return $this->render($siteRequest->getPage()->getTemplate(), [
- '_node' => $siteRequest->getNode(),
- '_page' => $siteRequest->getPage(),
- '_menu' => $siteRequest->getMenu(),
- '_navigation' => $siteRequest->getNavigation(),
- ]);
+ return $this->defaultRender($siteRequest->getPage()->getTemplate());
+ }
+
+ protected function defaultRender(string $view, array $parameters = [], Response $response = null): Response
+ {
+ $parameters = array_merge($this->getDefaultRenderParameters(), $parameters);
+
+ return parent::render($view, $parameters, $response);
+ }
+
+ protected function getDefaultRenderParameters(): array
+ {
+ return [
+ '_node' => $this->siteRequest->getNode(),
+ '_page' => $this->siteRequest->getPage(),
+ '_menu' => $this->siteRequest->getMenu(),
+ '_navigation' => $this->siteRequest->getNavigation(),
+ '_store' => $this->siteStore,
+ ];
}
}
diff --git a/core/Entity/Site/Navigation.php b/core/Entity/Site/Navigation.php
index 5672629..ec4ba62 100644
--- a/core/Entity/Site/Navigation.php
+++ b/core/Entity/Site/Navigation.php
@@ -120,6 +120,17 @@ class Navigation implements EntityInterface
return $this;
}
+ public function getMenu(string $code): ?Menu
+ {
+ foreach ($this->menus as $menu) {
+ if ($menu->getCode() === $code) {
+ return $menu;
+ }
+ }
+
+ return $menu;
+ }
+
public function getRouteName(): string
{
return $this->getCode() ? $this->getCode() : 'navigation_'.$this->getId();
diff --git a/core/EventSuscriber/Site/NodeEventSubscriber.php b/core/EventSuscriber/Site/NodeEventSubscriber.php
index 3608862..cd1e252 100644
--- a/core/EventSuscriber/Site/NodeEventSubscriber.php
+++ b/core/EventSuscriber/Site/NodeEventSubscriber.php
@@ -9,10 +9,10 @@ use App\Core\EventSuscriber\EntityManagerEventSubscriber;
use App\Core\Factory\Site\NodeFactory;
use App\Core\Manager\EntityManager;
use App\Core\Repository\Site\NodeRepository;
-use App\Core\Slugify\Slugify;
-use Symfony\Component\HttpKernel\KernelInterface;
use App\Core\Slugify\CodeSlugify;
use App\Core\Slugify\RouteParameterSlugify;
+use App\Core\Slugify\Slugify;
+use Symfony\Component\HttpKernel\KernelInterface;
/**
* class NodeEventSubscriber.
@@ -78,7 +78,7 @@ class NodeEventSubscriber extends EntityManagerEventSubscriber
$generatedUrl = '/'.implode('/', $path);
}
- if ($generatedUrl !== '/') {
+ if ('/' !== $generatedUrl) {
$generatedUrl = rtrim($generatedUrl, '/');
}
@@ -90,7 +90,7 @@ class NodeEventSubscriber extends EntityManagerEventSubscriber
$regex = '/'.preg_quote($routeParameter).'/';
if (!preg_match($regex, $generatedUrl)) {
- $generatedUrl.= '/'.$routeParameter;
+ $generatedUrl .= '/'.$routeParameter;
}
$parameters[$key] = $parameter;
@@ -102,7 +102,7 @@ class NodeEventSubscriber extends EntityManagerEventSubscriber
$realAttributes = [];
foreach ($attributes as $key => $attribute) {
- $realAttributes[$attribute['label']] = $attribute;
+ $realAttributes[$this->routeParameterSlugify->slugify($attribute['label'])] = $attribute;
}
$node->setAttributes($realAttributes);
diff --git a/core/Site/SiteStore.php b/core/Site/SiteStore.php
new file mode 100644
index 0000000..9264137
--- /dev/null
+++ b/core/Site/SiteStore.php
@@ -0,0 +1,63 @@
+
+ */
+class SiteStore
+{
+ protected NavigationRepositoryQuery $navigationRepositoryQuery;
+ protected SiteRequest $siteRequest;
+
+ public function __construct(NavigationRepositoryQuery $navigationRepositoryQuery, SiteRequest $siteRequest)
+ {
+ $this->navigationRepositoryQuery = $navigationRepositoryQuery;
+ $this->siteRequest = $siteRequest;
+ }
+
+ public function getNavigations(): array
+ {
+ return $this->navigationRepositoryQuery->create()
+ ->find()
+ ;
+ }
+
+ public function getNavigation(string $code): ?Navigation
+ {
+ return $this->navigationRepositoryQuery->create()
+ ->where('.code = :code')
+ ->setParameter(':code', $code)
+ ->findOne()
+ ;
+ }
+
+ public function isActiveNode(Node $node, $deep = false): bool
+ {
+ $siteRequestNode = $this->siteRequest->getNode();
+
+ if (!$siteRequestNode) {
+ return false;
+ }
+
+ if ($node->getRouteName() === $siteRequestNode->getRouteName()) {
+ return true;
+ }
+
+ if ($deep) {
+ foreach ($node->getAllChildren() as $child) {
+ if ($child->getRouteName() === $siteRequestNode->getRouteName()) {
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+}
diff --git a/templates/site/page/simple/page.html.twig b/templates/site/page/simple/page.html.twig
index 6ab1d64..4668034 100644
--- a/templates/site/page/simple/page.html.twig
+++ b/templates/site/page/simple/page.html.twig
@@ -1,8 +1,71 @@
-template 1
+{% import _self as macros %}
-Node : {{ _node.label }}
-Menu : {{ _menu.label }}
-Navigation : {{ _navigation.label }}
+{% macro item(node, store) %}
+ {% set isActive = store.isActiveNode(node, true) %}
-Page : {{ _page.title.value }}
-Content : {{ _page.content.value|raw }}
+ {% if node.isVisible %}
+ {% if node.code == 'post' %}
+
+ {{ node.label }}
+
+ {% elseif node.page %}
+
+ {{ node.label }}
+
+ {% else %}
+
+ {{ node.label }}
+
+ {% endif %}
+
+ {{ dump(node.attributes) }}
+
+ {% if node.children|length %}
+
{{ _page.content.value }}+ +