突出导航PHP

时间:2010-05-10 18:11:24

标签: php highlighting

我不久前推出了一个网站,并成功使用Javascript + CSS来突出显示导航中的当前页面。但是,它在Safari中不起作用,并且在使用Javascript时不能很好地验证,所以我决定让PHP将CSS id分配给HTML元素。到目前为止,与在PHP中尝试使用每个链接中的两个链接的其他时间相比,它工作正常。我的问题是所有链接看起来都很正常,并且不应用CSS属性。我觉得它与我的PHP代码有关,但我不确定。

网站地址为here

至于PHP代码,这里是:

<?php
echo('<li><span class="bold">Main</span>');
echo('<ul>');
if ($page=="home")
{
echo('<li><a id="current" href="index.shtml">Home</a></li>');
}
else
{
echo('<li><a href="index.shtml">Home</a></li>');
}
if ($page=="faq")
{
echo('<li><a id="current" href="faq.shtml">FAQ</a></li>');
}
else
{
echo('<li><a href="faq.shtml">FAQ</a></li>');
}
if ($page=="about")
{
echo('<li><a id="current" href="about.shtml">About Bryce</a></li>');
}
else
{
echo('<li><a href="about.shtml">About Bryce</a></li>');
}
echo('<li><a href="contact.php">Contact Bryce</a></li>');
if ($page=="sign guestbook")
{
echo('<li><a id="current" href="sign.shtml">Sign Guestbook</a></li>');
}
else
{
echo('<li><a href="sign.shtml">Sign Guestbook</a></li>');
}
if ($page=="view guestbook")
{
echo('<li><a id="current" href="view.shtml">View Guestbook</a></li>');
}
else
{
echo('<li><a href="view.shtml">View Guestbook</a></li>');
}
echo('</ul>');
echo('</li>');
echo('<li><span class="bold">Info</span>');
echo('<ul>');
if ($page=="projects")
{
echo('<li><a id="current" href="projects.shtml">Projects</a></li>');
}
else
{
echo('<li><a href="projects.shtml">Projects</a></li>');
}
if ($page=="books")
{
echo('<li><a id="current" href="books.shtml">Books</a></li>');
}
else
{
echo('<li><a href="books.shtml">Books</a></li>');
}
echo('</ul>');
echo('</li>');
echo('<li><span class="bold">Misc.</span>');
echo('<ul>');
if ($page=="cover designs")
{
echo('<li><a id="current" href="coverdesigns.shtml">Cover Designs</a></li>');
}
else
{
echo('<li><a href="coverdesigns.shtml">Cover Designs</a></li>');
}
echo('<li><a target="_blank" href="http://www.lulu.com/brycecampbellsbooks">Lulu Store</a></li>');
echo('<li><a href="rss/">RSS</a></li>');
echo('</ul>');
echo('</li>');

?>

为了让大家了解突出显示效果应该是什么样子,这里应该是应用于当前页面的CSS:

#current {
   font-style: italic;
   text-decoration: none;
   color: #000000;
  }

当查看我做错了什么时,它告诉我我正在实现它,但似乎PHP没有得到这些值。

5 个答案:

答案 0 :(得分:4)

对于上帝的爱,不要使用那个代码!!!!这样做!

<li><a href=""<?php if($page=='about'): ?> id="current"<?php endif; ?>>about</a></li>
<li><a href=""<?php if($page=='otherpage'): ?> id="current"<?php endif; ?>>other page</a></li>

你给php仇恨更多的弹药!

答案 1 :(得分:1)

尝试:

echo $page;

看看你得到了什么。你可以发布指定$page的代码吗?

答案 2 :(得分:1)

在php中编程多年后,并且学习了长时间的反复试验不会做的事情,这里有一些总体建议,可以根据代码进行调试,让你的生活更轻松:

  • 在php和你的html之间做一个非常明确的分离。换句话说,在模板中使用您的应用程序的html。至少这些模板可能是你包含的php文件,它们具有必要的最小实际php。除了最低限度,如果您使用第三方模板系统,它可能会更容易。我推荐聪明。完全有可能通过良好的纪律保持一切之间的良好分离,但在开始时使用良好的模板系统将事物分开是非常容易的

  • 一般来说,在我们从$ _REQUEST中提取输入数据时,以及从数据存储库/数据库中获取数据并完成对它们的操作时,我们可以很好地了解页面的外观。因此,一旦我们拥有了我们想要的所有数据,我们应该能够拥有一个涉及操作输入数据的整个部分,然后将所有内容传递给模板,其中包含一些最小的显示逻辑,以显示最终页面的外观。例如。而不是

    if($page == 'about'){ echo "<a href='about.php'>About</a>"; }

    确定html之外的数据类型,只有然后传递该决定,例如

    $possible_links = array('about'=>array('href'='about.php', 'text'=>'About'), 'other'=>array('href'=>'other.php', 'text'='other pages')); $current_link = $possible_links[$current]; ... ... in separate script, optimally: ... echo "<a href='".$current_link['href']."&gt;”中。$ current_link [ '文本']。 “”;

`

  • 在您自己的代码中,尝试使用MVC模式查看框架,以获得非常强大的分离技术。显然,如果你正在处理别人的遗留代码,那就不那么容易了,所以在这种情况下,只要尽可能地将事情分开(尤其是来自php的html)。

答案 3 :(得分:0)

这可能是一种更容易做到你想要的方式:

<?php
// heredoc syntax ftw!
$menu = <<<MENU
<ul id="nav">
 <li><a href="/">Home</a></li>
 <li><a href="/foo">Foo</a></li>
 <li><a href="/bar">Bar</a></li>
 <li><a href="/baz">Baz</a></li>
 <li><a href="/inga">Inga</a></li>
</ul>
MENU;
$lines = split("\n", $menu);
foreach ($lines as $line) {
 $current = false;
 preg_match('/href="([^"]+)"/', $line, $url);
 if (substr($_SERVER['REQUEST_URI'], 0, 5) === substr($url[1], 0, 5)) {
  $line = str_replace('<li><a h', '<li class="current"><a h', $line);
 }
 echo $line."\n";
}
?>

只需在顶部编辑$menu,脚本就可以完成剩下的工作。

答案 4 :(得分:-2)

我在你的php代码中没有发现任何问题。你能更好地改变下面的css ......

.current {
   font-style: italic;
   text-decoration: none;
   color: #000000;
  }