Новости Joomla

Как триггерить события для плагинов на манер Joomla 5+?В Joomla 6 должны удалить метод...

Как триггерить события для плагинов на манер Joomla 5+?В Joomla 6 должны удалить метод...

👩‍💻 Как триггерить события для плагинов на манер Joomla 5+?В Joomla 6 должны удалить метод triggerEvent(), с помощью которого раньше вызывались события для плагинов. Теперь чтобы в своём коде вызвать событие для плагина и получить от него результаты нужно:- создать объект класса события- передать в него параметры

use Joomla\CMS\Event\AbstractEvent;use Joomla\CMS\Factory;use Joomla\CMS\Plugin\PluginHelper;// Грузим плагины нужных группPluginHelper::importPlugin('system');// Создаём объект события$event = AbstractEvent::create('onAfterInitUniverse', [    'subject' => $this,    'data'    => $data, // какие-то данные    'article' => $article, // ещё материал вдовесок    'product' => $product, // и товаров подвезли]);// Триггерим событиеFactory::getApplication()->getDispatcher()->dispatch(    $event->getName(), // Тут можно строку передать 'onAfterInitUniverse'    $event);// Получаем результаты// В случае с AbstractEvent это может быть не 'result',// а что-то ещё - куда сами отдадите данные.// 2-й аргумент - значение по умолчанию, // если не получены результаты$results = $event->getArgument('result', []);
Плюсы такого подхода - вам не нужно запоминать порядок аргументов и проверять их наличие. Если вы написали свой класс события, то в плагине можно получать аргументы с помощью методов $event->getArticle(), $event->getData(), $event->getProduct() и подобными - реализуете сами под свои нужды. Если такой класс события написали, то создаёте экземпляр своего класса события и укажите его явно в аргументе eventClass
use Joomla\Component\MyComponent\Administrator\Event\MyCoolEvent;$event = MyCoolEvent::create('onAfterInitUniverse', [    'subject'    => $this,    'eventClass' => MyCoolEvent::class, // ваш класс события    'data'       => $data, // какие-то данные    'article'    => $article, // ещё материал вдовесок    'product'    => $product, // и товаров подвезли]);
Ожидаемо, что класс вашего события будет расширять AbsractEvent или другие классы событий Joomla.🙁 Есть неприятный нюанс - нельзя просто так вызывать событие и ничего не передать в аргументы. Аргумент subject обязательный. Но если вы всё-таки не хотите туда ничего передавать - передайте туда пустой stdClass или объект Joomla\registry\Registry.
@joomlafeed#joomla #php #webdev

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

romagromov

  • Давно я тут
  • 692
  • 9 / 3
Здравствуйте!
Столкнулся с претензией заказчика, что в админке, у доп. поля типа multiselect
маленький размер по высоте, и им приходится делать лишние движения скроллом,
не говоря уже о том, что не делая этих движений, непонятно, какие позиции там скрыты:



Как видно из изображения, независимо от количества пунктов, отображается только 4, остальное надо двигать скроллом.
Не скажу, что это ужасно, но действительно неудобно.
Мои попытки пронюхать что-то связанное с этим multiselect CSS стилях ни к чему не привели.
Единственное что я нашел, что вероятно  должно решить проблему - это файл - administrator/components/com_k2/models/extrafield.php
в котором есть фрагмент кода:

Код
	case 'textarea' :
if ($active[1])
{
$output = '<textarea name="K2ExtraField_'.$extraField->id.'" id="K2ExtraField_'.$extraField->id.'" rows="10" cols="40" class="k2ExtraFieldEditor">'.$active[0].'</textarea>';
}
else
{
$output = '<textarea name="K2ExtraField_'.$extraField->id.'" rows="10" cols="40">'.$active[0].'</textarea>';
}

break;

case 'select' :
$output = JHTML::_('select.genericlist', $defaultValues, 'K2ExtraField_'.$extraField->id, '', 'value', 'name', $active);
break;

case 'multipleSelect' :
$output = JHTML::_('select.genericlist', $defaultValues, 'K2ExtraField_'.$extraField->id.'[]', 'multiple="multiple"', 'value', 'name', $active);
break;

case 'radio' :
$output = JHTML::_('select.radiolist', $defaultValues, 'K2ExtraField_'.$extraField->id, '', 'value', 'name', $active);
break;



Я специально зацепил и другие типы меню, поскольку там есть такое

Код
$output = '<textarea name="K2ExtraField_'.$extraField->id.'" rows="10" cols="40">'.$active[0].'</textarea>';


Сколько ни пытался вставить эти rows="10" cols="40" к типу multipleSelect - не получается, либо вообще бьет ошибку, либо валятся значения в этом поле.

Вопрос:

Как же все таки увеличить данный тип поля по высоте автоматически, исходя и кол-ва имеющихся значений, или хотя бы задать фиксированную высоту - допустим 20 строк, или 100px?
*

dexteron

  • Захожу иногда
  • 121
  • 17 / 0
  • Помог? Поставь мне "+"
Re: Правка CSS multiselect в админке k2
« Ответ #1 : 10.07.2012, 00:41:00 »
В общем, что я пронюхал.  8) Каждое доп. поле в к2 (мульти-список) имеет свой id. Берете этот айди и копируете в CSS файл k2.css, прописываете ему нужный height.
*

dexteron

  • Захожу иногда
  • 121
  • 17 / 0
  • Помог? Поставь мне "+"
Re: Правка CSS multiselect в админке k2
« Ответ #2 : 10.07.2012, 00:52:15 »
*

romagromov

  • Давно я тут
  • 692
  • 9 / 3
Re: Правка CSS multiselect в админке k2
« Ответ #3 : 10.07.2012, 01:00:23 »
В общем, что я пронюхал.  8) Каждое доп. поле в к2 (мульти-список) имеет свой id. Берете этот айди и копируете в CSS файл k2.css, прописываете ему нужный height.

