Делаем интеллектуальное меню на php

12
J
На сайте с 06.04.2011
Offline
82
1377

Здравствуйте, знатоки!

Сразу перейду к возникшей проблеме:

Хочу сделать умное меню для своего сайта, суть которого в том, чтобы активная ссылка (т.е. ссылка той страницы, где мы находимся) была выделена другим цветом или другим стилем. В принципе, это можно было реализовать с помощью псевдокласса a:activ, но мне надо именно на php. Буду благодарен, если кто-нибудь кинет скриптик с инструкцией на js. На php тоже нашел код, который работает. Но есть одно но... как только я меняю директории самих файлов, т.е. помещаю файл в папку, то код перестает работать. Из-за чего это происходит, так и не понял ((. Но думаю, для бывалых разработчиков это пустяк, прошу подсказать в чем тут проблема. Код такой вот:

<?php

$menu = array (

"Главная" => "index.php",

"О проекте" => "info-o-nas.php",

"Карта сайта" => "map.php",

"Контакты" => "sendmail.php"

);

?>

<table width='530px' height='30px' border='0' cellspacing='0' cellpadding='0'>

<tr>

<? foreach ($menu as $entry => $file) {

if ($file == basename ($_SERVER ['PHP_SELF'])) {

echo "<td style='border-radius: 8px; text-align: center; background: #ffb9b9;'>";

echo "<p style='text-align: center; color: #fff; font: normal 14px Helvetica, Arial, Sans-Serif;'>$entry</p>";

echo "</td>";

} else {

echo "<td>";

echo "<p style='text-align: center;'><a style='color: #ccc; font: normal 14px Helvetica, Arial, Sans-Serif;' href=\"$file\">$entry</a></p>";

echo "</td>";

}

}

?>

</tr>

</table>

Смотрите, как только я кладу, скажем файл map.php в папку, т.е. вот так

"Карта сайта" => "map/index.php", то код перестает работать. Вопрос почему это происходит и как исправить? Заранее спасибо

serval
На сайте с 29.06.2011
Offline
206
#1

Табличный дизайн. Фе.

По ходу не весь PHP код тут. Вывод только названий меню. А где там адреса подтягиваются? Ничего нету.

master_jeday
На сайте с 15.05.2010
Offline
231
#2

Если сайт на хтмл, можно перенести на какую-нибудь простую цмс, например, на файлах, и не париться с php.

Дорвеи на заказ с гарантией трафика ( /ru/forum/993918 ) >>> Осторожно, в телеге/скайпе есть клоны! Проверяйте, что общаетесь именно со мной через личку!
Shlackbaum
На сайте с 18.08.2010
Offline
322
#3
Смотрите, как только я кладу, скажем файл map.php в папку, т.е. вот так
"Карта сайта" => "map/index.php", то код перестает работать. Вопрос почему это происходит и как исправить?

Я не силен в программировании, но осмелюсь предположить:

У вас сцылки относительные. Сделайте абсолютными.

Пустота. Какого черта здесь появляется чья-то реклама?
Geers
На сайте с 12.04.2011
Offline
487
#4

Жесть 😮

php, таблицы и css все в одну кучу) 🤪

ТС, кодинг это не ваше)

The WishMaster
На сайте с 29.09.2005
Offline
2542
#5
Shlackbaum:
У вас сцылки относительные. Сделайте абсолютными.

Какой в этом смысл? O_o

Кому старенького креативного копирайтера? Тематики - туризм, СЕО, творчество, кулинария, шизотерика :)
KV
На сайте с 22.12.2011
Offline
88
#6

"Карта сайта" => "map/map.php"

Как бы на тебя ни давили, никогда не соглашайся на роль, что тебе не нравится *** http://handmade.tigress.com.ua
sabotage
На сайте с 14.02.2007
Offline
192
#7
Jigo:
Смотрите, как только я кладу, скажем файл map.php в папку, т.е. вот так
"Карта сайта" => "map/index.php", то код перестает работать. Вопрос почему это происходит и как исправить? Заранее спасибо

basename убери.

KV
На сайте с 22.12.2011
Offline
88
#8
sabotage:
basename убери.

и чтобы совсем заработало:

...

if ($file == str_replace('/','', $_SERVER ['PHP_SELF']))
{...}
J
На сайте с 06.04.2011
Offline
82
#9

Спасибо всем за советы, но пока код не заработал. Вот это ... if ($file == str_replace('/','', $_SERVER ['PHP_SELF'])) ... не помогло тоже.

Есть догадка, что все из-за индексных файлов, т.е. index.php. У меня все страницы имеют такое расширение. Главная страница - site.ru/index.php (в браузере соответственно просто будет http://www.site.ru/), карта сайта - map/index.php (в браузере соответственно - http://www.site.ru/map/), страница контактов - sendmal/index.php (в браузере - http://www.site.ru/sendmail/), т.е. все файлы помещены в папки, а в браузере мы отбрасываем index.php, дабы не переводить страницу на более глубокий уровень, надеюсь тут понятно.

А как вот в этом условии (... if ($file == basename ($_SERVER ['PHP_SELF'])) ...) сделать так, чтобы избавиться вот от этого index.php, это возможно вообще? Т.е. чтобы бралось значение без окончания index.php? Может тогда заработает...

Кстати, ввиду того, что сами файлы у меня в папках, то сам массив выглядит так (привожу весь код опять):

<?php

$menu = array (

"Главная" => "/",

"О проекте" => "/o-proekte/",

"Рекламодателям" => "/reklamodateli/",

"Карта сайта" => "/map/",

"Контакты" => "/sendmail/"

);

?>

<table width='500px' height='30px' border='0' cellspacing='0' cellpadding='0'>

<tr>

<? foreach ($menu as $entry => $file) {

if ($file == basename ($_SERVER ['PHP_SELF'])) {

echo "<td style='border-radius: 8px; text-align: center; background: #ffb9b9;'>";

echo "<p style='text-align: center; color: #fff; font: normal 14px Helvetica, Arial, Sans-Serif;'>$entry</p>";

echo "</td>";

} else {

echo "<td>";

echo "<p style='text-align: center;'><a style='color: #ccc; font: normal 14px Helvetica, Arial, Sans-Serif;' href=\"$file\">$entry</a></p>";

echo "</td>";

}

}

?>

</tr>

</table>

KV
На сайте с 22.12.2011
Offline
88
#10

Тогда должно быть так:

if(strpos($_SERVER ['REQUEST_URI'], $file))
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий