PHP 为导航中的活动项目提供活动 class

PHP give active class to active item in navigation

我正在尝试使用 php 为活动导航项提供 .active class,但我不知道实现此目的的任何解决方案。目前,它始终处于活动状态的第一位,即使它不是。我真的没有看到问题,所以我希望你们能帮助我。 这是我目前拥有的:

<?php
$pages = $db->queryarray("
        SELECT p.name, 
               u.url 
        FROM pages p
            , url u 
        WHERE p.active=1 
            AND p.hidden=0 
            AND p.root=0 
            AND p.menu=1 
            AND u.type='s' 
            AND u.source=p.id 
        ORDER BY p.position ASC
    ");

$i=1;

foreach($pages as $page)
{
    echo '<li>
                <a title="Pagename"'.($i==1?' class="active"':"").'href="index.php#page_'.str_replace(' ','_',strtolower($page['name'])).'">'.$page['name'].'</a>
          </li>';
    $i++;
}
?>

@mhakvoort

echo '<li><a title="Pagename" class="'.($page['active']) ? "active" : "" .'" href="index.php#page_'.str_replace(' ','_',strtolower($page['name'])).'">'.$page['name'].'</a></li>';

第一个永远为真,因为你的 if 语句 $i == 1;

要将 class 活动添加到您的活动页面,您需要这样的东西,具体取决于您的字段名称。:

在您的查询中,您需要添加 active 布尔值,并在 a 标记中检查它:

<?php
$pages = $db->queryarray("
        SELECT p.name,
               p.active, 
               u.url 
        FROM pages p
            , url u 
        WHERE p.active=1 
            AND p.hidden=0 
            AND p.root=0 
            AND p.menu=1 
            AND u.type='s' 
            AND u.source=p.id 
        ORDER BY p.position ASC
    ");

$i=1;

foreach($pages as $page)
{
    echo '<li>
                <a title="Pagename"'.($page['active']) ? 'class="active"' : "").'href="index.php#page_'.str_replace(' ','_',strtolower($page['name'])).'">'.$page['name'].'</a>
          </li>';
    $i++;
}
?>

您需要有一个标识符,哪个页面是当前页面,因此我们可以利用 $_GET php 变量。

请注意我已将 index.php#page_ 更改为 index.php?page=

foreach ($pages as $page) {
         $pageIdentifier = str_replace(' ','_',strtolower($page['name']));

         $findActivePage = isset($_GET['page']) && $_GET['page'] ==  $pageIdentifier? " class='active' ": "";

         echo '<li><a title="Pagename" '.$findActivePage.' href="index.php?page='.$pageIdentifier.'">'.$page['name'].'</a></li>';

    }




当你的锚标签是click.Note时,你也可以使用jquery来添加活动class 我已经添加了一个menu_item class 到你的锚标签。

foreach ($pages as $page) {
         $pageIdentifier = str_replace(' ','_',strtolower($page['name']));
         echo '<li><a  class="menu_item" id="page_'.$pageIdentifier.'" title="Pagename" href="index.php#page_'.$pageIdentifier.'">'.$page['name'].'</a></li>';

    }

Jquery代码

 //menu item click event.

    $("a.menu_item").on("click",function(){
        //Remove active class in all a.menu_item
        $("a.menu_item").removeClass("active");

        //Add active class to the clicked menu_item
        $(this).addClass("active");
    });