【问题标题】:Laravel Asgard CMS Menu with Custom Classes带有自定义类的 Laravel Asgard CMS 菜单
【发布时间】:2016-04-07 09:15:21
【问题描述】:

我在我的一个项目中使用 Asgard CMS。

我正在尝试打印带有自定义类的菜单。

默认情况下,{{ Menu::get('main') }} 打印出带有 Bootstrap 类的主菜单。但是,由于我的主题,我想使用不同的类。

在他们的文档中,他们说通过创建Presenter你可以做到这一点。但是,当我创建一个名为 CustomPresenter.php 的 Presenter 和一个扩展 Pingpong/menus/Presenters/Presenter.php 的类 CustomPresenter 时,将它放在 /vendor/xxx/ 下并在我的刀片中通过 {{ Menu::render('main', 'XXX/CustomPresenter') }} 调用它,Laravel 给出 Class 'XXX\未找到 CustomPresenter' 错误。

这是我在 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;
        ;
    }
}

【问题讨论】:

    标签: php laravel-5 presenter


    【解决方案1】:

    来自official documentation:

    要注册这个新的演示者,您需要将其添加到包配置中 (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',
    );
    

    文档也没有提到将您的课程放在vendor/xxx 目录中。使用 composer 的主要规则是不要手动编辑vendor 目录。您应该使用您的应用命名空间将您的类放在您的应用文件夹中(最好是目录App\Http\Presenters)。

    【讨论】:

    • 是的,没有运气。顺便说一句,它很旧,文件位置不是上面指出的。
    • @yenerunver 将文件从vendor 目录移动到app 目录并将命名空间更改为App\XXX\CustomPresenter。
    • 我已经通过将我的演示者移动到 App\Http\Presenters 下并进行必要的更改来使其工作。如果你可以编辑你的答案,我可以给你赏金。
    【解决方案2】:

    你需要通过 composer 转储自动加载

    composer dump-autoload
    

    自动加载命名空间,这取决于你可能需要做的包

    php artisan vendor:publish
    

    如果它确实有任何需要在使用渲染方法之前创建的配置文件。

    祝你好运

    【讨论】:

    • 以上答案解决了我的问题,所以没有尝试你的方式,这可能也可以。谢谢。
    • 很高兴它为你工作,祝你未来发展好运@yenerunver
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-06
    • 2019-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-24
    • 1970-01-01
    相关资源
    最近更新 更多