Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: подсветка ссылки текущей страницы
 
 автор: Timour   (17.12.2004 в 11:45)
 
 

Всем привет....
есть меню, ссылки которого на странице генерятся из БД следующим образом:

printf("<a class=normal href=link.php?id=%s>%s</a><br>"
,$Rows['url'],$Rows['title']);

вопрос такой....
как мне выделить строку с сылкой, просматриваемой страницы?

Пробовал делать так:

$request = $_GET['id'];
if (strstr($_SERVER['QUERY_STRING'], $request))
{
print("<a class=active>$request</a><br>");

но в этом случае все ссылки становились class=active
хотелось, чтобы только одна становилась active, а остальные normal...
менять код на каждой странице - не выход (страниц более 200)

Буду благодарен любым предложениям.

   
 
 автор: cheops   (17.12.2004 в 12:27)   письмо автору
 
   для: Timour   (17.12.2004 в 11:45)
 

Хм... наверное лучше явно сравнить значение $_GET['id'] и $Rows['url'] при формировании ссылок:
<?php
  
if($_GET['id'] == $Rows['url']) $link_style "active";
  else 
$link_style "normal";
  
printf("<a class=$link_style href=link.php?id=%s>%s</a><br>" 
,$Rows['url'],$Rows['title']); 
?>

   
 
 автор: glsv (Дизайнер)   (17.12.2004 в 12:49)   письмо автору
 
   для: Timour   (17.12.2004 в 11:45)
 

Вот такой способ есть

<?
// В качестве параметра функция stylemenu принимает переменную $activemenu. 
// Если переменная инициализирована, то функция возвращает строку class = active. 
// Для неинициализированных переменных будет возвращена строка class = normal (не активные пункты меню). 
function stylemenu($activemenu){
  if (isset(
$activemenu)){
    return 
" class=active ";
  } else {
    return 
" class=notactive ";    
  }
}

$id_menu $_GET['id'];
// Динамическое создние переменной, 
eval("\$active$id_menu = 1;");

echo (
"<a ".stylemenu($active1)">Ссылка раз</a><br>"); 
echo (
"<a ".stylemenu($active2)">Ссылка два</a><br>"); 
echo (
"<a ".stylemenu($active3)">Ссылка три</a><br>"); 
?>

Переменная выбранного пункта меню инициализируется при помощи функции eval.
eval("\$active$id_menu = 1;");
К примеру, для третьего пункта ($id_menu = 3) меню эта конструкция инициализирует переменную $active3 = 1; Переменные для других пунктов останутся не инициализированными.
В каждом пункте меню для динамического определения стиля вызываем функцию stylemenu.
<a <? echo stylemenu($active1?>> href="page1.php"></a></br>
Функция stylemenu проверяет: инициализирована ли переменная и в зависимости от этого определяет стиль.

id_menu - это в вашем коде будет равно $_GET['id']

А так как меню формируется из базы, то Вы сможете динамически формировать строки

<?
echo ("<a ".stylemenu($active1)">Ссылка раз</a><br>"); 
echo (
"<a ".stylemenu($active2)">Ссылка два</a><br>"); 
echo (
"<a ".stylemenu($active3)">Ссылка три</a><br>"); 
?>

   
 
 автор: Timour   (17.12.2004 в 17:01)   письмо автору
 
   для: glsv (Дизайнер)   (17.12.2004 в 12:49)
 

Попробовал и первый вариант и второй -- оба не удачно :((
в первом случае:
или выдавал это: unexpected T_VARIABLE на такой-то строчке (а именно $link_style), или вообще не выводил список...
во-втором случае:
или unexpected T_FUNCTION, если функцию вставлял в тот же или unexpected T_VARIABLE, если писал отдельно, т.е. <?php function ........ ?>
вот :((

   
 
 автор: glsv (Дизайнер)   (18.12.2004 в 00:20)   письмо автору
 
   для: Timour   (17.12.2004 в 17:01)
 

Должны работать и первый и второй способы. И способ, приведенный cheops-ом, мне больше по душе. Если приложите свой код, то поможем его отладить.

   
 
 автор: Тимур   (20.12.2004 в 20:39)
 
   для: glsv (Дизайнер)   (18.12.2004 в 00:20)
 

Блин, забыл свой пароль от форума.....

Мне тоже больше понравился вариант Cheops'a...
вот код моей страницы...

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<style type="text/css"><!--
a.active {font-weight: bold; color: #9999FF;}
a.normal {color: green;}--></style>
<? include("top.html");?>
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr valign="top"><td width="190">
<?php
$DBName 
"db_podm";
$Link mysql_connect(localhost"%");
mysql_select_db($DBName$Link);
$Query "SELECT * FROM podm_objects ORDER BY title";
$Result mysql_query($Query$Link);
while(
$Rows mysql_fetch_array($ResultMYSQL_ASSOC))
{
printf("<a href=podm.php?id=%s>%s</a><br>"$Rows['url'] ,$Rows['title']);
}
mysql_close($Link);
?>
</td>
<td><?php
$DBName 
"db_podm";
$Link mysql_connect(localhost"%");
mysql_select_db($DBName$Link);
$request $_GET['id'];
$Query "SELECT * FROM podm_objects WHERE url = '$request'";
$Result mysql_query($Query$Link);
while(
$Rows mysql_fetch_array($ResultMYSQL_ASSOC))
{
printf("<table width=\"100%%\" border=0 cellpadding=0 cellspacing=0><tr class=\"name\"><td width=60%% align=\"left\">%s</td><td width=40%% align=\"right\">%s</td></tr></table>
Расположен: %s<br>
Условия размещения: %s<br>
К услугам отдыхающих: %s<br>
Лечение: %s<br>
Лечебная база: %s<br>
В стоимость входит: %s<br>
Питание: %s<br>
Скидки: %s<br>
Примечание: %s<br>
Проезд: <ul>%s</ul>"
,$Rows['name'],$Rows['address'],$Rows['rasp'],$Rows['razm'],$Rows['uslug'],$Rows['med'],$Rows['med_base'],$Rows['incl'],$Rows['food'],$Rows['sales'],$Rows['memo'],$Rows['proezd']);
}
mysql_close($Link);
?>
</td></tr></table>


меню генерится в левом (первом) столбце

   
 
 автор: glsv (Дизайнер)   (20.12.2004 в 23:06)   письмо автору
 
   для: Тимур   (20.12.2004 в 20:39)
 

Обновите блок кода, выводящий ссылки.

<?
  
while($Rows mysql_fetch_array($ResultMYSQL_ASSOC)) 
  { 
    if(
$_GET['id'] == $Rows['url']) $link_style "active"
    else 
$link_style "normal"
    
printf("<a class=$link_style href=podm.php?id=%s>%s</a><br>"$Rows['url'] , $Rows['title']); 

?>

   
 
 автор: Тимур   (22.12.2004 в 17:20)
 
   для: glsv (Дизайнер)   (20.12.2004 в 23:06)
 

не работает...
думаю, что надо в php.ini покопаться

:((

   
 
 автор: glsv (Дизайнер)   (22.12.2004 в 22:44)   письмо автору
 
   для: Тимур   (22.12.2004 в 17:20)
 

Хм, странно... Я протестировал на своей базе. Все работало.
Ошибки те же самые?
unexpected T_VARIABLE 

А прикрепите свой php.ini - повозимся дальше.

   
 
 автор: glsv (Дизайнер)   (23.12.2004 в 00:20)   письмо автору
 
   для: Тимур   (20.12.2004 в 20:39)
 

>Блин, забыл свой пароль от форума.....
Вам выслать по почте?

   
 
 автор: Тимур   (23.12.2004 в 15:56)
 
   для: Тимур   (20.12.2004 в 20:39)
 

с php.ini - есть проблемка.... думаю, что его нет вообще... пробовал искать его на дисках, никакого результата. нет такого файла и всё... надо бы его из портов вытащить и прописать .conf файлах... Есть мысль, что после этого заработает всё само собой...

а вот пароль хотелось бы восстановить... :)

   
 
 автор: Тимур   (23.12.2004 в 16:42)
 
   для: Тимур   (20.12.2004 в 20:39)
 

всё заработало....
как я и думал, всё дело было в php.ini

а пароль я всё ещё жду :)))

   
 
 автор: glsv (Дизайнер)   (23.12.2004 в 21:34)   письмо автору
 
   для: Тимур   (23.12.2004 в 16:42)
 

>а пароль я всё ещё жду :)))
Выслал.

   
 
 автор: Timour   (27.12.2004 в 16:18)   письмо автору
 
   для: Тимур   (20.12.2004 в 20:39)
 

пароль получил, спасибо

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования