Страница не содержащая ссылку на себя саму

  • Автор темы Автор темы John2
  • Дата начала Дата начала

John2

Guest
Страница не содержащая ссылку на себя саму

Добрый день!
Я никогда программированием не занимался (не считая ActionScript во flash), я дизайнер, прочел статью
"Динамическая навигация на PHP" Джейсона Пирса в переводе
www.webmascon.com
Смысл статьи:
Используя PHP мы включим наше навигационное меню в каждую страницу нашего сайта. В отличие от других вариантов навигации, наш будет знать на какой странице находится пользователь в данный момент и соответственно изменит индикатор в меню.
Установил Apache всё проделал, всё получилось. Но смысл тот что здесь просто изменяется стиль пункта меню данной странице, а сама ссылка на неё сохраняется.
Собственно вопрос можно ли с помощью php сделать тоже самое только чтоб ссылки не оставалось, а оставался только текст от неё. Как кто то сказал
Страница не должна содержать ссылку на саму себя
и это правильно. Если я как то непонятливо объяснил что за меню я имею ввиду то пример его можно посмотреть на том же МТС
Извините за ламерский вопрос, php 2ой день изучаю, а нигде по этой теме ничего не нашел.
 
очевидно, вывод текста заключить в блок if и использовать else для вывода ссылки.

на самом деле, статья очень плохая,
не советую учиться на таких "образцах".
 
Не совсем понял.
сейчас у меня файл navigation.php который я вставляю в другие свои файлы
PHP:
<?php include("navigation.php"); ?>
в файле navigation.php такие строки:

<div id="navigation">
PHP:
<li<?php if ($thisPage=="главная") echo " id=\"currentpage\""; ?>><a href="/">главная</a></li>
PHP:
<li<?php if ($thisPage=="о компании") echo " id=\"currentpage\""; ?>><a href="/about/">о компании</a></li>
PHP:
<li<?php if ($thisPage=="контакты") echo " id=\"currentpage\""; ?>><a href="/contact/">контакты</a></li>
</div>

тоесть в файл about.php я добавляю строчку
PHP:
<?php $thisPage="о компании"; ?>
и т.д. таким оразом + CSS файл и выделяется нужная строка меню.
а вот куда именно вставлять блок if напишите пожалуйста пример одной строчки, я же ламер в этом деле :)
 
Re: Страница не содержащая ссылку на себя саму

Собственно вопрос можно ли с помощью php сделать тоже самое только чтоб ссылки не оставалось, а оставался только текст от неё.
Очень простой пример.
PHP:
$url  = "/test.php?var=1542&ses=15"; //название ссылки
$link = "<a href=\"".$url."\">Ссылка 1</a>"; //название ссылки с самой ссылкой
$link2 = "Ссылка 1"; //название ссылки без самой ссылки
if($REQUEST_URI==$url){ // выполняем условие, при котором название сслыки должно совпадать с действующей ссылкой браузера
echo $link2; // выдаем ссылку без самой ссылки
}else{ // в противном случае
echo $link;//выдаем саму ссылку
}
 
Re: Re: Страница не содержащая ссылку на себя саму

Originally posted by omni
Очень простой пример.
PHP:
$url  = "/test.php?var=1542&ses=15"; //название ссылки
$link = "<a href=\"".$url."\">Ссылка 1</a>"; //название ссылки с самой ссылкой
$link2 = "Ссылка 1"; //название ссылки без самой ссылки
if($REQUEST_URI==$url){ // выполняем условие, при котором название сслыки должно совпадать с действующей ссылкой браузера
echo $link2; // выдаем ссылку без самой ссылки
}else{ // в противном случае
echo $link;//выдаем саму ссылку
}
Пример вроде бы простой, только что то я не пойму как его совместить с моим меню?
кто знает подскажите, напишите пожалуйста как это должно выглядеть.
 
знает, очевидно, любой, кто учился программировать методом, отличным от опроса публики на форуме.

"алгоритм" таков

завести массив, ключами в котором будут адреса (about.php), а значениями -- названия ("о компании") страниц.

пройти по массиву циклом

внутри цикла -- если адрес (ключ) совпадает с текущим запрошенным адресом, то вывести название (значение) в "активном" виде, иначе -- в "пассивном", со ссылкой.

для реализации "алгоритма" тебе необходимо прочесть руководство по php (http://www.php.net/manual/ru/index.php)

ключевые слова: array foreach if else echo $_SERVER
 
Re: Re: Страница не содержащая ссылку на себя саму

Originally posted by omni
Очень простой пример.
PHP:
$url  = "/test.php?var=1542&ses=15"; //название ссылки
$link = "<a href=\"".$url."\">Ссылка 1</a>"; //название ссылки с самой ссылкой
$link2 = "Ссылка 1"; //название ссылки без самой ссылки
if($REQUEST_URI==$url){ // выполняем условие, при котором название сслыки должно совпадать с действующей ссылкой браузера
echo $link2; // выдаем ссылку без самой ссылки
}else{ // в противном случае
echo $link;//выдаем саму ссылку
}
Вот этот пример у меня получился только вместо
PHP:
$REQUEST_URI==$url
я пишу
PHP:
$thisPage=="о компании"
почему так сам не знаю :) по другому не получается, а с массивами у меня ничего не получилось, а было бы удобно всё это сгрупировать, а не писать так много для каждого пункта меню. подскажите как это сделать

