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

John2

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

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

гоша

Guest
очевидно, вывод текста заключить в блок if и использовать else для вывода ссылки.

на самом деле, статья очень плохая,
не советую учиться на таких "образцах".
 

John2

Guest
Не совсем понял.
сейчас у меня файл 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 напишите пожалуйста пример одной строчки, я же ламер в этом деле :)
 

omni

Guest
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;//выдаем саму ссылку
}
 

John2

Guest
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;//выдаем саму ссылку
}
Пример вроде бы простой, только что то я не пойму как его совместить с моим меню?
кто знает подскажите, напишите пожалуйста как это должно выглядеть.
 

гоша

Guest
знает, очевидно, любой, кто учился программировать методом, отличным от опроса публики на форуме.

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

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

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

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

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

ключевые слова: array foreach if else echo $_SERVER
 

John2

Guest
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>"; 
} 
?>
Хотя уверен то что я здесь один такой ламо :)
 

гоша

Guest
John2

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

if($REQUEST_URI=="$key")

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

$_SERVER['PHP_SELF'];

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

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

John2

Guest
Гоша

Вроде бы всё получилось, но не совсем
имею сейчас такой код:
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"
страницы загружаются значительно быстрее, как бы сказать не сама страница быстрее грузится, а время ожидания между нажатием на ссылку и началом загрузкой страницы, щас это происходит практически мгновенно.
 

гоша

Guest
потомучто [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'])

писать не надо.
 

John2

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

гоша

Guest
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 и думаем, какую функцию нам лучше применить.
 

bakh

Абалдуй
Автор оригинала: гоша
PHP:
// TRUE, если haystack кончается на needle
// endsWith("foobar","bar")==TRUE

function endsWith($haystack,$needle){
	return strpos($haystack,$needle)===strlen($haystack)-strlen($needle);
}
Наверное, всё-таки логичнее strrpos... ;)
 

гоша

Guest
Knowledge of some principles easily compensates ignorance of some facts.
 
Сверху