PHP динамическая навигация меню активного стиля - PullRequest
0 голосов
/ 05 февраля 2012

Я хочу создать динамическое меню на PHP, и в зависимости от того, на какой странице они находятся, меню будет иметь разные стили.У меня есть это, но это не так, как я хочу: (

Это мой массив, содержащий информацию из базы данных

Array(

    [Home] => Array
        (
            [url] => Home
            [name] => Home
            [is_home] => 1
        )

    [About] => Array
        (
            [url] => About
            [name] => About
            [is_home] => 0
        )

    [Contact] => Array
        (
            [url] => Contact.php
            [name] => Contact
            [is_home] => 0
        )

)

Это то, что у меня сейчас есть,

    if(isset($_GET["p"])) {
     if(in_array($page_name, $navigation[$page_name])) {
          $navigation[$page_name]["name"] = "<span>{$navigation[$page_name]["name"]}</span>";
     }
}
foreach ($navigation as $nav) {
     echo "<li><a href=\"" . strtolower($nav["url"]) . "\">{$nav["name"]}</a></li>";
}

Так выглядит переменная page_name

$page_name = current(explode(".", ucfirst(strtolower($_GET["p"]))));

Как вы можете видеть, это вставляет теги span в имя меню навигации, так что это работает, но это не так, как я хочу.Я хочу добавить class = "active" к элементу списка, который является текущей страницей. Я просто не знаю, как это сделать

Надеюсь, вы понимаете, что я имею в виду, и извините за любые грязные отступы, которые произошлипри вставке кода здесь.

// Редактировать

Код выборки и массива

$mysql->query("SELECT `page_name`, `is_home` FROM `pages` ORDER BY `order` ASC");

        $navigation_items = array();
        while ($mysql->fetch($row)){
            $navigation_items[] = array(
                "url"   => $row["page_name"],
                "name"  => current(explode(".", $row["page_name"])),
                "is_home"  => $row["is_home"]
            );
        }

        return $navigation_items;

1 Ответ

0 голосов
/ 05 февраля 2012

Прежде всего, предоставленный вами массив переформатируется, что означает, что вы изменили индексы на имена страниц, которые не нужны.Вот как вы можете достичь того, что вы хотите:

<?php
$menu = $Db->fetchAll("SELECT * FROM `menu`"); //or whatever method you're using to get data from the database.
$current = null;
if(isset($_GET['p'])) {
  $current = current(explode(".", ucfirst(strtolower($_GET["p"]))));
}
$navigation = '';
for($i=0;$i<count($menu);$i++) {
  $url = ucfirst(strtolower($menu[$i]['url']));
  if($current == $url)
    $class = ' class="active"';
  else
    $class = '';
  $name = '<span'.$class.'>'.$menu[$i]['name'].'</span>';
  $navigation .= "<li><a href='{$url}'>{$name}</a></li>";
}
?>
...