Новости Joomla

0 Пользователей и 1 Гость просматривают эту тему.
  • 27 Ответов
  • 2438 Просмотров
*

romagromov

  • Давно я тут
  • 692
  • 9 / 3
Здравствуйте!
В каком порядке, какие файлы загружает Joomla при открытии страницы?

Объясню, мне надо передать глобальное значение переменной.
Для этого я в шаблон Protostar, в файл /templates/protostar/index.php

вставляю код для записи переменной:

Код
$app = JFactory::getApplication();
$option = $app->input->getCmd('option');
$myvarname = 'some_calculated_value';
$app->setUserState( $option . '.myvarname' , $myvarname);


А затем в шаблоне компонента считываю ее /components/com_mycomponent/templates/mytemplate/item.php

Код
$app = JFactory::getApplication();
$option = $app->input->getCmd('option');
$myvarname = $app->getUserState( $option . '.myvarname');


Но первый код должен загрузиться раньше второго, а это не происходит.
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
Re: Порядок загрузки файлов Joomla?
« Ответ #1 : 10.02.2018, 11:13:31 »
обратно передать не получится, можно из компонента передать в шаблон, но из шаблона в компонент нет, я не представлю ни одного случая когда может понадобиться это.. опишите вашу задачу, может есть более простое и изящное решение!
*

romagromov

  • Давно я тут
  • 692
  • 9 / 3
Re: Порядок загрузки файлов Joomla?
« Ответ #2 : 10.02.2018, 12:23:00 »
обратно передать не получится, можно из компонента передать в шаблон, но из шаблона в компонент нет, я не представлю ни одного случая когда может понадобиться это.. опишите вашу задачу, может есть более простое и изящное решение!


Мне нужно на основании URL назначить переменные:

Код
$app  = JFactory::getApplication();
$menu = $app->getMenu()->getActive();

if ( strpos($menu, '/test1')!==false) {
$modcolor = " myclass1 ";
$somevariable = 'somevalue1';
}
elseif ( strpos($menu, '/test2')!==false) {
$modcolor = " myclass2 ";
$somevariable = 'somevalue2';
}
else $modcolor = false;

$option = $app->input->getCmd('option');
$app->setUserState( $option . '.modcolor' , $modcolor);
$app->setUserState( $option . '.somevariable' , $somevariable);

Затем получить эти данные
в шаблоне компонента,
в шаблоне плагина компонента,
в шаблонах модулей.

Код
$app = JFactory::getApplication();
$option = $app->input->getCmd('option');
$modcolor = $app->getUserState( $option . '.modcolor');
$somevariable = $app->getUserState( $option . '.somevariable');

Я конечно могу вставить этот код во всех указанных шаблонах:

Код
$app  = JFactory::getApplication();
$menu = $app->getMenu()->getActive();

if ( strpos($menu, '/test1')!==false) {
$modcolor = " myclass1 ";
$somevariable = 'somevalue1';
}
elseif ( strpos($menu, '/test2')!==false) {
$modcolor = " myclass2 ";
$somevariable = 'somevalue2';
}
else $modcolor = false;

Но на одной странице создавать одно и тоже условие 5-6 раз как-то не хочется.
Хочу один раз назначить переменные и передать их во все нужные места.

PS Для чего?

В зависимости от урла в модули подгружается особый класс css, на странице компонента к некоторым ссылкам добавляется специальный суффикс, тоже самое делается в плагине. Кроме того, на странице компонента исходя из урла формируется вывод некоторых элементов.
« Последнее редактирование: 10.02.2018, 19:01:59 от romagromov »
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Порядок загрузки файлов Joomla?
« Ответ #3 : 10.02.2018, 13:01:22 »
Мне нужно на основании URL назначить переменные
Делайте это в компоненте.
Если дело касается только CSS, то можно JavaScript'ом.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

romagromov

  • Давно я тут
  • 692
  • 9 / 3
Re: Порядок загрузки файлов Joomla?
« Ответ #4 : 10.02.2018, 13:36:31 »
Делайте это в компоненте.
Если дело касается только CSS, то можно JavaScript'ом.

Не только CSS.
На странице выводятся целые блоки, если URL соответствует условию.

Меня мой вариант устраивает.
Но надо правильно разместить первую часть кода.
« Последнее редактирование: 10.02.2018, 19:01:41 от romagromov »
*

kern.USR

  • Давно я тут
  • 827
  • 68 / 1
Re: Порядок загрузки файлов Joomla?
« Ответ #5 : 10.02.2018, 14:42:07 »
Сделайте system плагин, который сработает на какое-нибудь условие https://docs.joomla.org/Plugin/Events/System (в зависимости от того, какую инфу дёрнуть нужно - выбирайте)
Подготовте свои переменные и передайте их в приложение https://api.joomla.org/cms-3/classes/Joomla.CMS.Application.WebApplication.html#method_set
А потом, в нужных местах, дёргайте их оттуда
*

romagromov

  • Давно я тут
  • 692
  • 9 / 3
