PHP为导航中的活动项提供活动类

PHP为导航中的活动项提供活动类,php,navigation,Php,Navigation,我试图使用php为活动导航项提供一个.active类,但我不知道有什么解决方案可以实现这一点。目前,它始终是1号活动的,即使它不是。我真的看不出有什么问题,所以我希望你们能帮我解决。 这就是我目前的情况: <?php $pages = $db->queryarray(" SELECT p.name, u.url FROM pages p , url u WHERE p.acti

我试图使用php为活动导航项提供一个.active类,但我不知道有什么解决方案可以实现这一点。目前,它始终是1号活动的,即使它不是。我真的看不出有什么问题,所以我希望你们能帮我解决。 这就是我目前的情况:

<?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++;
}
?>

由于您的if语句
$i==1,所以第一个始终为true

要将“活动”类添加到活动页面,您需要这样的内容,具体取决于字段名:

在查询中,您需要添加活动布尔值,并在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++;
}
?>

您需要有一个标识符,即哪个页面是当前页面,因此我们可以利用
$\u 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>';

    }
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");
    });

打印($pages)的结果是什么?第一个将始终处于活动状态,因为您将$i设置为1,如果$i==1,则页面将处于活动状态。打印结果为:数组([0]=>Array([name]=>name[url]=>/name.html)[1]=>Array([name]=>About-Us[url]=>/About-Us.html)[2] =>数组([name]=>产品[url]=>/The-product.html)[3]=>数组([name]=>Contact[url]=>/Contact.html))@marijn你只想要php解决方案吗?@Jamerswart lopez不需要,但我更喜欢这样的PHPLike我在导航栏中得到了结果Active我会尝试找出问题所在。你能以编辑代码的方式显示代码吗?我添加了你的精确代码,并合并了编辑的部分。现在,代码也在一个代码块中k以上回音“
  • ”;链接将始终处于激活状态,因为WHERE is
    p.active=1
    ,这是结果
    $page['active']
    并将始终
    1
    使用您上次的编辑@mhakvoort,它给了我一个空白页面,控制台中没有错误。downvoter请继续。解释为什么我的答案需要被否决。您的解决方案让我非常接近,但有一个问题,我需要index.php?page=成为index.php#page u,因为我正在使用其他脚本g、 更改后返回不起作用。我现在会尝试解决它,但到目前为止它非常有用。这就是为什么要询问您是否需要仅使用php的解决方案的原因。我稍后会更新我的答案,因为我认为需要一点javascript。很抱歉,我没有真正理解这个问题,但我感谢您的帮助help@marijn我已经更新了我的answer请检查。希望这对您有帮助:D
    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>';
    
        }
    
     //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");
        });