]> _ Git - cubist_cms-back.git/commitdiff
#2878
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Wed, 10 Jul 2019 19:03:53 +0000 (21:03 +0200)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Wed, 10 Jul 2019 19:03:53 +0000 (21:03 +0200)
src/app/Http/Controllers/CubistPageController.php
src/app/Magic/Menu/Item.php
src/app/Magic/Menu/Menu.php

index 5f3f00d575bcaf17e08a45189ec27f1402d31b82..833b5252099495a137b368055f54ea0477c16c7c 100644 (file)
@@ -2,6 +2,7 @@
 
 namespace Cubist\Backpack\app\Http\Controllers;
 
+use Cubist\Backpack\app\Magic\Menu\Menu;
 use Cubist\Backpack\app\Magic\Models\CMSPage;
 use Illuminate\Support\Str;
 
@@ -23,4 +24,22 @@ class CubistPageController extends CubistFrontController
 
         return view('pages.' . $page->template, $this->data);
     }
+
+    public function catchall($main = '', $subs = [])
+    {
+        $path = trim($main . '/' . implode($subs), '/');
+        if (!$path) {
+            $path = 'home';
+        }
+
+        $nav = Menu::getNavigation();
+        $item = $nav->findItemByHref($path);
+        if (null === $item) {
+            $this->_404();
+        }
+
+        $c = $item->getController();
+
+        redirect()->action($c['controller'] . '@' . $c['action'], $c['params']);
+    }
 }
index d87a894514261da3c409b7fecc46298af2dd3c80..0d8e21b7881dd4b62fd8b7eafe7c2134bcd53498 100644 (file)
@@ -95,6 +95,24 @@ class Item
         $this->addChild($child);
     }
 
+
+    public function findItemByHref($href)
+    {
+        if ($this->getHref() == $href) {
+            return $this;
+        }
+        if (!$this->hasChildren()) {
+            return null;
+        }
+        foreach ($this->getChildren() as $child) {
+            $res = $child->findItemByHref($href);
+            if (null !== $res) {
+                return $res;
+            }
+        }
+        return null;
+    }
+
     /**
      * @return string
      */
index 7f5fe70d21102e6bd46ce9b3720fc004f1786bee..fe83057c253906617830d515dbf05d5810bc2022 100644 (file)
@@ -6,7 +6,10 @@ use Lavary\Menu\Menu as BaseMenu;
 
 class Menu extends BaseMenu
 {
-    protected $_nav = null;
+    /**
+     * @var Item
+     */
+    protected static $_nav = null;
 
     public function get($key)
     {
@@ -16,16 +19,22 @@ class Menu extends BaseMenu
         return parent::get($key);
     }
 
-    public function getNavigation()
+    /**
+     * @return Item
+     */
+    public static function getNavigation()
     {
-        $nav = new Item();
-        $nav->initFromDatabase();
-        return $nav;
+        if (self::$_nav === null) {
+            self::$_nav = new Item();
+            self::$_nav->initFromDatabase();
+        }
+        return self::$_nav;
+
     }
 
     public function makeAllMenus()
     {
-        $nav = $this->getNavigation();
+        $nav = self::getNavigation();
         foreach ($nav->getChildren() as $main) {
             $this->make($main->getName(), function ($menu) use ($main) {
                 $main->makeMenu($menu);