Laravel 带有链接的动态面包屑
Posted
技术标签:
【中文标题】Laravel 带有链接的动态面包屑【英文标题】:Laravel dynamic breadcrumbs with links 【发布时间】:2016-10-24 07:38:46 【问题描述】:我正在尝试在 laravel 中使用链接实现动态面包屑。我通过以下代码成功渲染了面包屑,但没有链接。
<ol class="breadcrumb">
<li><a href="#"><i class="fa fa-dashboard"></i>Marketplace</a></li>
@foreach(Request::segments() as $segment)
<li>
<a href="#">$segment</a>
</li>
@endforeach
</ol>
但现在我遇到了网址问题。我正在获取包含所有后代的路线的当前网址。有人可以帮助我如何添加指向面包屑的链接吗?
谢谢。
【问题讨论】:
提供 url 示例 URL 和生成的面包屑,以便我们为您提供相应的帮助 我推荐github.com/davejamesmiller/laravel-breadcrumbs @Qazi Url 将是这样的:marketplace.dev/admin/types/create 并且面包屑应该像 admin > types > create @Jeff 我查了一下,那将是我的第二个选择。我试图用一个简单的函数来处理它。因为上面的代码给了我需要的路由数组。我只想知道,如果我有一些功能可以发送每个路由名称,如下面的 URL marketplace.dev/admin/types/create 如果我发送“类型”,那么它会给出当前控制器或路径。这样我就可以只使用一个功能。请让我知道我是否走对了路,还是应该立即使用面包屑库?谢谢。 @Jeff,我使用了那个库,它很棒。在 laravel 5 上工作得很好。改变了我通过自己的函数处理面包屑的想法。 【参考方案1】:我喜欢@rohankhude 提供的解决方案,但在第一段(市场)之后没有显示“/”。所以这是一个干净的代码。
<div class="breadcrumb">
<ul>
<li>
<a href=" route('welcome') " class="inactive">Home</a>
</li>
<?php $link = "" ?>
@for($i = 1; $i <= count(Request::segments()); $i++)
@if($i < count(Request::segments()) & $i > 0)
<?php $link .= "/" . Request::segment($i); ?>
@if ($i == 1)
<a href="<?= $link ?>" class="inactive">/ ucwords(str_replace('-',' ',Request::segment($i)))</a>
@else
<a href="<?= $link ?>" class="inactive"> ucwords(str_replace('-',' ',Request::segment($i)))</a>
@endif
@else
<a class="active">/ ucwords(str_replace('-',' ',Request::segment($i)))</a>
@endif
@endfor
</ul>
</div>
【讨论】:
【参考方案2】:我写了一个可以动态处理 laravel 资源( index | edit | create )路由的代码:
自定义面包屑 => custom.blade.php
@php
$segments=[];
$l=count(Request::segments())-1
@endphp
@switch(Request::segments()[$l])
@case('edit')
@php
$l--;
$segments=array_slice(Request::segments(),0,$l);
$segments[]=$model->slug // Model that passed to this included blade file
@endphp
@break
@default
@php $segments=Request::segments() @endphp
@endswitch
@php
$link=''
@endphp
@foreach($segments as $sg)
@php $link.='/'.$sg @endphp
@if($loop->index<$l)
<li class="breadcrumb-item">
<a href="$link">ucfirst($sg=='admin'?'home':$sg)</a>
</li>
@else
<li class="breadcrumb-item active">
ucfirst($sg)
</li>
@endif
@endforeach
使用自定义面包屑 => example.balde.php
@include('admin.vendor.breadcrumb.custom',['model'=> $articles])
【讨论】:
【参考方案3】:只需在任何链接前添加斜杠/
即可将后裔添加到域名
像这样
<a href="/YourLink" ></a>
【讨论】:
【参考方案4】:这对我有用,在 Laravel 5.4 中尝试过。*
此代码完美运行的要求:所有 URL 都应在您的路由文件中具有层次结构模式
以下代码将为每个路径创建 crumb -
<a href="/">Home</a> >
<?php $link = "" ?>
@for($i = 1; $i <= count(Request::segments()); $i++)
@if($i < count(Request::segments()) & $i > 0)
<?php $link .= "/" . Request::segment($i); ?>
<a href="<?= $link ?>"> ucwords(str_replace('-',' ',Request::segment($i)))</a> >
@else ucwords(str_replace('-',' ',Request::segment($i)))
@endif
@endfor
所以 URL 的面包屑 your_site.com/abc/lmn/xyz
将是 - Home > abc > lmn > xyz
希望这会有所帮助!
【讨论】:
谢谢这很好用。对于这个小而简单的代码,我为什么要使用 package.json 呢?再次感谢。我不知道为什么没有人放弃投票。 到目前为止,这段代码对我来说非常棒。我为它创建了一个部分模板,所以我不必复制代码。我将代码粘贴到~/views/breadcrumbs.blade.php
,然后将其称为@include('breadcrumbs')
。
我不明白为什么人们在完美运行的情况下推荐包!!【参考方案5】:
我不确定您是否已经找到了解决方案,但我想出了一种方法来解决我的项目。它可能会为您的实施派上用场。
我最终要么将整个 url 添加到链接中,要么只添加段,这是不可取的,因此使用数组切片我从数组中的 0 索引开始切片,并且只切片直到循环的当前迭代,然后将数组内爆成一个字符串,然后使用 URL::to 创建链接。
<ol class="breadcrumb">
<li>
<i class="fa fa-home"></i>
<a href="route('admin.index')">HOME</a>
</li>
@for($i = 2; $i <= count(Request::segments()); $i++)
<li>
<a href=" URL::to( implode( '/', array_slice(Request::segments(), 0 ,$i, true)))">
strtoupper(Request::segment($i))
</a>
</li>
@endfor
</ol>
您会注意到,我只从 2 ($i = 2) 开始我的迭代,因为我的应用程序基础 url 从 /admin 开始,我手动将我的 home Url 放在第一个面包屑中。
同样,您可能已经有了一个解决方案,但是这可能适用于不想添加包以获取面包屑的人。
【讨论】:
是的,我最终得到了一个库,它可以提供很多帮助并自行管理许多事情。但是您的解决方案似乎是我想要做的。我也一定会尝试的。谢谢你的帮助。 :) 很高兴你能发现它有用 这个很有用【参考方案6】:如果我正确理解您的问题,您只需填写链接的 URL。这是未经测试的,但我认为它应该可以工作。
<ol class="breadcrumb">
<li><a href="#"><i class="fa fa-dashboard"></i>Marketplace</a></li>
<?php $segments = ''; ?>
@foreach(Request::segments() as $segment)
<?php $segments .= '/'.$segment; ?>
<li>
<a href=" $segments ">$segment</a>
</li>
@endforeach
</ol>
【讨论】:
感谢您的回复。我已经尝试过了,但它也会与其他链接和命名空间产生问题。我想我应该去一些图书馆而不是这个。无论如何感谢您的帮助。 :)以上是关于Laravel 带有链接的动态面包屑的主要内容,如果未能解决你的问题,请参考以下文章