LaravelRUS / SleepingOwlAdmin

🦉 Administrative interface builder for Laravel (Laravel admin)
http://sleepingowladmin.ru/
MIT License
800 stars 216 forks source link

Как добавить два Badge на один пункт меню #240

Closed CrazyRedScorp closed 8 years ago

CrazyRedScorp commented 8 years ago

Доброго времени суток. Подскажите, как добавить два ярлыка Badge на пункт меню, если такое вообще возможно?

При попытке вызвать два раза подряд метод AddBadge - в меню будет высвечиваться только последний. А при попытке передать массив/набор получаем ошибку:

Method Illuminate\View\View::__toString() must not throw an exception, caught ErrorException: htmlentities() expects parameter 1 to be string, array given (View: /vendor/laravelrus/sleepingowl/resources/views/default/_partials/navigation/badge.blade.php)
CrazyRedScorp commented 8 years ago

Желательно описать функционал добавления ярлыков при использовании "конфигурации моделей через сервис провайдер", т.е. в методе:

public function initialize()
{
    app()->booted(function() {
        \AdminNavigation::getPages()->findById('menuId')
            ->addPage(new Page(\App\MyModels::class))
                ->setIcon('fa fa-fax')
                ->setPriority(0)
                ->addBadge(function() {

А еще хотелось бы иметь возможность по разному раскрашивать ярлыки типа так: 32c5b5689c

butschster commented 8 years ago

Метод addBadge на входе ожидает класс реализующий интерфейс KodiComponents\Navigation\BadgeInterface. Т.е. тебе необходимо создать свой класс, который реализует данный интерфейс и в нем может реализовать вывод бейджев так как тебе угодно.

Butochnikov commented 8 years ago

сразу в доку решения складывать или завести раздел tips and tricks

CrazyRedScorp commented 7 years ago

Все руки ~мозги~ не доходят сделать по уму, однако что есть. Скажу сразу, как всегда, делалось на скорую руку (еще в августе по совету Павла) и мое решение грубо говоря притянуто за уши. Итак:

  1. создал /app/MyBadge.php
  2. создал /resources/views/includes/partials/badge.blade.php
  3. изменил в админ-модели добавление беджа /app/Http/Admin/aClient.php
  4. получил вот такую шляпу badge_01
  5. А все потому что не смог отцепиться от основного шаблона /vendor/laravelrus/sleepingowl/resources/views/default/_partials/navigation/badge.blade.php и пришлось его целиком заменить просто на: {!! $value !!}
  6. Получил почти что требовалось: badge_02

Из косяков:

  1. конечно же правка основного шаблона в vendor ~по рукам был бит и не один раз~ жескач еще тот, но, увы не знаю как отцепиться от него. Планировалось чтобы все варилось на уровне моих шаблонов из моей папки /resources/views/. Пробовал по разному подкладывать шаблоны в /resources/views/vendor/sleepingowl/..... и играться с их подключением в $view = config('navigation.view.badge', 'navigation::badge'); и выводом через return, но не получилось, упорно тянет из vendor.
  2. неудобная передача параметров, хотелось бы передавать в виде [11, 'danger'],[22, 'info'],....
  3. при выводе 5 значений заметно что они наплывают на само название в меню, хотя и при двух значения скажем 1234 и 5678, будет тоже самое.

Хотя если посмотреть что на выхлопе в html, то будет http://laravel.io/bin/eDz1B А хотелось бы получить вот так http://laravel.io/bin/MkaV8 Почему хотелось бы: a. во-первых, чтобы со временем засунуть туда еще и hint всплывающий (и передавать его третьим параметром) b. во-вторых, если у спана убрать position: absolute; в стиле: badge_04 то получим практически что и хотелось: badge_03 Хотелки юзались на прямую в браузере Chrome, до реализации на уровне своего класса - не дополз. В связи с чем, многоуважаемые гуру, может возьметесь за реализацию правильного решения или как-то докостылить/~улучшить~/~отпимизировать~/~свое мнение~ это?

sngrl commented 7 years ago

Просто пишу сообщить, что вот эта проблема при использовании addBadge() все еще актуальна:

В принципе решается созданием объекта бейджа, вызовом у него setHtmlAttributes с нужным классом и добавлением через setBadge().

ghost commented 7 years ago

@sngrl Код пожалуйста.

sngrl commented 7 years ago

При вот таком коде получаем абракадабру:

->addBadge(new Badge(55), ['class' => 'label-primary'])

А так все ок:

->setBadge((new Badge(55))->setHtmlAttributes(['class' => 'label-primary']))

ghost commented 7 years ago

@sngrl значит нужно выпилять - либо стандартизировать.