Re: Порядок загрузки файлов Joomla?
« Ответ #6 : 10.02.2018, 18:56:49 »
Сделайте system плагин, который сработает на какое-нибудь условие https://docs.joomla.org/Plugin/Events/System (в зависимости от того, какую инфу дёрнуть нужно - выбирайте)
Подготовте свои переменные и передайте их в приложение https://api.joomla.org/cms-3/classes/Joomla.CMS.Application.WebApplication.html#method_set
А потом, в нужных местах, дёргайте их оттуда


К сожалению, до создания плагинов пока не дорос :(
Но спасибо...
*

kern.USR

  • Давно я тут
  • 827
  • 68 / 1
Re: Порядок загрузки файлов Joomla?
« Ответ #7 : 10.02.2018, 19:47:31 »
К сожалению, до создания плагинов пока не дорос :(
Там проще, чем с модулями https://docs.joomla.org/J3.x:Creating_a_Plugin_for_Joomla/ru
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
Re: Порядок загрузки файлов Joomla?
« Ответ #8 : 11.02.2018, 15:33:19 »
К сожалению, до создания плагинов пока не дорос :(
Но спасибо...
генерируете каркас в вкладке события выбираете группу system и событие например onAfterRoute, устанавливаете плагин, идёте в него, находите в нем метод onAfterRoute и пишите в него все условия которые писали в шаблоне.. знаний никаких тут особо не надо!
*

romagromov

  • Давно я тут
  • 692
  • 9 / 3
Re: Порядок загрузки файлов Joomla?
« Ответ #9 : 11.02.2018, 17:51:56 »
находите в нем метод onAfterRoute и пишите в него все условия которые писали в шаблоне

1.Имеется в виду в коде плагина?
2. Туда разместить первую часть кода, в которой задаются переменные?
3. Вторая часть кода как и была, находится в нужных мне местах или она не нужна будет? Имею в виду, что если плагин на странице, то он уже задал переменные.


*

kern.USR

  • Давно я тут
  • 827
  • 68 / 1
Re: Порядок загрузки файлов Joomla?
« Ответ #10 : 11.02.2018, 17:57:32 »
1.Имеется в виду в коде плагина?
да
2. Туда разместить первую часть кода, в которой задаются переменные?
Именно
3. Вторая часть кода как и была, находится в нужных мне местах или она не нужна будет? Имею в виду, что если плагин на странице, то он уже задал переменные.
Вторая часть кода должна остаться там же, где и была
*

romagromov

  • Давно я тут
  • 692
  • 9 / 3
Re: Порядок загрузки файлов Joomla?
« Ответ #11 : 11.02.2018, 21:27:46 »
А как сделать так, чтобы плагин срабатывал только в определенном компоненте?
Иначе он будет работать на всем сайте. Это лишнее.
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
Re: Порядок загрузки файлов Joomla?
« Ответ #12 : 16.02.2018, 15:21:46 »
А как сделать так, чтобы плагин срабатывал только в определенном компоненте?
Иначе он будет работать на всем сайте. Это лишнее.
В начале метода onAfterRoute (){
$input = JFactory::getApplication()->input;
if($input->getCmd('option')!== 'com_component') return;
*

romagromov

  • Давно я тут
  • 692
  • 9 / 3
Re: Порядок загрузки файлов Joomla?
« Ответ #13 : 02.03.2018, 15:48:53 »
находите в нем метод onAfterRoute и пишите в него все условия которые писали в шаблоне.. знаний никаких тут особо не надо!

А можно ли в настройках плагина добавить текстовое поле, чтобы можно было в него в админке добавить все мои условия в виде php кода, а уже потом, чтобы оно отработалось в onAfterRoute плагина?

Спасибо.
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
Re: Порядок загрузки файлов Joomla?
« Ответ #14 : 02.03.2018, 15:56:45 »
А можно ли в настройках плагина добавить текстовое поле, чтобы можно было в него в админке добавить все мои условия в виде php кода, а уже потом, чтобы оно отработалось в onAfterRoute плагина?
Разрешаю добавляйте  ;D

В XML сгенерированого плагина (называется также как и файл плагина) должна быть такая секция:

внутри пишете например:
<field name="test" type="text" label="Тестовое поле" />
Оно появится в админке если вы откроете плагин на редактирование в менеджере плагинов

получать это значение можно в любом месте класса плагина через $this->params->get('test');
« Последнее редактирование: 02.03.2018, 16:11:13 от Aleks.Denezh »
*

romagromov

  • Давно я тут
  • 692
  • 9 / 3
Re: Порядок загрузки файлов Joomla?
« Ответ #15 : 02.03.2018, 16:16:05 »
То есть вместо условий в коде плагина, в методе onAfterRoute прямо указываю

Код
$this->params->get('test');

Верно?
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
Re: Порядок загрузки файлов Joomla?
« Ответ #16 : 02.03.2018, 16:49:22 »

То есть вместо условий в коде плагина, в методе onAfterRoute прямо указываю

Код
$this->params->get('test');

Верно?
нет, вам лучше в параметры плагина внести какие то переменные которые вам надо, получать их и формировать ваши условия лучше всего в коде плагина,
в админке лучше не давать возможность писать php код, это плохая практика!
*

romagromov

  • Давно я тут
  • 692
  • 9 / 3
Re: Порядок загрузки файлов Joomla?
« Ответ #17 : 19.03.2018, 23:08:13 »
В начале метода onAfterRoute (){
$input = JFactory::getApplication()->input;
if($input->getCmd('option')!== 'com_component') return;

Здравствуйте!
Этот метод работает.
А как добавить еще один компонент? Чтобы срабатывало в 2-х компонентах.
Спасибо.
*

romagromov

  • Давно я тут
  • 692
  • 9 / 3
Re: Порядок загрузки файлов Joomla?
« Ответ #18 : 19.03.2018, 23:09:48 »
Пробовал так

Код
if(($input->getCmd('option')!== 'com_flexicontent') || ($input->getCmd('option')!== 'com_contact')) return;

Не работает...
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
Re: Порядок загрузки файлов Joomla?
« Ответ #19 : 20.03.2018, 11:35:32 »
del
« Последнее редактирование: 04.05.2018, 22:30:13 от Aleks.Denezh »
*

romagromov

  • Давно я тут
  • 692
  • 9 / 3
Re: Порядок загрузки файлов Joomla?
« Ответ #20 : 20.03.2018, 13:06:13 »
Код
if(!in_array($input->getCmd('option'),  ['com_flexicontent', 'com_contact']) return;

Класс. Спасибо.
*

romagromov

  • Давно я тут
  • 692
  • 9 / 3
Re: Порядок загрузки файлов Joomla?
« Ответ #21 : 20.03.2018, 19:55:02 »
Код
if(!in_array($input->getCmd('option'),  ['com_flexicontent', 'com_contact']) return;


Не... Ошибку бьет

0 syntax error, unexpected 'return' (T_RETURN)
*

beliyadm

  • Легенда
  • 9758
  • 1664 / 66
  • Севастополь, Россия
Re: Порядок загрузки файлов Joomla?
« Ответ #22 : 20.03.2018, 22:13:31 »
if(!in_array($input->getCmd('option'),  ['com_flexicontent', 'com_contact']) return;
чуть доступней для понимания вариант ($test естественно заменить на свою получаемую, просто для демонстрации)

Код
$test = 'com_flexicontent';
if ( !in_array($test,  array('com_flexicontent', 'com_contact') )) {
echo 'not in array';
} else {
echo 'in array';
}
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
Re: Порядок загрузки файлов Joomla?
« Ответ #23 : 20.03.2018, 22:22:19 »
del
« Последнее редактирование: 04.05.2018, 22:28:27 от Aleks.Denezh »
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Порядок загрузки файлов Joomla?
« Ответ #24 : 20.03.2018, 22:28:00 »
Проблема, IMHO, в чем-то другом: этот код
Код
if(($input->getCmd('option')!== 'com_flexicontent') || ($input->getCmd('option')!== 'com_contact')) return;
должен работать.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
Re: Порядок загрузки файлов Joomla?
« Ответ #25 : 20.03.2018, 22:33:39 »
del
« Последнее редактирование: 04.05.2018, 22:28:22 от Aleks.Denezh »
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Порядок загрузки файлов Joomla?
« Ответ #26 : 20.03.2018, 22:36:04 »
Должен) если в нем вместо || поставить &&
del
P.S. Фу, ну конечно, там же стоял "!".
« Последнее редактирование: 20.03.2018, 22:39:26 от robert »
Не будь паразитом, сделай что-нибудь самостоятельно!
*

romagromov

  • Давно я тут
  • 692
  • 9 / 3
Re: Порядок загрузки файлов Joomla?
« Ответ #27 : 21.03.2018, 12:59:34 »
ой я скобочку не закрыл  ;D
сори, вот правильный вариант:
Код
if ( !in_array( $input->getCmd( 'option' ), [ 'com_flexicontent', 'com_contact' ] ) ) return;

Точно, теперь работает.
Спасибо.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Версии РНР и Joomla 3

Автор Ebelous

Ответов: 6
Просмотров: 402
Последний ответ 29.02.2024, 17:50:02
от web1
SP polls в Joomla 3.8.2

Автор wawont

Ответов: 2
Просмотров: 1438
Последний ответ 22.02.2024, 21:03:15
от Zegeberg
Исправление уязвимости в Joomla 3.10.12

Автор Sulpher

Ответов: 8
Просмотров: 770
Последний ответ 12.01.2024, 22:15:52
от stepan39
Заявки с сайта на Joomla

Автор ivs1

Ответов: 8
Просмотров: 612
Последний ответ 18.12.2023, 12:37:45
от SeBun
Прошу помощи. Ошибка при обновлении на Joomla 4

Автор wmsonic

Ответов: 1
Просмотров: 901
Последний ответ 29.10.2023, 22:07:23
от Kukush