navbar active class, въпрос

noxious

Registered
Здравейте!

Имам следния код

PHP:
function echoActiveClassIfRequestMatches($requestUri) {
	$current_file_name = basename($_SERVER['REQUEST_URI'], ".php");

	if ($current_file_name == $requestUri)
		echo ' class="active"';
}

добавя class="active", ако линк като home е текущ.

И съответно: <li<?=echoActiveClassIfRequestMatches("") || echoActiveClassIfRequestMatches("home")?>>...

Да, но, ако отворя http://localhost/home/page/1, изчезва active класа. Или въпросът ми е по-точно има ли символен знак или нещо подобно, което да значи всички започващи с home да се маркират като class="active"?

Благодаря предварително![/php]
 
Промени си логиката.

Разпредели си URL на сегменти. Ако на мястото на home ти е винаги име на страница(php файл), то прави поверка от рода дали requested url съдържа home/някоя друга стрница.
Разгледай parse_url().


Кратък пример:
PHP:
$url = parse_url($url);
$pathSegments = explode("/", $url['path']);

if ( $pathSegments[0] == "home" ) {
       // attach active class
}

Другия вариант е да пазиш сесия или бисквитка и да правиш проверка. Ако все още си на страница home да взимаш бисквитката и да слагаш класа, а при смяна на страницата на бисквитката атачваш друга страница.

Т.е. в бисквитката пазиш последно отворената страница, да вземем home. При смяна на линка взимаш текущия адрес, правиш проверка да ли бисквитката ти съществува, ако съществува и взимаш стойността и правиш проверка с текущия адрес. Ако съвпадат задаваш на линка active класа.
Ако са различни задаваш active класа на текущия линк и запазваш името на новата страница в бисквитката.
 
Много сложно т'ва. Направих го старомодно като добавям на всяка страница $activepage = ... Мерси все пак +1 :)
 

Back
Горе