Форум русской поддержки Joomla!® CMS
06.12.2016, 00:45:09 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1] 2 3 4   Вниз
  Добавить закладку  |  Печать  
Автор

Различные условия в шаблонах Joomla 3.0 и 2.5

 (Прочитано 8784 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Fedor Vlasenko
Профи
********

Репутация: +696/-5
Offline Offline

Пол: Мужской
Сообщений: 3820


Все начинается с Value


« : 01.11.2013, 01:27:19 »

Уважаемые господа! Хочу отметить, что есть прекрасный раздел для условий Различные условия в шаблонах Joomla 1.5
Предлагаю вам универсальное решение
И так при включенном SEF, чтобы узнать не SEF ссылку достаточно в шаблоне написать
Код
<?php echo $_SERVER["HTTP_HOST"].'/index.php?' . http_build_query($_REQUEST); ?>
выведет не SEF ссылку.
Предлагаю вам воспользоватся функцией showPage, которая даст вам легко, без использования api Joomla, контролировать вывод на разных страницах того или иного элемента. Функция должна быть объявлена выше ее применения.
Функция возвращает два значения. True или false (разрешено или запрещено)

Код
function showPage($x = array()){
   return array_intersect_assoc($x,  $_REQUEST) === $x;
}

Как видите, код достаточно прост. Единственный аргумент функции, это массив параметров которые нужно сравнить. Присутствуют ли они в адресе вашей страницы (не SEF ссылке). Анализируя ссылки ваших страниц вы легко можете задать ваши условия.
Пару примеров:
Показать текстовый блок
Еще пример решения использования фильтров php. Создаем условие для блога категории компонента com_content
Показать текстовый блок
JRequest - будет удален. И если вышеприведенное решение не помогает, смотрите для ознакомления
JInput
Фильтрация данных
« Последнее редактирование: 01.02.2016, 22:40:27 от Fedor Vlasenko » Записан
artel-st
Давно я тут
****

Репутация: +36/-1
Offline Offline

Сообщений: 352


« Ответ #1 : 01.11.2013, 14:48:41 »

Спасибо, +, добавил в закладки
Записан
streelok
Давно я тут
****

Репутация: +0/-6
Offline Offline

Сообщений: 342


« Ответ #2 : 08.01.2014, 17:04:43 »

я использовал вот такую запись

<?php if(showPage(array('Itemid'=>'101'))): $index="_index"; endif;?>


а можно написать к примеру на старницах Itemid 101, 102, 105 использовать $index="_index  а например на какких то других определенных использовать $page="page"  наприсал как пример...если да то подскажите пожалуйста как это правильно записать
Записан
Fedor Vlasenko
Профи
********

Репутация: +696/-5
Offline Offline

Пол: Мужской
Сообщений: 3820


Все начинается с Value


« Ответ #3 : 08.01.2014, 17:34:53 »

Код
// создаем массив с нужными значениями
$arr = Array(101, 102, 105);
// с помощью Jinput получаем значение Itemid текущей страницы
//$Itemid = JFactory::getApplication()->input->getInt('Itemid', 0);
// а лучше встроенных фильтров php
$Itemid = filter_input(INPUT_GET, 'Itemid', FILTER_VALIDATE_INT);
// проверяем находится значение $Itemid в массиве $arr
if(in_array($Itemid, $arr )):
echo 'Да'; // Мы на этой странице
else:
echo 'Нет'; // Itemid страницы не находится  в массиве $arr
endif;
« Последнее редактирование: 16.02.2014, 04:05:25 от Fedor Vlasenko » Записан
streelok
Давно я тут
****

Репутация: +0/-6
Offline Offline

Сообщений: 342


« Ответ #4 : 09.01.2014, 14:33:25 »

спасибо большое! но зачем усложнять с различными созданием масивов и разными функциями?

в стврой версии исмользовалось
$Itemid = JRequest::getInt( 'Itemid', 1, 'get' );

а я щас смотрю по вашему коду на замену пришкл код
$Itemid = JFactory::getApplication()->input->getInt('Itemid', 0);

потом просто работать с условиями обычными $Itemid   .... нет же ни какой разницы? это я щас спрашиваю как у длюдей разбирающихся в этом все хорошо а не для того чтобы поумничать)))
Записан
Fedor Vlasenko
Профи
********

Репутация: +696/-5
Offline Offline

Пол: Мужской
Сообщений: 3820


Все начинается с Value


« Ответ #5 : 09.01.2014, 17:00:17 »

