Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用php使导航项显示正确的活动类_Php_Foreach_Navigation - Fatal编程技术网

如何使用php使导航项显示正确的活动类

如何使用php使导航项显示正确的活动类,php,foreach,navigation,Php,Foreach,Navigation,我正在建立一个CMS,我的导航有问题。我想将该类添加到导航中的活动项中。如果每个项目都有一个页面的话,这会很好,但是我有其他的部分和链接 这是我的密码: <div id="main-menu"> <?php foreach ($items as $item) : ?> <?php $active = ''; ?> <?php if (isset($page)) : ?> <?php ($item->pageId

我正在建立一个CMS,我的导航有问题。我想将该类添加到导航中的活动项中。如果每个项目都有一个页面的话,这会很好,但是我有其他的部分和链接

这是我的密码:

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


当我没有页面时,我会给链接提供指向特定部分的值。我怎样才能使它们都正常工作?

您不需要那么多的
标签!无论如何,您的问题似乎是对的使用不正确。试试这个:

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

以下是仅使用一对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>';
   }
}

?>


神圣的php标签……嘿,我不确定以前是否见过有人用这种方式编写php代码。不管怎样,很难从你给出的上下文中说出你的意思。也许给出一些您当前获得的HTML输出示例,以及所需的HTML输出。然后是要更改行为的URL示例。另外,在使用时,请尝试在前面设置变量,如
$active=($item->pageId====$page->id)?”活动':''我循环浏览菜单上的所有链接项,我将活动设置为空,然后检查页面id是否等于链接项id,如果是,则表示我的项目链接在其页面上,我设置$active类。之后,我检查我是否没有页面集,如果没有,我会做一些事情。例如,如果我在一个菜单中有5个项目链接,其中3个有页面,2个没有页面,那么这些链接就不会被激活。你面临什么问题?您的代码似乎可以处理没有页面的问题。没有页面时,它不会将类设置为活动状态。同样,该语句正确地设置了$active,问题是没有页面的链接。您的代码表示,如果未设置
$page
$active
将等于
'
。您是否在寻找不同的逻辑?是的,例如,我的新闻部分是一个模块,我的联系人是一个模块,当我在新闻页或联系人页上时,我的菜单链接未激活,它们被链接到。设置$active(如果不是一个页面的话)会使它们同时处于活动状态。即使他对三元运算符的使用很奇怪(不推荐),也没有什么问题<代码>($item->pageId===$page->id)$active='active':$active=''将很好地工作。@Kristianantosen,是的,我明白了,var被分配了。但这很奇怪。是的,连接运算符(.)是你最好的朋友,这是我喜欢的样式。最小化php标记使代码更易于阅读。。。这对人类来说很好。字符串的单连字符表示法也有助于减少转义。代码是这样编写的,因为我在一个模板中,在php标记之间插入了更多html