Ну вот я взял и зашел в один материал, в котором имеется около 7 доп. полей типа multipleSelect.
Нехитрым методом использования FireBug, да и вообще любого другого анализатора стало  
понятно, что только в одном наборе доп. полей есть K2ExtraField_8, K2ExtraField_10, K2ExtraField_12 и т.д.
Надо целую кучу добавить в стили...
Вариант не подходит. Люди будут добавлять свои поля и типы - надо будет каждый раз стиль добавлять.

Я похожую задачу решал без CSS в другом компоненте. Прямо в месте кода, где выводится список явно указывал кол-во строк (перекрывая стили).
Но не могу найти здесь, где это делается., в каком файле...
Я думаю там же - administrator/components/com_k2/models/extrafield.php
*

jurassik

  • Давно я тут
  • 692
  • 52 / 1
Re: Правка CSS multiselect в админке k2
« Ответ #4 : 15.07.2012, 12:29:15 »
Ну вот я взял и зашел в один материал, в котором имеется около 7 доп. полей типа multipleSelect.
Нехитрым методом использования FireBug, да и вообще любого другого анализатора стало 
понятно, что только в одном наборе доп. полей есть K2ExtraField_8, K2ExtraField_10, K2ExtraField_12 и т.д.
Надо целую кучу добавить в стили...
Вариант не подходит. Люди будут добавлять свои поля и типы - надо будет каждый раз стиль добавлять.
зачем для каждого id?
 
Код
#extraFields select {

}
Цитировать
Я похожую задачу решал без CSS в другом компоненте. Прямо в месте кода, где выводится список явно указывал кол-во строк (перекрывая стили).
Но не могу найти здесь, где это делается., в каком файле...
Я думаю там же - administrator/components/com_k2/models/extrafield.php
слетит при обновлении компонента
сам шучу - сам смеюсь
*

baff

  • Новичок
  • 2
  • 0 / 0
Re: Правка CSS multiselect в админке k2
« Ответ #5 : 13.09.2012, 18:23:15 »
Тоже интересует как расширить поля для мультисписка. А еще немного не в тему топика вопрос: можно ли чекбоксы или радиокнопки сделать чтобы можно было выбирать сразе несколько параметров на них привязанных. вместо того же мультисписка. было бы много удобнее.
*

SDKiller

  • Moderator
  • 2705
  • 329 / 5
  • ...ergo sum
Re: Правка CSS multiselect в админке k2
« Ответ #6 : 13.09.2012, 21:02:06 »
... можно ли чекбоксы или радиокнопки сделать чтобы можно было выбирать сразе несколько параметров на них привязанных

Радио - нет, в типе radio по определению выбор только одного значения.
*

semexa

  • Новичок
  • 2
  • 0 / 0
Re: Правка CSS multiselect в админке k2
« Ответ #7 : 26.02.2015, 17:55:52 »
привет, кто-нибудь может подсказать, поля мультисписка и радио кнопки выводятся обычным текстом . Где копать чтобы сделать именно всплывающим?
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Additional Categories for K2 в админке в материалах выводить все категории

Автор NIKOLY

Ответов: 0
Просмотров: 2438
Последний ответ 26.10.2024, 16:03:57
от NIKOLY
Chosen для доподнительных полей multiselect K2

Автор Divn

Ответов: 5
Просмотров: 2883
Последний ответ 07.10.2022, 21:26:32
от Divn
Критерии поиска объекта в админке

Автор Abez

Ответов: 0
Просмотров: 866
Последний ответ 14.01.2020, 13:46:43
от Abez
Не сохраняются изменении в доп полях К2 (в админке)

Автор fireman

Ответов: 1
Просмотров: 1027
Последний ответ 15.11.2019, 16:46:57
от fireman
(K2 компонент) Правка стиля вывода списка материалов в категории

Автор Di_Bor

Ответов: 0
Просмотров: 859
Последний ответ 30.11.2018, 11:48:28
от Di_Bor