PHP динамические хлебные крошки на основе URL - PullRequest
0 голосов
/ 21 сентября 2018

Я работаю над тем, чтобы заставить хлебные крошки работать правильно.

Сейчас они работают, но URL-адреса в onclick не верны.

<?php
//$url = strstr($_SERVER["REQUEST_URI"], 'admin');
$url = strstr('/content/modal/admin/content/polls.php', 'admin'); // admin/content/polls.php
$parse_url = preg_replace('/\.[^.\s]{3,4}$/', '', $url); // admin/content/polls

$array = explode("/", $parse_url);

$counter = 0;
foreach($array as $item) {
    echo '<a href="javascript:;"  onclick="initializemodal(\'' . $array[$counter] . '\')">' . $item . '</a> / ';
    $counter++;
}

Это выглядит как:

<a href="javascript:;"  onclick="initializemodal('admin')">admin</a> / 
<a href="javascript:;"  onclick="initializemodal('content')">content</a> /
<a href="javascript:;"  onclick="initializemodal('polls')">polls</a> / 

Результат, который я пытаюсь архивировать:

<a href="javascript:;"  onclick="initializemodal('admin')">admin</a> / 
<a href="javascript:;"  onclick="initializemodal('admin/content')">content</a> /
<a href="javascript:;"  onclick="initializemodal('admin/content/polls')">polls</a> / 

Как мне отредактировать мой скрипт, чтобы он работал как в примере выше?

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018

Пара замечаний

$counter = 0;
foreach($array as $item) {
    echo '<a href="javascript:;"  onclick="initializemodal(\'' . $array[$counter] . '\')">' . $item . '</a> / ';
    $counter++;
}

Foreach можно использовать как

foreach($array AS $index => $value)

То есть ваш счетчик $ не нужен, вы можете просто использовать $index.

Кроме того, теперь у вас есть $counter++; как одна строка, однако вы можете объединить ее со строкой выше:

    ... initializemodal(\'' . $array[$counter++] . '\')"...

Обратите внимание, что если вы поставите ++ за переменной, она увеличитсяПОСЛЕ того, как использовалась переменная.

$i = 0;
echo $i++; // This will print 0
echo $i++; // This will print 1
$i = 0;
echo ++$i; // This will print 1
echo ++$i; // This will print 2

Чтобы ответить на ваш вопрос, вам необходимо сохранить предыдущие пути.

$path = []
foreach($array as $value) {
    $path[] = $value; // This array will first contain only one item, then two, then three, etc.
    echo '<a href="javascript:;"  onclick="initializemodal(\'' . implode('/', $path) . '\')">' . $item . '</a> / ';
}

implode склеит все значения в$path.Сначала нечего склеивать, поэтому получится admin.Во второй итерации администратор склеивает содержимое и добавляет / между ними.и т.д.

0 голосов
/ 21 сентября 2018

Вам нужно склеить все элементы до текущего значения $ counter .Прямо сейчас вы просто используете то, на что указывает $counter, так что вы всегда получаете последний элемент, но не весь «путь».В основном вам нужен еще один цикл, подобный (не проверенный):

$counter = 0;
foreach($array as $item) {
    $tmp = [];
    for ($i=0; $i<=$counter; $i++) {
       $tmp[] = $array($i);
    }
    $path = implode('/', $tmp);
    echo '<a href="javascript:;"  onclick="initializemodal(\'' . $path . '\')">' . $item . '</a> / ';
    $counter++;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...