2016-11-06 2 views
1

Хорошо, немного сложно объяснить, но то, что я пытаюсь сделать, - создать подзаголовок для моего сайта. Подзаголовок будет основан на текущем URL-адресе, который может использовать в качестве примера sub/test/3rdleveldown/blog/post. Что мне нужно подзаголовок, чтобы сделать это, сделать отдельную ссылку для каждого уровня URLPHP: подсчитайте элементы массива, а затем удалите элемент «../» foreach array

Пример: Это будет производить:

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

Это позволит пользователю идти вниз Уровни URL легко.

То, что я сумел сделать это

<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> 

Может кто-нибудь помочь мне получить ../ для каждого уровня вниз?

+0

Один вопрос ... почему вы не используете 'blog' и' post' в вашем примере? Почему не 'Sub >>Test >>3rdleveldown >>Blog >>Post'? И каковы критерии не использования этих частей? –

+0

Нет причин, я отредактирую его сейчас – Albert

+0

А, ладно! Тогда я почти отправляю ответ. –

ответ

1

Понял, что есть лучший способ сделать это, но это должно быть сделано.

<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

Вы можете просто использовать метод segments на переменной $request.

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

Тогда вы можете манипулировать этим массивом самостоятельно. Трюк создания ссылок, которые вы используете, является одним из способов, или вы можете проверить другие пакеты Laravel для создания Breadcrumbs.

Update

Во время перебора массива сегментов, вы можете создать ссылку с помощью запроса-х request()->root().

$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

Я думаю, что он уже закрыл эту часть самостоятельно. То, что ему нужно, это та часть, которую вы оставляете, «манипулировать этим массивом самостоятельно». Из вашего ответа остается совет использовать пакет панировочных сундуков, что является скорее комментарием, чем ответом. – RST

+0

@RST, я обновил свой ответ, пожалуйста, взгляните на это ... –

2

Это должно быть что-то вроде:

<?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); 

?> 

Выполнение этого кода вы получите

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> 
) 

который, что вам нужно, я считаю.

+0

Я бы немного упростил код, используя 'str_pad()' вместо 'for'-loop – RST

+0

Это идея. Отправьте его, и я подниму его. –

+1

Не так много, я поддержал ваш ответ – RST

Смежные вопросы