DEMETR Создание сайтов в Казани

Опубликовано

Определяем главную страницу в Joomla

Иногда встает такая задача: определить главную страницу в Joomla. Для чего это может быть полезно? Представим ситуацию, что на главной странице у нас фон сайта красного цвета, на всех внутренних — синего цвета. Еще один случай: показывать модуль «хлебные крошки» на всех страницах сайта, кроме главной.

Сделать это довольно просто. Необходимо прописать всего лишь несколько строчек кода в начале главного файла нашего шаблона (index.php):

$menu = & JSite::getMenu();
//Получили главное меню
//
//Если мы находимся в главном пунтке, 
if ($menu->getActive() == $menu->getDefault()) {
//то переменная fpage будет хранить единицу.
    $fpage="1"; 
}

Теперь в нужном месте шаблона делаем проверку:

<?php
if ($fpage=="1") echo "Мы находимся на главной странице";
?>

Теперь зная, как делать проверку можно запросто сделать например такое условие:

<?php
if ($fpage=="1") $bodyclass="red"; else $bodyclass="blue";
?>
 
<body class="<?php echo bodyclass; ?>">
....
</body>

Из всего это видно, что на главной странице элемент body будет иметь класс red, в остальных случаях класс blue. Я показал, как можно это применять, а дальше все зависит от вашей фантазии. Делайте хорошие шаблоны не слишком «шаблонными».

Определяем главную страницу в Joomla: 17 комментариев

  • DDR — 11.10.2011 в 18:36 #

    Спасибо, способ помог. Советую написать в посте в какой ветке Joomla работает данный метод, у меня 1.5.23.

    [Ответить]

    Demetr - Октябрь 11th, 2011 в 18:38

    Для любой 1.5 подходит метод.
    на 1.0, думаю ошибки вызовет этот код.

    [Ответить]

  • Pavel — 10.11.2011 в 21:56 #

    Так делать НЕЛЬЗЯ!!! Данный способ не срабатывает если есть несколько пунктов меню, которые ссылаются на главную.
    Вот корректный способ:
    if(JRequest::getVar(‘view’) == «frontpage» ) {
    //Вы на главной
    }
    else {
    //Вы не на главной
    }

    [Ответить]

    Demetr - Ноябрь 11th, 2011 в 18:22

    Учту, спасибо.
    Но ссылаться в нескольких пунктах меню на Главную, как на компонент — тоже не верно.

    [Ответить]

  • Алексей — 02.02.2012 в 13:42 #

    Спасибо! Ковырялся с выдергиванием $itemid = $GET[‘itemid’] но это такие костыли. А тут то что надо )

    [Ответить]

  • Max — 20.03.2012 в 10:55 #

    Не верно все равно. А если там далеко не «frontpage», то ваш код работать не будет.

    [Ответить]

  • AlexKo — 23.04.2012 в 11:27 #

    Добрый день!
    Способ действительно хорош, есть много его вариаций со сравнением разных переменных, но существует другая беда:
    например, если ставить компоненты (virtuemart и т.п.), возникают ситуации, когда они уходят на index.php. Бывают ситуации (до смешного), например при использовании стандартного модуля com_content в виде блога при переходе по ссылке «читать далее» ItemId присваивается как у пункта меню по умолчанию, как следствие выводится на экран другой материал, а шаблон остается прежним, т.к. условие $menu->getActive() == $menu->getDefault() выполняется.

    Отсюда вопрос: можно ли как-то выделить именно главную страницу (будь то блог, материал, еще что-нибудь) и если страница отличается от главной, то тогда включать шаблон по умолчанию

    [Ответить]

    Demetr - Апрель 23rd, 2012 в 11:31

    Приветствую. Если я правильно понял вопрос, то возможно эта статья поможет http://stofin.ru/code/cart-virtuemart-1267

    [Ответить]

    AlexKo - Апрель 23rd, 2012 в 12:35

    Да, я ее читал и конкретно для VirtualMart’a она может и поможет (сам не пробовал), но это решение только для него. Остается еще com_content с непонятно откуда вылезающими ItemId, у коллеги какой-то календарь себя так же ведет и т.д.
    Хочется комплексное решение в самом шаблоне получить.

    Сейчас продумываю вариант проверки по уникальному заголовку (title), заданному в самом пункте меню.

    [Ответить]

    AlexKo - Апрель 23rd, 2012 в 12:39

    кстати в этой ветке Pavel писал примерно про это, но он уводит на стандартную «Главную страницу», а я хочу видеть любую (материал, блог, форум) с включенной галочкой главная

    [Ответить]

    Pavel - Май 16th, 2012 в 13:00

    Автор статьи предложил по моему как раз Ваш вариант. Не могу ручаться, что он везде работает, но судя по коду он как раз проверяет дефолтную страницу.

  • Денис — 01.07.2012 в 13:01 #

    Спасибо, полезный материал

    [Ответить]

  • Саша — 23.07.2012 в 06:19 #

    $menu->getDefault()->link — отак нужно в 2.5

    [Ответить]

  • Саша — 23.07.2012 в 06:26 #

    не работает при двух и более языках кстати!

    [Ответить]

  • Sergeniy — 05.09.2012 в 07:22 #

    А я делаю так:

    [Ответить]

  • Sergeniy — 05.09.2012 в 07:23 #

    Сорри, код порезался:

    if (JRequest::getInt( 'Itemid', 1, 'get' ) == 101) {
    } else {
    }

    [Ответить]

  • Валерий — 05.11.2014 в 23:17 #

    Спасибо! Все работает так, как написано.

    [Ответить]