5

我正在尝试通过链接在 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>

但现在我面临着网址的问题。我正在获取包含所有后代的路线的当前网址。有人可以帮助我如何添加指向面包屑的链接吗?

谢谢。

4

6 回答 6

13

如果我正确理解您的问题,您只需填写链接的 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>
于 2016-06-22T13:04:48.627 回答
11

这对我有用,在 Laravel 5.4 中尝试过。*

要求此代码完美运行:所有 URL 都应在您的路由文件中具有层次结构模式

下面的代码将为每个路径创建面包屑 -

<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

希望这可以帮助!

于 2018-02-20T14:20:24.067 回答
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 放在第一个面包屑中。

同样,您可能已经有了一个解决方案,但这可能适用于不想添加包以获取面包屑的人。

于 2016-07-20T20:58:21.703 回答
0

我写了一个可以动态处理 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])
于 2020-10-25T06:26:16.513 回答
0

只需/在任何链接之前添加斜杠即可将后裔添加到这样的域名

<a href="/YourLink" ></a>

于 2016-06-22T12:27:44.677 回答
0

我喜欢@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>
于 2021-12-22T20:57:37.663 回答