но зачем усложнять с различными созданием масивов и разными функциями?
можешь и так писать, это личное дело, но величина кода будет увеличиваться, гораздо короче создать массив и в нем перебирать значения
// Используем switch-case
Код
switch ($Itemid) {
case 101:
   echo "101 - id меню";
   break;
case 102:
   echo "102 - id меню";
   break;
case 105:
   echo "105 - id меню";
   break;
default:
   echo "остальные меню";
}
Записан
Kalipso
Осваиваюсь на форуме
***

Репутация: +0/-1
Offline Offline

Сообщений: 90


« Ответ #6 : 20.02.2014, 18:33:21 »

Подскажите, пожалуйста, как в Joomla 2.5 задать такое условие: в материалах определённой категории (по id) для всех групп, кроме одной (по id) выводить некое сообщение?
Записан
Fedor Vlasenko
Профи
********

Репутация: +696/-5
Offline Offline

Пол: Мужской
Сообщений: 3820


Все начинается с Value


« Ответ #7 : 20.02.2014, 22:28:34 »

для всех групп, кроме одной (по id) выводить некое сообщение?
а с не авторизованными, что будем делать?
Записан
Kalipso
Осваиваюсь на форуме
***

Репутация: +0/-1
Offline Offline

Сообщений: 90


« Ответ #8 : 21.02.2014, 03:24:51 »

а с не авторизованными, что будем делать?
На сайте есть:
1. неавторизованные
2. авторизованные "родители" (это новая группа)
3. авторизованные не "родители"


Сообщение не должно быть видно только "родителям". Остальным - не "родителям" и всем неавторизованным - должно быть видно сообщение "Чтобы принять участие в обсуждении, становитесь родителями" Azn. Сообщение должно выводиться в материалах из определённой категории.
« Последнее редактирование: 21.02.2014, 09:58:59 от Kalipso » Записан
Fedor Vlasenko
Профи
********

Репутация: +696/-5
Offline Offline

Пол: Мужской
Сообщений: 3820


Все начинается с Value


« Ответ #9 : 21.02.2014, 16:05:51 »

Решение
Код
<?php 
function showPage($x = array()){
   return array_intersect_assoc($x,  $_REQUEST) == $x;
}
//группа пользователей которой не показываем - 8, номер категории материалов19
if(showPage(array('option'=>'com_content', 'view'=>'article', 'catid'=>'19')) &&
!in_array(8, JFactory::getUser()->getAuthorisedGroups())):?>
<span>"Чтобы принять участие в обсуждении, становитесь родителями"</span>
<?php endif;?>
Записан
Kalipso
Осваиваюсь на форуме
***

Репутация: +0/-1
Offline Offline

Сообщений: 90


« Ответ #10 : 22.02.2014, 04:05:27 »

Решение...
Отлично, благодарствую!
Записан
waterfly
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 83


« Ответ #11 : 16.05.2014, 21:55:23 »

Добрый вечер. Подскажите пожалуйста. В шаблоне компонента вывожу модуль таким образом:
Код:
<?php $modules =JModuleHelper::getModules('user-review-item'); foreach ($modules as $module){ echo JModuleHelper::renderModule($module);} ?>
Как составить условие для вывода другого модуля если первый оказался пустой?
Записан
Fedor Vlasenko
Профи
********

Репутация: +696/-5
Offline Offline

Пол: Мужской
Сообщений: 3820


Все начинается с Value


« Ответ #12 : 16.05.2014, 22:52:03 »

Здесь вы выводите не модуль, а модули в позиции user-review-item
Пожалуйста, приводите код к удобочитаемому виду.
Так лучше
Код
$modules = JModuleHelper::getModules('user-review-item');
$html = "";
foreach ($modules as $module) {
   $html .= JModuleHelper::renderModule($module);
}
if ($html == ""):
   echo "Пусто";
else:
   echo $html;
endif;
 
метод 
echo JFactory::getDocument()->countModules('user-review-item');
выведет вам количество модулей в позиции
в шаблоне можно
$this->countModules('user-review-item');
посмотрите здесь как выводить один модуль
Несколько модулей в одной статье
Примерно как  то
Код
$html = "";
$module = JModuleHelper::getModule('mod_banners');
$html =  JModuleHelper::renderModule($module);
if(!$html):
   $module = JModuleHelper::getModule('mod_custom');
   $html =  JModuleHelper::renderModule($module);
endif;
echo $html;
Записан
koyot777
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Пол: Мужской
Сообщений: 110


Не щекочи койота..


« Ответ #13 : 21.05.2014, 14:15:27 »

