2012-03-06 70 views
0

我正在建立一个CMS,我有我的导航问题。我想将活动类添加到导航中的活动项目。这将正常工作,如果我不得不为每个项目一个页面,但我有其他部分和链接如何使导航项目显示正确的活动类与php

这里是我的代码:

<div id="main-menu"> 
<?php foreach ($items as $item) : ?> 
    <?php $active = ''; ?> 
    <?php if (isset($page)) : ?> 
    <?php ($item->pageId === $page->id) ? $active = 'active' : $active = ''; ?> 
    <?php endif; ?> 
    <?php if ($item->link == '') : ?> 
    <a href="<?php echo ROOT_PATH; ?>front/site/page?x=<?php echo $item->id; ?>" class="<?php echo $active; ?>"><?php echo $item->label; ?></a> 
    <?php else : ?> 
    <a href="<?php echo $item->link; ?>" class="<?php echo $active; ?>"><?php echo $item->label; ?></a> 
    <?php endif; ?> 
    <?php endforeach; ?> 

当我没有一个页面,然后我将链接提供的值指向特定部分。我怎样才能让他们都能正常工作?

+6

圣PHP代码...嘿嘿,不知道我见过有人代码的PHP之前的方式。无论如何,很难从你给的上下文中说出你的意思。也许给一些你正在获得的HTML输出,以及所需的HTML输出。然后是应该改变行为的示例URL。 – user17753 2012-03-06 21:34:46

+0

另外,当使用[三元比较](http://php.net/manual/en/language.operators.comparison.php#language.operators.comparison.ternary)尝试和设置前面的变量像'$ active = ($ item-> pageId === $ page-> id)? 'active':'';' – 2012-03-06 21:38:14

+0

我循环浏览菜单上的所有链接项目,我将活动设置为空,之后检查页面标识是否等于链接项目标识,如果是,则表示我的项目链接在它的页面上,我设置了$ active类。之后,我检查我是否没有设置页面,如果没有,我会做一些事情。例如,如果我在菜单中有5个物品链接,3个带有页面,2个没有页面,只是链接到其他不活动的东西,那么输出就是这样。 – Mythriel 2012-03-06 21:39:56

回答

0

你不需要那么多<?php ?>标签!无论如何,你的问题似乎是不正确的使用ternary operator。试试这个:

<?php 
foreach ($items as $item) : 
    $active = ''; 
    if (isset($page)) : 
     $active = ($item->pageId === $page->id) ? 'active' : ''; 
    endif; 
    if ($item->link == '') : 
     ?> 
     <a href="<?php echo ROOT_PATH; ?>front/site/page?x=<?php echo $item->id; ?>" class="<?php echo $active; ?>"><?php echo $item->label; ?></a> 
    <?php else : ?> 
     <a href="<?php echo $item->link; ?>" class="<?php echo $active; ?>"><?php echo $item->label; ?></a> 
    <?php 
    endif; 
endforeach; 
?> 
+0

同样的东西时,它不会设置类为活动状态,该语句正确设置$活动,问题是没有页面的链接 – Mythriel 2012-03-06 21:43:01

+0

您的代码表示如果没有设置“$ page”,$ $ active '等于''''。你在寻找不同的逻辑吗? – bfavaretto 2012-03-06 21:48:03

+0

是的,例如我的新闻栏目是一个模块,我的联系人是一个模块,它们被链接到,当我在新闻页面或联系页面时,我的菜单链接不活动。如果不是页面,设置$活动,使它们同时处于活动状态。 – Mythriel 2012-03-06 21:52:12

0

下面是如何在只一个对PHP标签的做到这一点:

<?php 

foreach($items as $item) 
{ 
    $active = ($item->pageId == $page->id) ? 'active' : ''; 
    if(!$item->link) 
    { 
     echo '<a href="' . ROOT_PATH . '/front/site/page?x=' . $item->id . '" class="' .$active . '">' . $item->label . '</a>'; 
    } 
    else 
    { 
     echo '<a href="' . $item->link . '" class="' .$active . '">' . $item->label . '</a>'; 
    } 
} 

?> 
+0

是的连接运算符(。)是你最好的朋友,这是我喜欢的风格。最小化php标签使得代码更易于阅读......以及人类。字符串的单个连字符表示法有助于减少转义。 – user17753 2012-03-06 21:45:56

+0

代码是这样写的,因为我在一个模板和php标签之间会插入更多的html – Mythriel 2012-03-06 21:47:58

相关问题