[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Активная ссылка и прочее..
Seth1990
После нескольких дней проведенных за компьютером, пробежавшись по статьям, онлайн-курсам и некоторым книгам посвященным PHP, я все-таки решил сверстать простенький сайт используя сей язык... ;)
Сначала сверстал главную страницу по *.psd макету, все окей , страница в порядке)

И вот приступил ко внедрению php в мое творение)
Вынес блок с меню в отдельный файл menu.php .
подключил его к главной странице, все ок, все пашет)
В меню у меня есть раздел, например, "файлы" , а по сему решил создать страницу files.php , в которую помимо скопированного текста html внес строчку

<?php include('menu.php"); ?>


Но вот столкнулся с такой проблемой: когда я делал html код еще без php , я в файле index.php для ссылки на главную страницу поставил class="active" и присвоил этому классу в таблице стилей некий бэкраунд.
То есть что бы когда пользователь находился на странице, ее название в меню выделялось...
Но так как в каждую новую страницу я присоединяю один и тот же файл "menu.php" (а в этом файле class="active" присвоен странице index.php )
то у меня горит бэкграунд только под ссылкой на главную страницу. А если присвоить class="active" ссылке на страницу files.php , то будет она вечно гореть.
Так вот, как осуществить сей нехитрый замысел, дабы бэкграунд загорался там где надо и пропадал когда надо? :blink:
код menu.php :


<div id="menu">
<a
href="index.php" class="active">Главная</a>
<a
href="files.php">Файлы</a>
<a
href="about.php">О нас</a>
<a
href="photos.php">Фото</a>
</div>





Спустя 23 минуты, 58 секунд (13.08.2011 - 06:59) Michael написал(а):
Почитай про $_SERVER

Спустя 39 секунд (13.08.2011 - 06:59) Invis1ble написал(а):
Нужно ввести условие, по которому будет определяться необходимость добавления класса. Примерно так:
function renderClass($page) {
echo basename(__FILE__) == $page . '.php' ? 'class="active"' : '';
}

<div id="menu">
<a
href="index.php" <?php renderClass('index') ?>>Главная</a>
<a
href="files.php" <?php renderClass('files') ?>>Файлы</a>
<a
href="about.php" <?php renderClass('about') ?>>О нас</a>
<a
href="photos.php" <?php renderClass('photos') ?>>Фото</a>
</div>

Спустя 7 часов, 27 минут, 1 секунда (13.08.2011 - 14:26) Seth1990 написал(а):
Invis1ble
Поподробнее можно?) а то я не совсем понял)

Спустя 12 минут, 40 секунд (13.08.2011 - 14:39) Winston написал(а):
Цитата (Seth1990 @ 13.08.2011 - 14:26)
Поподробнее можно?) а то я не совсем понял)

А, что там подробнее? Открываешь мануал и читаешь о basename...
А так все просто как 2+2:
В ф-ю renderClass передаешь имя страницы там сверяется имя текущего файла с файлом переданным в $page, если сходится значит устанавливается класс актив.

Спустя 12 минут, 11 секунд (13.08.2011 - 14:51) Seth1990 написал(а):
А как поместить текущую страницу в переменную $page?)

Спустя 3 минуты, 14 секунд (13.08.2011 - 14:54) Invis1ble написал(а):
Seth1990
Winston немного неправильно выразился. Ничего в $page не помещается, а передается в функцию в качестве аргумента.
renderClass('index') - index - аргумент ф-ции

Спустя 24 минуты, 22 секунды (13.08.2011 - 15:19) Seth1990 написал(а):
Да , но когда я нахожусь на странице "файлы" , мне же надо что бы в качестве аргумента функции стояло renderClass('files') , как сделать что бы аргумент менялся сам в зависимости от того на какой странице я нахожусь? blink.gif

Спустя 5 минут, 13 секунд (13.08.2011 - 15:24) Invis1ble написал(а):
ты не понял смысл функции и фантазируешь. Читай мануал по basename() и __FILE__, тебе Winston уже написал
Тоже самое можно исполнить например с помощью $_SERVER['PHP_SELF'], о чем тоже было сказано Michael'ом. Ты не читаешь разве, что тебе пишут?

Спустя 1 час, 37 минут, 10 секунд (13.08.2011 - 17:01) Seth1990 написал(а):
Всем спасибо за помощь)
Прочитал пару строк о
$_SERVER['PHP_SELF']

попробовал написать код и на мое удивление все получилось! :D

код функции получился таким:


<?php
function
renderClass($page){
echo basename($_SERVER['PHP_SELF']) == $page . '.php' ? 'class="active"':'';
}
?>


код меню таким:


<div id="menu">
<
a href="index.php" <?php renderClass('index') ?>>Главная</a>
<
a href="files.php" <?php renderClass('files') ?>>Файлы</a>
<
a href="about.php" <?php renderClass('about') ?>>О нас</a>
<
a href="photos.php" <?php renderClass('photos') ?>>Фото</a>
</
div>

Спустя 12 минут, 14 секунд (13.08.2011 - 17:13) Invis1ble написал(а):
Цитата
попробовал написать код и на мое удивление все получилось!

прям удивительно! laugh.gif
Заменил __FILE__ на $_SERVER['PHP_SELF'] - это написал код? cool.gif biggrin.gif

Спустя 1 минута, 58 секунд (13.08.2011 - 17:15) Seth1990 написал(а):
В буквальном смысле - да)
Я его не копировал отсюда))

Спустя 2 минуты, 32 секунды (13.08.2011 - 17:18) Invis1ble написал(а):
Seth1990
ладно, это я стебусь.... Если сам разобрал код и понял смысл - это хорошо. Ток там разбирать особо-то и нечего - 1 строка smile.gif

Спустя 6 дней, 16 часов, 50 минут, 15 секунд (20.08.2011 - 10:08) devon написал(а):
При использовании константы __FILE__, функция basename(), будет постоянно возвращать одно и то же имя файла, а именно название файла в котором она вызывается.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.