2016-11-06 3 views
1

Okay, ein bisschen schwer zu erklären, aber was ich versuche zu tun, ist ein Subheader für meine Website zu erstellen. Der Sub-Header basiert auf der aktuellen URL, verwenden Sie sub/test/3rdleveldown/blog/post als ein Beispiel. Was ich die subheader tun müssen, ist, machen einen separaten Link für jede Ebene der URLPHP: Zählen Array-Elemente und dann '../' foreach Array-Element

Beispiel: Dies würde produzieren:

<a href="../../../../sub">Sub</a> >> <a href="../../../test">Test</a> >> <a href="../../3rdleveldown">3rdleveldown</a> >> <a href="blog">blog</a>

Dies würde dem Benutzer erlauben, nach unten zu gehen, URL-Ebenen leicht.

Was ich habe es geschafft, zu tun, ist dies

<div class="subheader"> 
    <?php 
    $uri = $_SERVER['REQUEST_URI']; 
    $array = explode('/', $uri); 
    $count = count($array); 
    ?> 
    @foreach ($array as $sub) 
    <a href="NOW HERE I NEED TO ENTER the ../ based on how far down the link is in the array {{ $sub }}">{{ $sub }}</a> >> 
    @endforeach 
</div> 

Kann jemand mir die ../ für jede Ebene nach unten bekommen helfen?

+0

Eine Frage ... warum verwenden Sie in Ihrem Beispiel nicht 'blog' und' post'? Warum nicht 'Sub >>Test >>3rdleveldown >>Blog >>Post'? Und nach welchen Kriterien werden diese Teile nicht verwendet? –

+0

Kein Grund, ich werde es jetzt bearbeiten – Albert

+0

Ah, okay! Ich schreibe fast eine Antwort. –

Antwort

1

Ich habe es herausgefunden, es gibt wahrscheinlich einen besseren Weg, aber das sollte es tun.

<div class="subheader"> 
    <?php 
    $uri = $_SERVER['REQUEST_URI']; 
    $breadcrums = explode('/', $uri); 
    array_pop($breadcrums); 
    $count = count($breadcrums); 
    --$count; 
    $crumlevel = ''; 
    $ocount = $count; 
    ?> 
    @foreach ($breadcrums as $breadcrum) 
    <?php 
    for($count; !$count == 0 ; $count--){ 
     $crumlevel = '../'.$crumlevel; 
    } 
    $count = --$ocount; 

    ?> 
    <a href="{{ $crumlevel.$breadcrum }}">{{ $breadcrum }}</a> >> 
    <?php $crumlevel = '../' ?> 
    @endforeach 
</div> 
-1

Sie können einfach segments Methode auf der $request Variable verwenden.

$segments_arr = request()->segments(); 
// It would give you an array of URL sub-parts as: 
// ['Sub', 'test', '3rdleveldown']; 

Dann können Sie dieses Array auf eigene Faust manipulieren. Der Trick, die Links zu erstellen, die Sie verwenden, ist der eine Weg oder Sie können andere Laravel-Pakete zum Erstellen von Breadcrumbs auschecken.

aktualisieren

Zu der Zeit durch die Segmente Array von iterieren, können Sie einen Link mithilfe Wunsch des request()->root() erstellen.

$root_path = request()->root(); 
foreach($segments_arr as $segment) { 
    $href_str = $root_path . '/' . implode('/', array_slice($segments_arr, 0, $key + 1)); 
} 
/* So for example if your root url is - www.example.com, then 
    the output on $key = 0; 

    www.example.com/segment1 --- $key = 0 
    www.example.com/segment1/segment2 --- $key = 1 
*/ 
+2

Ich glaube, er hat diesen Teil schon alleine behandelt. Was er braucht, ist der Teil, den du verlässt, "manipuliere dieses Array auf eigene Faust". Was von Ihrer Antwort übrig bleibt, ist der Ratschlag, das Brotkrumen-Paket zu verwenden, das eher ein Kommentar als eine Antwort ist. – RST

+0

@RST, ich habe meine Antwort aktualisiert bitte sehen Sie sie sich an ... –

2

Es sollte so etwas sein:

<?php 

$path="sub/test/3rdleveldown/blog/post"; 
$arr = explode("/",$path); 
array_pop($arr); 
$sarr = sizeof($arr); 

$count = 0; 
$links = Array(); 

while ($count < $sarr) { 
    $myhref = "<a href=\""; 
    /* 
    This will add the neccessary number of ../ 
    */ 
    for($i=1;$i<=($sarr-$count);$i++) $myhref .= "../"; 
    $myhref .= $arr[$count] . "\">" . ucfirst($arr[$count]) . "</a>"; 
    echo $myhref; 
    array_push($links, $myhref); 
    $count++; 
} 

print_r($links); 

?> 

Ausführen dieses Codes finden Sie

Array 
(
    [0] => <a href="../../../../sub">Sub</a> 
    [1] => <a href="../../../test">Test</a> 
    [2] => <a href="../../3rdleveldown">3rdleveldown</a> 
    [3] => <a href="../blog">Blog</a> 
) 

bekommen das ist, was Sie brauchen, glaube ich.

+0

Ich würde den Code etwas vereinfachen, indem ich 'str_pad()' anstelle der 'for'-Schleife verwende. – RST

+0

Es ist eine Idee. Posten Sie es und ich werde es verbessern. –

+1

Nicht so viel von einem Deal, ich habe Ihre Antwort – RST