Laravel 7.x 与 Nova 无法使用来自 optimistdigital/nova-menu-builder 的菜单
Laravel 7.x with Nova Can't use menu from optimistdigital/nova-menu-builder
我是 Laravel Nova 的新手...我刚刚安装了 optimistdigital/nova-menu-builder 以便以比 nova 生成的菜单更有效的方式生成菜单。我的菜单结构非常复杂,需要更多控制。不管怎样,我安装了这个包并创建了一个菜单。我正处于想将其加载到侧边栏但无法弄清楚它是如何工作的地步......
在navigation.blade.php文件中我添加了:
@menu("admin")
管理员应该是菜单别名
刷新后,没有任何反应。所以我尝试了一些更基本的东西。我删除了 @menu 并添加了 "hello world" 。它没有出现...所以我运行以下命令:
php artisan config:clear
php artisan cache:clear
php artisan nova:publish
所有 3 个都已执行,没有任何错误。但是侧边栏还是没有显示我的hello world
所以我的问题如下。如何在 blade 视图中反映我的更改? @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
this issue 在 GitHub 上的引述:
[nova_get_menu()
] only returns a PHP array. You have to handle creating the HTML yourself.
从2.3.7版本开始,您需要自己使用这个功能来生成自己的菜单HTML:
$menuJson = nova_get_menu('admin')
// Returns:
// [
// 'id',
// 'name',
// 'slug',
// 'locale',
// 'menuItems' => []
// ]
谢谢韭菜,我找到了如何检索菜单并以此为基础的方法。
所以我的第一个问题是我编辑了错误的文件。您需要先执行以下操作:
copy the file in nova/resources/views/layout.blade.php and put it in
/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" 替换为您的菜单项
您可以将 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 数组的顺序将它们全部添加到您的页面。
祝你好运!
我是 Laravel Nova 的新手...我刚刚安装了 optimistdigital/nova-menu-builder 以便以比 nova 生成的菜单更有效的方式生成菜单。我的菜单结构非常复杂,需要更多控制。不管怎样,我安装了这个包并创建了一个菜单。我正处于想将其加载到侧边栏但无法弄清楚它是如何工作的地步......
在navigation.blade.php文件中我添加了:
@menu("admin")
管理员应该是菜单别名
刷新后,没有任何反应。所以我尝试了一些更基本的东西。我删除了 @menu 并添加了 "hello world" 。它没有出现...所以我运行以下命令:
php artisan config:clear
php artisan cache:clear
php artisan nova:publish
所有 3 个都已执行,没有任何错误。但是侧边栏还是没有显示我的hello world
所以我的问题如下。如何在 blade 视图中反映我的更改? @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
this issue 在 GitHub 上的引述:
[
nova_get_menu()
] only returns a PHP array. You have to handle creating the HTML yourself.
从2.3.7版本开始,您需要自己使用这个功能来生成自己的菜单HTML:
$menuJson = nova_get_menu('admin')
// Returns:
// [
// 'id',
// 'name',
// 'slug',
// 'locale',
// 'menuItems' => []
// ]
谢谢韭菜,我找到了如何检索菜单并以此为基础的方法。
所以我的第一个问题是我编辑了错误的文件。您需要先执行以下操作:
copy the file in nova/resources/views/layout.blade.php and put it in /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" 替换为您的菜单项 您可以将 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 数组的顺序将它们全部添加到您的页面。
祝你好运!