Меню Laravel Asgard CMS с пользовательскими классами

Я использую Asgard CMS в одном из своих проектов.

Я пытаюсь распечатать меню с пользовательскими классами.

По умолчанию {{ Menu::get('main') }} выводит главное меню с классами Bootstrap. Но я хочу использовать разные классы из-за моей темы.

В их документации написано, что создав Presenter можно это сделать. Однако, когда я создаю Presenter с именем CustomPresenter.php с классом CustomPresenter, который расширяет Pingpong/menus/Presenters/Presenter.php, помещаю его под /vendor/xxx/ и вызываю {{ Menu::render('main', 'XXX/CustomPresenter') }} в моем лезвии, 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;
        ;
    }
}

person yenerunver    schedule 03.01.2016    source источник


Ответы (2)


Из официальной документации:

Чтобы зарегистрировать этого нового докладчика, вам нужно добавить его в конфигурацию пакета (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. Основные правила использования композитора — не редактировать каталог vendor вручную. Вы должны поместить свой класс в папку своего приложения, используя пространство имен вашего приложения (лучше всего будет каталог App\Http\Presenters).

person Grzegorz Gajda    schedule 05.01.2016
comment
Ага, не повезло. Он кстати старый, расположение файлов не те, что указаны выше. - person yenerunver; 05.01.2016
comment
@yenerunver Переместите файл из каталога vendor в каталог app и измените пространство имен на App\XXX\CustomPresenter. - person Grzegorz Gajda; 05.01.2016
comment
я заставил его работать, переместив моего докладчика в App\Http\Presenters и внеся необходимые изменения. Если вы можете отредактировать свой ответ, я могу дать вам награду. - person yenerunver; 06.01.2016

вам нужно сделать дамп-автозагрузку через композитор

composer dump-autoload

для автоматической загрузки пространств имен, в зависимости от пакета, который вам, возможно, придется сделать

php artisan vendor:publish

если у него есть какие-либо файлы конфигурации, которые вам нужно создать перед использованием метода рендеринга.

Удачи

person Sari Yono    schedule 05.01.2016
comment
ответ выше решил мой вопрос, поэтому не пробовал ваш путь, который, вероятно, тоже сработает. Спасибо. - person yenerunver; 06.01.2016
comment
рад, что это сработало для вас, удачи в будущем развитии @yenerunver - person Sari Yono; 06.01.2016