sleeping-owl / admin

Administrative interface builder for Laravel
http://sleeping-owl.github.io/
MIT License
504 stars 259 forks source link

Ошибка при попытке редактирования дерева (reorder) с использованием Tabs #274

Closed manzor29 closed 8 years ago

manzor29 commented 9 years ago

В админке создал вывод табами для модели Page. Создал два таба: datatables и tree. При попытке отредактировать порядок веток в табе tree изменения не сохраняются в БД. Анализ POST-запроса показывает, что возникает внутренняя ошибка сервера; Laravel выдает такую ошибку:

FatalErrorException in DisplayTree.php line 118: Call to undefined method SleepingOwl\Admin\Display\DisplayTabbed::repository()

Видимо, ошибка возникает из-за того, что при использовании табов метод repository применяется к объекту DisplayTabbed, а не DisplayTree. Прошу исправить (если баг) либо подсказать, что я сделал не так. Вот код настройки моей модели:

use App\Page;

Admin::model('App\Page')->title('Page')->display(function ()
{
    $display = AdminDisplay::tabbed();
    $display->tabs(function ()
    {
        $tabs = [];

        $main = AdminDisplay::datatables();
        $main->columns([
                Column::string('lft'),
                Column::string('title_menu')->label('Заголовок в меню'),
                Column::string('title_page')->label('Заголовок на странице'),
                Column::string('title_bread')->label('Заголовок в навигационной строке'),
                Column::custom()->label('Опубликовано')->callback(function ($instance)
                {
                    return ($instance->published == 0) ? '-' : '✓';
                }),
        ]);

        $tabs[] = AdminDisplay::tab($main)->label('Заголовки');

        $tree = AdminDisplay::tree();
        $tree->value('title_menu');
        $tabs[] = AdminDisplay::tab($tree)->label('Дерево')->active(true);

        return $tabs;
    });
    return $display;

})->createAndEdit(function ()
{
    $list = Page::getNestedList('title_menu', 'id', '...');

    $form = AdminForm::form();
    $form->items([

        FormItem::columns()->columns([
            [
                FormItem::text('title_menu', 'Заголовок в меню'),
                FormItem::text('title_page', 'Заголовок на странице'),
                FormItem::text('title_bread', 'Заголовок в навигационной строке'),
                FormItem::select('parent_id', 'ID родителя')->options($list)->nullable(),
                FormItem::select('color_id', 'Цвет')->model('App\Color')->display('title'),
                FormItem::checkbox('show_in_menu', 'Показывать в меню'),
                FormItem::checkbox('show_in_tree', 'Показывать на карте'),
                FormItem::checkbox('published', 'Опубликовано'),
                FormItem::text('route', 'Роут'),
            ],
            [
                FormItem::text('alias', 'Алиас'),
                FormItem::text('controller', 'Контроллер'),
                FormItem::ckeditor('content', 'Содержание'),
            ]
        ])
    ]);
    return $form;
});
eugene-holiday commented 9 years ago

Такая же фигня, я завёл отнаследованную модель PageTree и прописал ей свой tree display

$tree = Admin::Model(\App\PageTree::class)->display();