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

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

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

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

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

1

Решение

От официальная документация:

Для регистрации этого нового докладчика необходимо добавить его в конфигурацию пакета (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 будет лучше).

1

Другие решения

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

composer dump-autoload

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

php artisan vendor:publish

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

Удачи

0

По вопросам рекламы [email protected]