Dzisiejszy artykuł będzie bardzo krótki, jednak mimo to mam nadzieję, że będzie niezwykle przydatny. Podczas budowania szablonów, dość często spotykam się z problemem odmiennego układu witryny dla strony głównej oraz podstron. Stopień zróżnicowania zależy przede wszystkim od wyobraźni klienta. Czasami jest to jedynie kilka dodatkowych modułów na stronie głównej, innymi czasy jest to niestety cały układ strony. O ile w tym pierwszym przypadku rozwiązanie jest dość proste, gdyż wystarczy przypisać moduły do poszczególnych elementów menu, to drugi przypadek wymaga trochę więcej gimnastyki.

Sztuczka, o ile można to tak nazwać, którą zamierzam Ci przedstawić, znajdzie swoje zastosowanie w obu, wyżej wymienionych przypadkach. Dodatkowo będzie to o wiele bezpieczniejsze niż np. przypisywanie modułów tylko do głównego elementu menu.

W jaki sposób rozpoznać, czy użytkownik znajduje się na stronie głównej?

W 80% przypadków, główny element menu jest ustawiany na blog artykułów startowych. Większość szablonów, które dostawałem od klientów posiadały następujący zapis sprawdzający w szablonie:

<?php
if (JRequest::getVar('view')=='frontpage'){
?>
    <jdoc:include type="modules" name="strona-glowna" />
<?php
}
?>

Rozwiązanie oczywiście zda egzamin dla tych 80% przypadków. Pytanie, co jeśli główny element menu nie został przypisany do blogu artykułów z głównej? Co jeśli główny element menu został przypisany do całkiem innego komponentu niż com_content?

W takim przypadku przyda się rozwiązanie, które stanowi temat niniejszego artykułu. Co najważniejsze, sztuczka zadziała zarówno dla szablonów Joomla! 1.5 jak i Joomla! 1.6. Posłużymy się tutaj egzemplarzem obiektu JSite, za pomocą którego odnajdziemy aktywny element menu. Jeśli aktywny element menu posiada przypisany parametr home (czyli został ustawiony jako element strony startowej – w Joomla! oznaczony gwiazdką), oznacza to, że użytkownik znajduje się na stronie głównej i możemy zaprezentować mu inny układ niż na podstronach. Jak to wygląda w kodzie szablonu?

<?php
$menu = JSite::getMenu();
$a_menu = $menu->getActive();
if($a_menu->home){
?>
    <jdoc:include type="modules" name="strona-glowna" />
<?php
}
?>

Czyż to nie jest proste? Powyżej widać, w jaki sposób wywołać daną pozycję modułów tylko na stronie głównej. Jeśli chcesz stworzyć różne układy portalu dla strony głównej oraz podstron, musisz utworzyć dwa pliki szablonowe. Jeden nazwij np. strona_glowna.php, drugi zaś np. podstrona.php. W pliku głównym szablonu index.php wystarczy, że dodasz następujący kod:

<?php
$menu = JSite::getMenu();
$a_menu = $menu->getActive();
if($a_menu->home){
    require_once("strona_glowna.php");
}
else{
    require_once("podstrona.php");
}
?>

Mam nadzieję, że po raz kolejny moje wypociny przydadzą Ci się rozwiązać problem związany z budową stron w Joomla!. Oczywiście komentarze mile widziane :)