Новости 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 Гость просматривают эту тему.
  • 3 Ответов
  • 1944 Просмотров
*

joomla-mla

  • Осваиваюсь на форуме
  • 19
  • 0 / 0
Здравствуйте!

Возникла проблема. не знаю, куда вставить скрипт, чтобы он применялся не для всего сайта, а только для одного раздела (или для нескольких). Скрипт меняет размер шрифта.

Код
var prefsLoaded = false;
var defaultFontSize = 76;
var currentFontSize = defaultFontSize;

function revertStyles(){

currentFontSize = defaultFontSize;
changeFontSize(0);

}

function toggleColors(){
if(currentStyle == "White"){
setColor("Black");
}else{
setColor("White");
}
}

function changeFontSize(sizeDifference){
currentFontSize = parseInt(currentFontSize) + parseInt(sizeDifference * 5);

if(currentFontSize > 100){
currentFontSize = 100;
}else if(currentFontSize < 60){
currentFontSize = 60;
}

setFontSize(currentFontSize);
};

function setFontSize(fontSize){
var stObj = (document.getElementById)? document.getElementById('content_area') : document.all('content_area');
document.body.style.fontSize = fontSize + '%';

//alert (document.body.style.fontSize);
};


function createCookie(name,value,days) {
  if (days) {
    var date = new Date();
    date.setTime(date.getTime()+(days*24*60*60*1000));
    var expires = "; expires="+date.toGMTString();
  }
  else expires = "";
  document.cookie = name+"="+value+expires+"; path=/";
};

function readCookie(name) {
  var nameEQ = name + "=";
  var ca = document.cookie.split(';');
  for(var i=0;i < ca.length;i++) {
    var c = ca[i];
    while (c.charAt(0)==' ') c = c.substring(1,c.length);
    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
  }
  return null;
};

window.onload = setUserOptions;

function setUserOptions(){
if(!prefsLoaded){

cookie = readCookie("fontSize");
currentFontSize = cookie ? cookie : defaultFontSize;
setFontSize(currentFontSize);

prefsLoaded = true;
}

}

window.onunload = saveSettings;

function saveSettings()
{
  createCookie("fontSize", currentFontSize, 365);
}

По идее, тут вроде к id документа надо скрипт привязать (но как именно - чтобы к разделу)?
*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
можно плагин скачать, который произвольный код вставляет.
но в Js я ничего не смыслю, поэтому  не знаю, как оно отработает
*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
*

joomla-mla

  • Осваиваюсь на форуме
  • 19
  • 0 / 0
вот тут смотри
http://extensions.joomla.org/extensions/edition/custom-code-in-content

вообще, можно и в шаблоне делать, но эт несколько бредово-потому как динамично к контенту не прицепишься
спасибо. Там все больше отзывы - без комментариев, что да как (JIncludes).
ну, не в шаблоне - в разделе хотел, чтобы цеплялся к каждой новости.

http://www.floridahostweb.com/index.php?option=com_phocadownload&view=category&id=3:design-modules-joomla&Itemid=2

Подобное действует на весь сайт (в примере - еще и криво, не увеличивает). А мне бы - в 1 раздел вывести.

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

Изменение JA Purity

Автор green45

Ответов: 71
Просмотров: 41099
Последний ответ 01.01.2016, 14:39:28
от Naum
Не получается поставить скрипт в шаблон Joomla 1, 5

Автор ivs1

Ответов: 2
Просмотров: 1995
Последний ответ 31.10.2015, 16:48:36
от ivs1
Как убрать значки размера шрифта?

Автор slavik888

Ответов: 13
Просмотров: 4937
Последний ответ 17.01.2014, 19:31:24
от Кент
Изменение ширины позиций под модули в шаблоне ICKI Sports Gavick

Автор Outstanding

Ответов: 4
Просмотров: 1919
Последний ответ 14.07.2013, 23:49:27
от Outstanding
Как удалить кнопки именеия размера шрифта в шаблоне Ja Puruty II

Автор mrTravelier

Ответов: 2
Просмотров: 1512
Последний ответ 27.09.2012, 12:47:00
от mrTravelier