Jak nastavit aktivní třídu odkazu pomocí PHP

10.8.2023 Kategorie: Ostatní

Jednou z věcí, kterou jsem řešil při práci na poslední zakázce bylo automatické nastavení aktivní třídy odkazu v hlavičce pokud navštívíte danou stránku. Jsou asi dvě základní možnosti.

Tou nejjednodušší je JavaScript. Prostě nastavíte eventListener na daný prvek a při kliknutí se mu přidá aktivní třída a jinému odkazu se odebere. Takové řešení má jednu nevýhodu. Pokud na stránku přijdete z externího odkazu, aktivní třída se samozřejmě nikdy nenastaví. Proto jsem toto zatím nikde nepoužil.

Osobně mám radši tu druhou, tedy serverovou možnost. V tomto případě jsem použil jazyk PHP. Kompletní zdrojový kód příkladu najdete na mém GitHub účtu.

Celé řešení sestává z několika souborů, reálně si vše můžete naimplementovat i jinak. V prvé řadě potřebujeme nějak nastylovanou hlavičku. Je samozřejmě potřeba aby odkazovala alespoň na dva soubory, jinak to nedává smysl. Stěžejní je samozřejmě PHP funkce getFullUrl(). Při její tvorbě jsem se inspiroval v diskuzním vláknu na stackoverflow. Funkce nám vrátí úplnou URL adresu jako string. Principiálně na ní není nic složitého. Podívejte do souboru url.php v mém příkladě a jistě vše rychle pochopíte.

O samotné vkládání aktivní třídy do odkazu v hlavičce se stará jednoduchý ternární výraz. Ten využívá PHP funkci str_contains(), která funguje velmi podobně jako funkce contains() v jazyce C#. Akorát zde se trochu jinak používá. Do funkce musíme vložit dva parametry, prvním je string, který chceme zkontrolovat a tím druhým string, který má první string obsahovat. Funkce je typu boolean, takže vrátí true či false pokud je string obsažen resp. není. V našem případě vložíme jako první parametr naší funkci getFullUrl() a jako druhý vložíme samotný odkaz. Takže funkce bude kontrolovat, jestli URL adresa obsahuje název stránky, kde se nacházíme. Toho využijeme v konstrukci ternárního výrazu. Pokud funkce vrátí true výraz vloží aktivní třídu, pokud false, vloží prázný string.

Jak vidíte, jedná se o jednoduché a funkční řešení. Pokud máte nějaký nápad na zlepšení, můžete se o něj podělit v diskuzi…