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

romagromov

  • Захожу иногда
  • 494
  • 7 / 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

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

romagromov

  • Захожу иногда
  • 494
  • 7 / 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

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

romagromov

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

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

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

kern.USR

  • Давно я тут
  • 805
  • 61 / 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

  • Захожу иногда
  • 494
  • 7 / 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

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

Aleks.Denezh

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

romagromov

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

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


*

kern.USR

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

romagromov

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

Aleks.Denezh

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

romagromov

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

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

Спасибо.
*

Aleks.Denezh

  • Живу я здесь
  • 3362
  • 416 / 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

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

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

Верно?
*

Aleks.Denezh

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

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

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

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

romagromov

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

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

romagromov

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

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

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

Aleks.Denezh

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

romagromov

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

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

romagromov

  • Захожу иногда
  • 494
  • 7 / 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

  • Легенда
  • 8862
  • 1624 / 63
  • Севастополь == Россия
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';
}
Все истины, которые я хочу вам изложить, — бесстыдная ложь.
Записки нетрезвого кодера || -=Joomla FAQ=- || -=все плохо=- || skype: beliyadm_pb
*

Aleks.Denezh

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

robert

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

Aleks.Denezh

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

robert

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

romagromov

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

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

0 - Обнаружена ошибка. Call to undefined method Joomla\Registry\Registry::getVa

Автор Victor333

Ответов: 22
Просмотров: 372
Последний ответ 09.11.2018, 11:46:17
от Victor333
Редактирование шаблона админки Joomla. Формы размещения статьи [Решено]

Автор Eholov

Ответов: 8
Просмотров: 324
Последний ответ 18.10.2018, 21:16:55
от lexxbry
Медиа менеджер и редактор фоток в Joomla

Автор informprostor

Ответов: 13
Просмотров: 590
Последний ответ 17.10.2018, 20:05:33
от informprostor
Как исправить ошибку Error: 500 при обновлении Joomla до 3.8.1?

Автор Dmitry T.

Ответов: 7
Просмотров: 1184
Последний ответ 16.10.2018, 23:38:46
от Septdir
После обновления до Joomla 3.7 в админке в меню "Компоненты" пропали пункты

Автор lolitma3

Ответов: 37
Просмотров: 5450
Последний ответ 11.10.2018, 16:28:28
от khan-alex