1
foreach ($nav_items as $nav_href=>$nav_title=>$nav_class) {
    if ($pageHref == $nav_href) {
        echo '<li class="' . $nav_class .  'active">' . $nav_title . '</li>';
    } else {
        echo '<li class="' . $nav_class . '">' . $nav_title . '</li>';
    }
}

上面这段代码有什么问题?这对应于下面的数组。

$pageLoc = 'where';
$nav_items = array(
    'index'=>'Home'==>'', 
    'where'=>'Where?'==>'dropdown'==>'', 
    'appeals'=>'Current Appeals'==>'', 
    'news'=>'Latest News'==>'', 
    'events'=>'Events'==>'', 
    'dontate'=>'Dontate'==>'', 
);

我基本上试图在列表项匹配时将一个活动类放在它的前面,$pageLoc而当它不仅仅是一个简单<li class="">的但下拉菜单项:'where?'需要一个<li class="dropdown">总是!当它处于活动状态时,它将是<li class="dropdown active">

4

4 回答 4

2

您有一个明确的语法错误:

foreach ($nav_items as $nav_href=>$nav_title=>$nav_class) {
                                            ^^^^^^^^^^^^

语法是

foreach($array as $key => $value)

你不能拥有=> $value1 => $value2 etc....

于 2013-06-14T17:06:13.167 回答
0

没有这样的语法使它变得如此简单。但这可能是您想要的:

这是创建适合您需求的嵌套数组的方式:

$nav_items = array(
    array('href' => 'index',   'title' => 'Home',            'class' => ''), 
    array('href' => 'where',   'title' => 'Where?',          'class' => 'dropdown'), 
    array('href' => 'appeals', 'title' => 'Current Appeals', 'class' => ''), 
    array('href' => 'news',    'title' => 'Latest News',     'class' => ''), 
    array('href' => 'events',  'title' => 'Events',          'class' => ''), 
    array('href' => 'dontate', 'title' => 'Dontate',         'class' => ''),                
);

根据上面的数组结构,这将是foreach供您使用的:

foreach ($nav_items as $item) {
    if ($pageHref == $item['href']) {
        echo '<li class="' . $item['class'] .  ' active">' . $item['title'] . '</li>';
    } else {
        echo '<li class="' . $item['class'] . '">' . $item['title'] . '</li>';
    }
}

演示小提琴

这里还有 2 个注释:

注意 1:中,您可以使用对象并创建一个导航项类,其中包含上面仅简单的信息array('href' => 'dontate', 'title' => 'Dontate', 'class' => '')

注2: 您的线路

echo '<li class="' . $nav_class .  'active">' . $nav_title . '</li>';

将两个类连接到一个。所以这段代码会给你dropdownactive上课。您需要在活动之前插入一个空格,否则 CSS 将无法识别这两个类。

于 2013-06-14T18:07:11.327 回答
0

你可以把它当作:

foreach ($nav_items as $nav_title=>$nav_class) {

  ....  

}

你想用 $nav_href 检查什么?

于 2013-06-14T17:10:05.767 回答
0

$nav_items是一团糟,不是一个正确的数组。

$pageLoc = 'where';
$nav_items = array('index'=>'Home==>', 'where'=>'Where?==>', 'appeals'=>'Current Appeals==>', 'news'=>'Latest News==>', 'events'=>'Events==>', 'dontate'=>'Dontate==>');


foreach ($nav_items as $nav_class=>$nav_title) {
   if ($pageLoc == $nav_href) {
         echo '<li class="' . $nav_class .  'active">' . $nav_title . '</li>';
   } 
   else {
       echo '<li class="' . $nav_class . '">' . $nav_title . '</li>';
   }
}
于 2013-06-14T17:39:44.787 回答