-~{}~ 30.04.04 11:28:

Всем сасибо, уже сам разобрался, если вдруг кому интересно
PHP:
<?php
$navi = array (
'/saunas/building/' => 'ссылка 1', 
'/saunas/parnas/' => 'ссылка 2',
'/saunas/wellness/' => 'ссылка 3',
'/saunas/infrared/' => 'ссылка 4',
'/saunas/tylo/' => 'ссылка 5',
'/saunas/klafs/' => 'ссылка 6',
'/saunas/accessory/' => 'ссылка 7'
); 
foreach ($navi as $key => $value) { 
if ($REQUEST_URI=="$key") 
echo "<li><span id=\"active\">$value</span></li>"; 
else 
echo "<li><a href='$key'>$value</a></li>"; 
} 
?>
Хотя уверен то что я здесь один такой ламо :)
 
John2

вот и молодец. Только вот это

if($REQUEST_URI=="$key")

неправильно. Твоя страница должна сама определять свой собственный адрес

$_SERVER['PHP_SELF'];

и потом сравнивать с ключами массива, но не буквально, а проверять на вхождение:

$contains=strpos($_SERVER['PHP_SELF'],$key);
if($contains !== FALSE)...
 
Гоша

Вроде бы всё получилось, но не совсем
имею сейчас такой код:
PHP:
$navi = array (
'/' => 'Главная', 
'/about/' => 'О компании', 
'/contacts/' => 'Контакты',
'/map/' => 'Карта сайта'
); 
foreach ($navi as $key => $value) { 
if ($_SERVER['PHP_SELF']) 
$contains=strpos($_SERVER['PHP_SELF'],$key);
if($contains !== FALSE)
echo "<li><span id=\"active\">&#8594; $value</span></li>"; 
else 
echo "<li>&#8594; <a href='$key'>$value</a></li>"; 
}
страницы (О компании, Контакты, Карта сайта) между собой функционируют нормально, а вот (Главная) не активна на всех 4-ех страниццах, т.е. на главную страницу попать не могу
Странно, почему такое может быть :confused:
Заметил что с таким кодом
в отличии от
PHP:
$REQUEST_URI=="$key"
страницы загружаются значительно быстрее, как бы сказать не сама страница быстрее грузится, а время ожидания между нажатием на ссылку и началом загрузкой страницы, щас это происходит практически мгновенно.
 
потомучто [m]strpos[/m] находит "/" в адресе, сопоставляет с "/" в таблице, получает положительный результат (т.к слеш есть везде) и считает, что страница активна.

можно написать так

$navi = array (
'/index.php' => 'Главная',

а дальше так

$position=strpos($_SERVER['PHP_SELF'],$key);
if(position=== 0)

обрати внимание на три знака равенства.


вообще, для отладки перед своим кодом напиши

var_dump($_SERVER['PHP_SELF']);

и всё станет понятно.



if ($_SERVER['PHP_SELF'])

писать не надо.
 
2Гоша
Спасибо, всё получилось.
Только вот я одну штуку вспомнил, это меню будет для продукции фирмы (бани, сауны и т.д не важно), а (главная, о компании это другое меню)
тоесть в меню продукции не будет ссылки "/" главную страницу, какой тогда параметр в этом случае лучше использовать:
PHP:
if($contains !== FALSE)
или
PHP:
if(position=== 0)
?
 
John2

функция [m]strpos[/m] (stog, igolka) возвращает позицию "иголки" внутри "стога" или FALSE, если иголки в стоге нет. С помощью strpos определим три "предиката"

PHP:
// TRUE, если haystack начинается с needle
// startsWith("foobar","foo")==TRUE

function startsWith($haystack,$needle){
	return strpos($haystack,$needle)===0;
}

// TRUE, если haystack кончается на needle
// endsWith("foobar","bar")==TRUE

function endsWith($haystack,$needle){
	return strpos($haystack,$needle)===strlen($haystack)-strlen($needle);
}

// TRUE, если haystack содержит needle
// contains("foobar","oba")==TRUE

function contains($haystack,$needle){
	return strpos($haystack,$needle)!==FALSE;
}

дальше на каждой странице выводим PHP_SELF и думаем, какую функцию нам лучше применить.
 
Автор оригинала: гоша
PHP:
// TRUE, если haystack кончается на needle
// endsWith("foobar","bar")==TRUE

function endsWith($haystack,$needle){
	return strpos($haystack,$needle)===strlen($haystack)-strlen($needle);
}
Наверное, всё-таки логичнее strrpos... ;)
 
Knowledge of some principles easily compensates ignorance of some facts.
 
Сверху