Ако имате статична или динамична навигация, много пъти при изкарването и в нов файл трябва да се предвиди как ще се проверява дали линка трябва да е активен за текущата страница.
Вместо да добавям някакъв сложен код към навигацията съм разработил проста функция, която просто трябва да се извика с името на линка.
=active('index.php');?>
Простата версия на кода:
function active ($find, $exact = FALSE) { if ( $exact ) { $server = explode('/', $_SERVER['REQUEST_URI']); $uri = $server[count($server) - 1]; if ( strcmp($uri, $find) == 0 ) { return 'class="active"'; } } else if ( strpos($_SERVER['REQUEST_URI'], $find) !== FALSE ) { return 'class="active"'; } return ""; }
Сложната, която работи с масив:
function active ($find, $exact = FALSE) { if(is_array($find)) { $server = explode('/', $_SERVER['REQUEST_URI']); if(!empty($find)) foreach($find as $element) { if ( $exact ) { $uri = $server[count($server) - 1]; if ( strcmp($uri, $element) == 0 ) { return 'class="active"'; } } else if ( strpos($_SERVER['REQUEST_URI'], $element) !== FALSE ) { return 'class="active"'; } } } else { if ( $exact ) { $server = explode('/', $_SERVER['REQUEST_URI']); $uri = $server[count($server) - 1]; if ( strcmp($uri, $find) == 0 ) { return 'class="active"'; } } else if ( strpos($_SERVER['REQUEST_URI'], $find) !== FALSE ) { return 'class="active"'; } } return ""; }
Ако при линковете има други класове, може да се замени ‘class=“active“‘ с „active“.
Пример за използване: