【问题标题】:Laravel 7.x with Nova Can't use menu from optimistdigital/nova-menu-builder带有 Nova 的 Laravel 7.x 无法使用来自 optimistdigital/nova-menu-builder 的菜单
【发布时间】:2020-10-05 06:34:12
【问题描述】:

我是 Laravel Nova 的新手......我刚刚安装了 optimistdigital/nova-menu-builder 以便以比 nova 生成的更有效的方式生成菜单。我的菜单结构非常复杂,需要更多控制。无论如何,我安装了软件包并创建了一个菜单。我现在想将它加载到侧边栏中,但不知道它是如何工作的......

在我添加的navigation.blade.php文件中:

@menu("admin")

admin 应该是菜单 slug

刷新后,什么也没发生。所以我尝试了一些更基本的东西。我删除了@menu 并添加了“hello world”。它没有出现......所以我运行了以下命令:

php artisan config:clear
php artisan cache:clear
php artisan nova:publish

所有 3 个都执行,没有任何错误。但是侧边栏仍然没有显示我的 hello world。

所以我的问题如下。如何在刀片视图中反映我的更改? @menu("") 是使用 optimistdigital/nova-menu-builder 包的正确方法吗?文档似乎缺少有关如何使用您创建的菜单的部分......提前谢谢!

这是我的布局页面

<router-link exact tag="h3"
    :to="{
        name: 'dashboard.custom',
        params: {
            name: 'main'
        }
    }"
    class="cursor-pointer flex items-center font-normal dim text-white mb-8 text-base no-underline">

    <svg>[Long SVG string]</svg>

    <span class="text-white sidebar-label">{{ __('Dashboard') }}</span>
</router-link>


hello world
@menu("admin")

@if (\Laravel\Nova\Nova::availableDashboards(request()))
    <ul class="list-reset mb-8">
        @foreach (\Laravel\Nova\Nova::availableDashboards(request()) as $dashboard)
            <li class="leading-wide mb-4 ml-8 text-sm">
                <router-link :to='{
                    name: "dashboard.custom",
                    params: {
                        name: "{{ $dashboard::uriKey() }}",
                    },
                    query: @json($dashboard->meta()),
                }'
                exact
                class="text-white no-underline dim">
                    {{ $dashboard::label() }}
                </router-link>
            </li>
        @endforeach
    </ul>
@endif

【问题讨论】:

  • 你能发布你的布局和/或包含navigation.blade.php的模板吗?
  • 我编辑了我的消息

标签: laravel laravel-7 laravel-nova


【解决方案1】:

感谢韭菜,我能够找到如何检索菜单并以此为基础。

所以我的第一个问题是我编辑了错误的文件。您需要先执行以下操作:

复制nova/resources/views/layout.blade.php中的文件并放入 /resources/views/vendor/nova.

执行此操作后,您的更改将正确反映。我在 nova 视图文件夹中移动了所有文件。

在新创建的 /resources/views/vendor/nova/layout.blade.php 文件中替换此代码:

@foreach (\Laravel\Nova\Nova::availableTools(request()) as $tool)
    {!! $tool->renderNavigation() !!}
@endforeach

使用此代码:

@php
    $menus = [
        nova_get_menu('admin'),
    ];
@endphp

<section style="width: 100%; position: absolute; top: 60px;">
    <ul class="sidebar-menu">
        <li class="sidebar-header">MAIN NAVIGATION</li>
        <li>
            <a href="/nova">
                <i class="fa fa-dashboard"></i> <span>Dashboard</span></i>
            </a>
        </li>
        @foreach ($menus as $menu)
            @continue(is_null($menu))
                <li>
                    <a href="">
                        <i class="fa fa-dashboard"></i> <span>{{ $menu['name'] }}</span> @if ($menu['menuItems'])<i class="fa fa-angle-left pull-right"></i> @endif
                    </a>
                    @if ($menu['menuItems'])
                        <ul class="sidebar-submenu">
                            @foreach (($menu['menuItems'] ?? []) as $item)
                                <li>
                                    @if ($item['type'] === 'text')
                                    <a href="">{{ $item['name'] }}</a>
                                    @else
                                        <a href="{{ $item['value'] }}"
                                            target="{{ $item['target'] }}"
                                            @if ($item['target'] === '_blank') rel="noopener" @endif><i class="fa fa-circle-o"></i> {{ $item['name'] }}</a>
                                    @endif
                                </li>
                            @endforeach
                        </ul>
                    @endif
                </li>
        @endforeach
        <li>
            <a href="/nova/logout">
                <i class="fa fa-sign-out"></i> <span>Logout</span></i>
            </a>
        </li>
    </ul>
</section>

将“admin”替换为菜单中的 slug 您可以将 HTML 更改为您想要的任何内容。

我用https://www.jqueryscript.net/menu/Stylish-Multi-level-Sidebar-Menu-Plugin-With-jQuery-sidebar-menu-js.html

结果是:

如果需要,您可以添加多个这样的菜单

@php
    $menus = [
        nova_get_menu('admin'),
        nova_get_menu('user'),
        nova_get_menu('pages'),
        nova_get_menu('configuration'),
        nova_get_menu('store'),
    ];
@endphp

foreach 循环会按照您将它们放入 $menus 数组的顺序将它们全部添加到您的页面中。

祝你好运!

【讨论】:

    【解决方案2】:

    引用自 GitHub 上的this issue

    [nova_get_menu()] 只返回一个 PHP 数组。您必须自己处理创建 HTML。

    从 2.3.7 版开始,您需要自己使用此函数来生成您自己的菜单 HTML:

    $menuJson = nova_get_menu('admin')
    
    // Returns:
    // [
    //     'id',
    //     'name',
    //     'slug',
    //     'locale',
    //     'menuItems' => []
    // ]
    

    【讨论】:

    • 谢谢,它启发了我,但这只是问题的一半。我张贴了一个完整的遮阳篷。谢谢你的时间韭菜!
    猜你喜欢
    • 1970-01-01
    • 2022-10-19
    • 2019-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多