namespace Cubist\Backpack\app\Http\Controllers;
+use Cubist\Backpack\app\Magic\Menu\Menu;
use Cubist\Backpack\app\Magic\Models\CMSPage;
use Illuminate\Support\Str;
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']);
+ }
}
$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
*/
class Menu extends BaseMenu
{
- protected $_nav = null;
+ /**
+ * @var Item
+ */
+ protected static $_nav = null;
public function get($key)
{
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);