Всем привет! подскажите как можно в шаблоне сделать ссылку "вход" и "выход" отображающуюся только гостям или зарег пользователям?
для дж1.5 вроде есть ответ а вот на дж2.5 не смог найти. заранее благодарен за помощь.
Записан
verstalshik
Практически профи
*******

Репутация: +94/-1
Offline Offline

Сообщений: 1788



« Ответ #14 : 14.06.2014, 21:36:41 »

Главную определяю так, где-то нарыл, работает четко!
Т.е. что такое главная? это та стр, которая назначена как ДЕФАУЛТная!
Правим файл index.php, на примере шаблона протостар:

1 ШАГ
Показать текстовый блок

2 ШАГ
Показать текстовый блок

ВСЁ!
Записан
Fedor Vlasenko
Профи
********

Репутация: +696/-5
Offline Offline

Пол: Мужской
Сообщений: 3820


Все начинается с Value


« Ответ #15 : 14.06.2014, 21:50:04 »

verstalshik
Цитировать
Здесь мой текст для главной страницы! УРАА!! Я крутой прогер!!
Joomla 2.5 - проверка на главную страницу
Записан
dron
Живу я здесь
******

Репутация: +11/-9
Offline Offline

Сообщений: 1080


« Ответ #16 : 17.07.2014, 23:46:37 »

Друзья, день добрый! прошу помощи. использовал ваш код для джумшопинга:

<?php if(showPage(array('option'=>'com_jshopping')) && !showPage(array('controller'=>'product'))):?>
На всех страницах магазина кроме продуктов
<?php endif;?>

мне не нужно на странице товара выводить левую колонку. она не выводится, но как сделать что бы при этом оставшийся контент выводился на всю ширину экрана?

Заранее спасибо!
Записан
Fedor Vlasenko
Профи
********

Репутация: +696/-5
Offline Offline

Пол: Мужской
Сообщений: 3820


Все начинается с Value


« Ответ #17 : 18.07.2014, 12:04:40 »

Страница продукта так должна определятся
Код
<?php if(showPage(array('option'=>'com_jshopping', 'controller'=>'product'))):?>
<div class="left">Страница продукта левый блок</div>
<?php endif; ?>
Может еще эта тема чем то поможет в поиске решения
Ширина модулей в зависимости от количества опубликованных позиций (Решение)
Записан
oleg_v
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 15


« Ответ #18 : 07.09.2014, 18:55:30 »

