Laravel 自定义 Asgard CMS 菜单 类
Laravel Asgard CMS Menu with Custom Classes
我在我的一个项目中使用 Asgard CMS。
我正在尝试打印带有自定义 classes 的菜单。
默认情况下,{{ Menu::get('main') }}
打印主菜单 Bootstrap classes。但是,由于我的主题,我想使用不同的 classes。
在他们的文档中,他们说通过创建一个 Presenter
你可以做到这一点。但是,当我创建一个名为 CustomPresenter.php
的 Presenter 和一个名为 CustomPresenter
的 class 扩展 Pingpong/menus/Presenters/Presenter.php
时,将它放在 /vendor/xxx/
下并通过 [=19= 调用它]在我的 blade、Laravel 中给出 Class 'XXX\CustomPresenter' not found 错误。
这是我在 CustomPresenter 中使用的代码:
namespace XXX;
use Pingpong\Menus\Presenters\Presenter;
class CustomPresenter extends Presenter
{
/**
* {@inheritdoc }
*/
public function getOpenTagWrapper()
{
return PHP_EOL . '<section class="top-bar-section">' . PHP_EOL;
}
/**
* {@inheritdoc }
*/
public function getCloseTagWrapper()
{
return PHP_EOL . '</section>' . PHP_EOL;
}
/**
* {@inheritdoc }
*/
public function getMenuWithoutDropdownWrapper($item)
{
return '<li'.$this->getActiveState($item).'><a href="'. $item->getUrl() .'">'.$item->getIcon().' '.$item->title.'</a></li>';
}
/**
* {@inheritdoc }
*/
public function getActiveState($item)
{
return \Request::is($item->getRequest()) ? ' class="active"' : null;
}
/**
* {@inheritdoc }
*/
public function getDividerWrapper()
{
return '<li class="divider"></li>';
}
/**
* {@inheritdoc }
*/
public function getMenuWithDropDownWrapper($item)
{
return '<li>
<a href="#" class="sf-with-ul">
'.$item->getIcon().' '.$item->title.'
</a>
<ul style="display: none;">
'.$this->getChildMenuItems($item).'
</ul>
</li>' . PHP_EOL;
;
}
}
To register this new presenter you need to add it to the package configuration (config/packages/pingpong/menus/config.php
)
你做到了吗?
return array(
'navbar' => 'Pingpong\Menus\Presenters\Bootstrap\NavbarPresenter',
'navbar-right' => 'Pingpong\Menus\Presenters\Bootstrap\NavbarRightPresenter',
'nav-pills' => 'Pingpong\Menus\Presenters\Bootstrap\NavPillsPresenter',
'nav-tab' => 'Pingpong\Menus\Presenters\Bootstrap\NavTabPresenter',
'zurb-top-bar' => 'ZurbTopBarPresenter',
);
此外,文档中没有提到将 class 放在 vendor/xxx
目录中。使用 composer 的主要规则是不要手动编辑 vendor
目录。您应该使用您的应用程序命名空间将 class 放在您的应用程序文件夹中(最好是目录 App\Http\Presenters
)。
你需要 dump-autoload 通过 composer
composer dump-autoload
自动加载命名空间,具体取决于您可能需要执行的包
php artisan vendor:publish
如果它确实有任何您需要在使用渲染方法之前创建的配置文件。
祝你好运
我在我的一个项目中使用 Asgard CMS。
我正在尝试打印带有自定义 classes 的菜单。
默认情况下,{{ Menu::get('main') }}
打印主菜单 Bootstrap classes。但是,由于我的主题,我想使用不同的 classes。
在他们的文档中,他们说通过创建一个 Presenter
你可以做到这一点。但是,当我创建一个名为 CustomPresenter.php
的 Presenter 和一个名为 CustomPresenter
的 class 扩展 Pingpong/menus/Presenters/Presenter.php
时,将它放在 /vendor/xxx/
下并通过 [=19= 调用它]在我的 blade、Laravel 中给出 Class 'XXX\CustomPresenter' not found 错误。
这是我在 CustomPresenter 中使用的代码:
namespace XXX;
use Pingpong\Menus\Presenters\Presenter;
class CustomPresenter extends Presenter
{
/**
* {@inheritdoc }
*/
public function getOpenTagWrapper()
{
return PHP_EOL . '<section class="top-bar-section">' . PHP_EOL;
}
/**
* {@inheritdoc }
*/
public function getCloseTagWrapper()
{
return PHP_EOL . '</section>' . PHP_EOL;
}
/**
* {@inheritdoc }
*/
public function getMenuWithoutDropdownWrapper($item)
{
return '<li'.$this->getActiveState($item).'><a href="'. $item->getUrl() .'">'.$item->getIcon().' '.$item->title.'</a></li>';
}
/**
* {@inheritdoc }
*/
public function getActiveState($item)
{
return \Request::is($item->getRequest()) ? ' class="active"' : null;
}
/**
* {@inheritdoc }
*/
public function getDividerWrapper()
{
return '<li class="divider"></li>';
}
/**
* {@inheritdoc }
*/
public function getMenuWithDropDownWrapper($item)
{
return '<li>
<a href="#" class="sf-with-ul">
'.$item->getIcon().' '.$item->title.'
</a>
<ul style="display: none;">
'.$this->getChildMenuItems($item).'
</ul>
</li>' . PHP_EOL;
;
}
}
To register this new presenter you need to add it to the package configuration (
config/packages/pingpong/menus/config.php
)
你做到了吗?
return array(
'navbar' => 'Pingpong\Menus\Presenters\Bootstrap\NavbarPresenter',
'navbar-right' => 'Pingpong\Menus\Presenters\Bootstrap\NavbarRightPresenter',
'nav-pills' => 'Pingpong\Menus\Presenters\Bootstrap\NavPillsPresenter',
'nav-tab' => 'Pingpong\Menus\Presenters\Bootstrap\NavTabPresenter',
'zurb-top-bar' => 'ZurbTopBarPresenter',
);
此外,文档中没有提到将 class 放在 vendor/xxx
目录中。使用 composer 的主要规则是不要手动编辑 vendor
目录。您应该使用您的应用程序命名空间将 class 放在您的应用程序文件夹中(最好是目录 App\Http\Presenters
)。
你需要 dump-autoload 通过 composer
composer dump-autoload
自动加载命名空间,具体取决于您可能需要执行的包
php artisan vendor:publish
如果它确实有任何您需要在使用渲染方法之前创建的配置文件。
祝你好运