выделить навигацию PHP - PullRequest
3 голосов
/ 10 мая 2010

Я недавно запустил веб-сайт и успешно использовал Javascript + CSS, чтобы выделить текущую страницу в навигации.Тем не менее, он не работает в Safari и не очень хорошо проверяет при использовании Javascript, поэтому я решил, что PHP назначит CSS-идентификатор для элементов HTML.Пока что он работает нормально, по сравнению с другими случаями, когда отображались две ссылки, когда это было сделано в PHP.Моя проблема в том, что все ссылки выглядят нормально, а свойство CSS не применяется.У меня есть ощущение, что это связано с моим PHP-кодом, но я не уверен.

Адрес сайта здесь

Что касается кода 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 ]

4 голосов
/ 10 мая 2010

ради бога, не используйте этот код !!!! сделай это!

<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 голос
/ 11 мая 2010

После многолетнего программирования на php и изучения того, что не нужно делать долгими периодами проб и ошибок, вот несколько общих рекомендаций по упрощению отладки и облегчения вашей жизни в целом на основе этого кода:

  • Сделайте очень четкое разделение между вашим PHP и HTML. Другими словами, поместите html вашего приложения в шаблоны. Как минимум, этими шаблонами могут быть файлы php, которые вы включаете, которые имеют минимальный фактический необходимый php. Помимо минимума, вам, вероятно, будет легче, если вы будете использовать стороннюю систему шаблонов. Я рекомендую Smarty. Вполне возможно, чтобы все было хорошо разделено хорошей дисциплиной, но вначале намного проще разделить вещи, используя хорошую систему шаблонов.

  • В целом, в 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'].">»$ current_link [ 'текст']. "";

`

  • В вашем собственном коде попробуйте поискать фреймворки, используя шаблон MVC, для очень надежной техники разделения. Очевидно, что если вы работаете над чужим унаследованным кодом, это не так просто, поэтому в этом случае просто постарайтесь максимально разделить вещи (особенно html от php).
1 голос
/ 10 мая 2010

Попробуйте:

echo $page;

чтобы увидеть, что вы получаете. Не могли бы вы опубликовать код, который присваивает $page?

0 голосов
/ 11 мая 2010

Это, вероятно, более простой способ сделать то, что вы хотите:

<?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 вверху и скрипт позаботится обо всем остальном.

0 голосов
/ 10 мая 2010

Я не нахожу никаких проблем в вашем PHP-коде.лучше вы можете изменить свой CSS, как показано ниже ...

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

...