Здравствуйте подскажите как для определенной категории материалов (например id9) добавить к классу class="articles" класс colums (class="articles colums)

<div class="articles<?php if  ?  { echo ' colums';} ?>">

Спасибо.
Записан
Fedor Vlasenko
Профи
********

Репутация: +696/-5
Offline Offline

Пол: Мужской
Сообщений: 3820


Все начинается с Value


« Ответ #19 : 07.09.2014, 19:40:30 »

Примерно так
Код
<?
$input = JFactory::getApplication()->input;
$option   = $input->getCmd('option', '');
$catid = $input->getInt('catid', '');
$cls = 'articles';
if($option == 'com_content' && $catid == 9){
$cls .= ' colums';
}
?>
Код
<div class="<?=$cls;?>">
Записан
oleg_v
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 15


« Ответ #20 : 07.09.2014, 20:19:37 »

Примерно так
Код
<?
$input = JFactory::getApplication()->input;
$option   = $input->getCmd('option', '');
$catid = $input->getInt('catid', '');
$cls = 'articles';
if($option == 'com_content' && $catid == 9){
$cls .= ' colums';
}
?>
Код
<div class="<?=$cls;?>">

очень благодарен!
Записан
midav
Живу я здесь
******

Репутация: +113/-1
Offline Offline

Пол: Мужской
Сообщений: 946



« Ответ #21 : 09.11.2014, 17:05:46 »

Код
$Itemid = filter_input(INPUT_GET, 'Itemid', FILTER_VALIDATE_INT);
 
Если использовать в шаблоне, возвращает NULL . Поскольку массив $_GET пустой . А в $_REQUEST переменные Itemid, option, view и т.д. есть . Почему так ?
Записан
Fedor Vlasenko
Профи
********

Репутация: +696/-5
Offline Offline

Пол: Мужской
Сообщений: 3820


Все начинается с Value


« Ответ #22 : 10.11.2014, 13:02:56 »

в $_REQUEST заносятся данные не только с $_GET а также $_POST
кроме того эти массивы глобальные и может какой то код заносит туда свои значения после в массив
INPUT_GET берет данные из GET запроса
Записан
midav
Живу я здесь
******

Репутация: +113/-1
Offline Offline

Пол: Мужской
Сообщений: 946



« Ответ #23 : 10.11.2014, 21:44:23 »

Это понятно . POST тоже пустой .

Я к тому, что вот эта конструкция, с помощью фильтров php , не срабатывает в Joomla 3 . По крайней мере у меня на тестовом сайте .
Код
// с помощью Jinput получаем значение Itemid текущей страницы
//$Itemid = JFactory::getApplication()->input->getInt('Itemid', 0);
// а лучше встроенных фильтров php
$Itemid = filter_input(INPUT_GET, 'Itemid', FILTER_VALIDATE_INT);
 
Записан
fsv
Практически профи
*******

Репутация: +330/-2
Offline Offline

Пол: Мужской
Сообщений: 2238


« Ответ #24 : 10.11.2014, 23:15:23 »

Я к тому, что вот эта конструкция, с помощью фильтров php , не срабатывает в Joomla 3 .
Код
$Itemid = $_GET['Itemid'] ? $_GET['Itemid'] : '';
if( $Itemid ){
   $Itemid = filter_var($Itemid, FILTER_SANITIZE_NUMBER_INT);
}
Записан
Fedor Vlasenko
Профи
********

Репутация: +696/-5
Offline Offline

Пол: Мужской
Сообщений: 3820


Все начинается с Value


« Ответ #25 : 10.11.2014, 23:27:44 »

Код
$Itemid = isset($_REQUEST['Itemid'])? $_REQUEST['Itemid']: NULL;
if( $Itemid ){
   $Itemid = filter_var($Itemid, FILTER_SANITIZE_NUMBER_INT);
}
 
а так
Записан
midav
Живу я здесь
******

Репутация: +113/-1
Offline Offline

Пол: Мужской
Сообщений: 946



« Ответ #26 : 10.11.2014, 23:30:50 »

Код
$Itemid = $_GET['Itemid'] ? $_GET['Itemid'] : '';
if( $Itemid ){
   $Itemid = filter_var($Itemid, FILTER_SANITIZE_NUMBER_INT);
}

Смысл этой конструкции ? Она не получит значение переменной, потому  что в $_GET этой переменной нет .
Надо получать значение напрямую из $_REQUEST или с помощью родного класса Joomla JInput .

А пишу я всё это вот по этому поводу :
Код:
// с помощью Jinput получаем значение Itemid текущей страницы
//$Itemid = JFactory::getApplication()->input->getInt('Itemid', 0);
// а лучше встроенных фильтров php
$Itemid = filter_input(INPUT_GET, 'Itemid', FILTER_VALIDATE_INT);
Записан
midav
Живу я здесь
******

Репутация: +113/-1
Offline Offline

Пол: Мужской
Сообщений: 946



« Ответ #27 : 10.11.2014, 23:33:15 »

Код
$Itemid = isset($_REQUEST['Itemid'])? $_REQUEST['Itemid']: NULL;
if( $Itemid ){
   $Itemid = filter_var($Itemid, FILTER_SANITIZE_NUMBER_INT);
}
 
а так

Так конечно всё будет .  Smiley Только в чём выгода по сравнению с JInput ?
Записан
Fedor Vlasenko
Профи
********

Репутация: +696/-5
Offline Offline

Пол: Мужской
Сообщений: 3820


Все начинается с Value


« Ответ #28 : 10.11.2014, 23:56:21 »

скорость само собой. Ты используешь встроенные средства языка. Хочу отметить, что ранее Jinput не обрабатывал должным образом ссылки.
Программистам легче привыкнуть к одним функциям, значит еще переносимость кода под другие cms
Записан
SolopoV
Завсегдатай
*****

Репутация: +12/-0
Offline Offline

Пол: Мужской
Сообщений: 462


зеленею...


« Ответ #29 : 01.12.2014, 23:53:37 »

Попался кривенький компонент, но что бы код не переписывать, нашел лазейку для нормального функционирования.

Вопрос в следующем:

Имеем .php файл в админке компонента, часть кода в этом файле:

Код:
}
return JURI::root().'cache/'.$cacheFile;
}

Мне необходимо вывести строчку по условию:

Если для фронта сайта, то строка неизменна:
Код:
return JURI::root().'cache/'.$cacheFile;

Если для админки, то строка другая должна быть:
Код:
return JURI::root().'administrator/cache/'.$cacheFile;

Как определить условие вывода для админки и для фронта?

Заранее благодарю за совет, кто знает каким образом это сделать.
Записан
Страниц: [1] 2 3 4   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet