Иногда встает такая задача: определить главную страницу в 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 работает данный метод, у меня 1.5.23.
Для любой 1.5 подходит метод.
на 1.0, думаю ошибки вызовет этот код.
Так делать НЕЛЬЗЯ!!! Данный способ не срабатывает если есть несколько пунктов меню, которые ссылаются на главную.
Вот корректный способ:
if(JRequest::getVar(‘view’) == «frontpage» ) {
//Вы на главной
}
else {
//Вы не на главной
}
Учту, спасибо.
Но ссылаться в нескольких пунктах меню на Главную, как на компонент — тоже не верно.
Спасибо! Ковырялся с выдергиванием $itemid = $GET[‘itemid’] но это такие костыли. А тут то что надо )
Не верно все равно. А если там далеко не «frontpage», то ваш код работать не будет.
Добрый день!
Способ действительно хорош, есть много его вариаций со сравнением разных переменных, но существует другая беда:
например, если ставить компоненты (virtuemart и т.п.), возникают ситуации, когда они уходят на index.php. Бывают ситуации (до смешного), например при использовании стандартного модуля com_content в виде блога при переходе по ссылке «читать далее» ItemId присваивается как у пункта меню по умолчанию, как следствие выводится на экран другой материал, а шаблон остается прежним, т.к. условие $menu->getActive() == $menu->getDefault() выполняется.
Отсюда вопрос: можно ли как-то выделить именно главную страницу (будь то блог, материал, еще что-нибудь) и если страница отличается от главной, то тогда включать шаблон по умолчанию
Приветствую. Если я правильно понял вопрос, то возможно эта статья поможет http://stofin.ru/code/cart-virtuemart-1267
Да, я ее читал и конкретно для VirtualMart’a она может и поможет (сам не пробовал), но это решение только для него. Остается еще com_content с непонятно откуда вылезающими ItemId, у коллеги какой-то календарь себя так же ведет и т.д.
Хочется комплексное решение в самом шаблоне получить.
Сейчас продумываю вариант проверки по уникальному заголовку (title), заданному в самом пункте меню.
кстати в этой ветке Pavel писал примерно про это, но он уводит на стандартную «Главную страницу», а я хочу видеть любую (материал, блог, форум) с включенной галочкой главная
Автор статьи предложил по моему как раз Ваш вариант. Не могу ручаться, что он везде работает, но судя по коду он как раз проверяет дефолтную страницу.
Спасибо, полезный материал
$menu->getDefault()->link — отак нужно в 2.5
не работает при двух и более языках кстати!
А я делаю так:
Сорри, код порезался:
Спасибо! Все работает так, как написано.