数据库驱动的PHP菜单,检查当前页面

时间:2013-09-02 19:18:35

标签: php database menu compare uri

我有一个页面,其中包含基于数据库填充的持久左侧导航。我需要在视觉上标记与页面右侧当前显示的内容相对应的菜单条目。我在检查当前页面时遇到问题。 (我正在学习PHP并尝试编辑其他人的代码,很久以前的人。)

以下是菜单的代码:

while( ( $row = mysql_fetch_array( $result ) ) && ( $count < $limit ) ) {
    $count++;
    echo "\t\t\t<li><a href=\"" . NEWS_URL . "?show=news&amp;action=show&amp;id=" . $row['id'] . "\" >" . stripslashes( $row['title'] ) . "</a></li>\n";

...等。适用于生成菜单列表。 然后我想我想要做的是比较这段代码产生的URI与当前加载的页面,以确定我是否应该为当前页面添加CSS样式。

所以我尝试了这个:

echo "\t\t\t<li><a href=\"" . NEWS_URL . "?show=news&amp;action=show&amp;id=" . $row['id'] . "\" <?php if( $_SERVER['REQUEST_URI'] == "$this" ) echo " class=\"selected\""; ?>>" . stripslashes( $row['title'] ) . "</a></li>\n";

语法错误。所以尝试了这个:

echo "\t\t\t<li><a href=\"" . NEWS_URL . "?show=news&amp;action=show&amp;id=" . $row['id'] . "\" <?php if( $_SERVER['REQUEST_URI'] == $this ) echo " class=\"selected\""; ?>>" . stripslashes( $row['title'] ) . "</a></li>\n";

仍然是语法错误。所以尝试了这个:

echo "\t\t\t<li><a href=\"" . NEWS_URL . "?show=news&amp;action=show&amp;id=" . $row['id'] . "\" <?php if( $_SERVER['REQUEST_URI'] == $row['id'] ) echo " class=\"selected\""; ?>>" . stripslashes( $row['title'] ) . "</a></li>\n";

连连呢?

2 个答案:

答案 0 :(得分:1)

终于成功了。我找到了一种方法来实现这一点,尽管代码可能不那么优雅。 我无法得到URI和$ row ['id']的比较在echo语句中工作。所以我创建了一个单独的函数来进行比较,并将结果返回到echo语句,如下所示:

echo "\t\t\t<li><a href=\"" . NEWS_URL . "?show=news&amp;action=show&amp;id=" . $row['id'] . "\"" . $this->checkRow($row['id']) . ">" . stripslashes( $row['title'] ) . "</a></li>\n";

function checkRow($myID)
{
if( strstr( $_SERVER['REQUEST_URI'], $myID ) )
{
 return " class=\"selected\"";
 }
}

答案 1 :(得分:0)

你的第一个例子中的echo语句中有php标签

echo "\t\t\t<li><a href=\"" . NEWS_URL . "?show=news&amp;action=show&amp;id=" . $row['id'] . "\" <?php if( $_SERVER['REQUEST_URI'] == "$this" ) echo " class=\"selected\""; ?>>" . stripslashes( $row['title'] ) . "</a></li>\n";

试试这个

echo "\t\t\t<li><a href=\"".NEWS_URL."?show=news&amp;action=show&amp;id=".$row['id']."\".  ($_SERVER['REQUEST_URI'] == $this ?"class=\"selected\"" :"").stripslashes( $row['title'] )."</a></li>\n";