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

hugospb

  • Осваиваюсь на форуме
  • 11
  • 0 / 0
В ИЕ 6 все сьежает...
« : 28.04.2009, 14:02:54 »
В ИЕ 6 все сьежает, в тоже время Хром и Мозила отлично все показывает. Расскажите где я на***косячил?  !!!???!!! Рытье форума и инета пока что нечего не дало.

Сайт: http://diasled.ru/

ЗЫ: Это мой первый сайт, так что не закидывайте камнями.
*

Dim

  • Захожу иногда
  • 88
  • 0 / 0
  • Чпок
Re: В ИЕ 6 все сьежает...
« Ответ #1 : 28.04.2009, 15:10:49 »
Это не ты накосячил, это чуваки из Microsoft накосячили, во всём всегда виновата первопричина. Шутка :)
Я не знаю по какой технологии лепился твой сайт, сам я только пока их на таблицах делаю, так вот, если в главную таблицу повставлять отметки с контентом через перегородки на одном уровне все меню остаются на своём месте. ВОбщем если на таблицах соберал повставляй перегородки ;)
*

hugospb

  • Осваиваюсь на форуме
  • 11
  • 0 / 0
Re: В ИЕ 6 все сьежает...
« Ответ #2 : 28.04.2009, 15:32:04 »
На каких таких таблицах?  :o Я на Joomla 1.5.8 сижу(шаблон siteground-j15-34), и просто через панель делаю, изредка лажу в кссы и хтмл шаблона.
*

gdX

  • Глобальный модератор
  • 995
  • 128 / 0
  • Открыт к заказам по дизайну
Re: В ИЕ 6 все сьежает...
« Ответ #3 : 28.04.2009, 15:54:13 »
Да, странно, по ширине блоков все должно подходить.

Попробуйте в блоке css файла template.css

Код: css
div#maincolumn {
float:left;
margin:0 0 6px;
width:666px;
}

Добавить свойство position:relative;
*

hugospb

  • Осваиваюсь на форуме
  • 11
  • 0 / 0
Re: В ИЕ 6 все сьежает...
« Ответ #4 : 29.04.2009, 09:35:14 »
Добавил. Не помогло.  >:(

Код
div#maincolumn {
float: left;
width: 666px;
margin: 0 0 6px 0;
position:relative;
}

Пробывал другие шаблоны, тоже самое в ИЕ глючит, остальные нормально, причем глючит не только на главной, но и на остальных страницах тоже.
« Последнее редактирование: 29.04.2009, 09:57:43 от hugospb »
*

gdX

  • Глобальный модератор
  • 995
  • 128 / 0
  • Открыт к заказам по дизайну
Re: В ИЕ 6 все сьежает...
« Ответ #5 : 29.04.2009, 09:48:02 »
А пробовали изменять размеры правого блока?
Странно как-то... при сумме всех ширин внешних блоков все должно подходить тютелька в тютельку.
Как мне казалось, это может быть из-за одной таблицы внутри #maincolumn, у которой выставлена ширина в 100% и она тянется на ширину внешнего блока.

p.s. Если есть возможность, то дайте аккаунт к админке или доступ к ftp, попробую исправить глюк.
*

hugospb

  • Осваиваюсь на форуме
  • 11
  • 0 / 0
Re: В ИЕ 6 все сьежает...
« Ответ #6 : 29.04.2009, 10:01:54 »
Логин и пароль отправил в личку :)
*

gdX

  • Глобальный модератор
  • 995
  • 128 / 0
  • Открыт к заказам по дизайну
*

hugospb

  • Осваиваюсь на форуме
  • 11
  • 0 / 0
Re: В ИЕ 6 все сьежает...
« Ответ #8 : 29.04.2009, 12:31:42 »
Огромное нечеловеческое спасибо  :D А в чем была проблема то?
*

gdX

  • Глобальный модератор
  • 995
  • 128 / 0
  • Открыт к заказам по дизайну
Re: В ИЕ 6 все сьежает...
« Ответ #9 : 29.04.2009, 12:35:22 »
В основном в том, что кто-то (скорее всего редактор) вставлял тексты со стилем white-space:pre; (Строки разбиваются только в местах начала новой строки.)
Вот они и тянулись до конца строки.
Ну и по мелочи подделал изображения и пр.
*

hugospb

  • Осваиваюсь на форуме
  • 11
  • 0 / 0
Re: В ИЕ 6 все сьежает...
« Ответ #10 : 29.04.2009, 12:58:15 »
Т.е. я когда вставлял статьи, выставлял стиль кривой(хотя я его даже не выбирал) или это делал умный движок Joomla? И еще вопросик как вставлять статьи сразу в html(что бы я сам там прописывал команды html, в редакторе видел окно html но там не читабельная статья получается). А джумловский редактор мне очень не нравиться, он глючит безбожно или я в нем просто не умею работать нормально. В html как то все понятней и легко верстается.
« Последнее редактирование: 29.04.2009, 13:03:14 от hugospb »
*

hugospb

  • Осваиваюсь на форуме
  • 11
  • 0 / 0
Re: В ИЕ 6 все сьежает...
« Ответ #11 : 29.04.2009, 13:10:49 »
Ммммм, картинки все по центру стали и без обтекания :) В принципе везде нормально смотрится, только раздел "Наши клиенты" как то не очень. И это при том что у всех картинок align выставлен left.
*

gdX

  • Глобальный модератор
  • 995
  • 128 / 0
  • Открыт к заказам по дизайну
Re: В ИЕ 6 все сьежает...
« Ответ #12 : 29.04.2009, 13:24:53 »
Ммммм, картинки все по центру стали и без обтекания :) В принципе везде нормально смотрится, только раздел "Наши клиенты" как то не очень. И это при том что у всех картинок align выставлен left.
Сейчас я там задал картинкам стиль {display:block;margin:0 auto;}. Вот они так и выставляются.
Просто на главной картинки такие, что при выравнивании в левую сторону с оптекании может получаться так, что справа от картинки будет по 1 слову, т.к. картинки занимают почти все пространство ячейки.

Если у картинок выставлять align="left" - это тоже самое, что стилем прописывать float:left;
Думаю, что проще было бы реализовывать это, задавая изображениям классы, которые прописывать в стиле.
Задать, к примеру, 3 класса img_left, img_right, img_center.
Прописать для них соответствующие стили и манипулировать изображениями, подставляя стили, а не выравнивание атрибутами.

Можно, также реализовать это, назначив для каждого пункта меню «Суффикс класса страницы» и уже исходя из этого манипулировать изображениями для каждой страницы.
*

hugospb

  • Осваиваюсь на форуме
  • 11
  • 0 / 0
Re: В ИЕ 6 все сьежает...
« Ответ #13 : 30.04.2009, 13:56:51 »
Сейчас я там задал картинкам стиль {display:block;margin:0 auto;}. Вот они так и выставляются.
Просто на главной картинки такие, что при выравнивании в левую сторону с оптекании может получаться так, что справа от картинки будет по 1 слову, т.к. картинки занимают почти все пространство ячейки.

Если у картинок выставлять align="left" - это тоже самое, что стилем прописывать float:left;
Думаю, что проще было бы реализовывать это, задавая изображениям классы, которые прописывать в стиле.
Задать, к примеру, 3 класса img_left, img_right, img_center.
Прописать для них соответствующие стили и манипулировать изображениями, подставляя стили, а не выравнивание атрибутами.

Можно, также реализовать это, назначив для каждого пункта меню «Суффикс класса страницы» и уже исходя из этого манипулировать изображениями для каждой страницы.

Вообщем не могу это сделать.

Я так понял что в файл template.css надо добавить классы img_left, img_right, img_center. И потом в html статьи добавлять команду <div id="img_left">картинка</div>.

Первое что не понял это какие атрибуты выставить этим классам(незнаю я css, пока что пытаюсь курить www.w3schools.com)
Второе не понимаю почему когда вставляешь в html <div id="img_left">картинка</div>, оно не работает. Точнее я понял что класс #maincolumn идет перед этими как бы перекрывает второй(это видно если посмотреть код конечной страницы. Вообщем я пока не понял как добавить эти классы и получать результат как с атрибутом align="left".
*

gdX

  • Глобальный модератор
  • 995
  • 128 / 0
  • Открыт к заказам по дизайну
Re: В ИЕ 6 все сьежает...
« Ответ #14 : 30.04.2009, 14:57:53 »
Классы:
html - class="img_left"
css - .img_left

Идентификаторы:
html - id="img_left"
css - #img_left

Почитайте еще статейку «Чем отличаются id и class»
А если будет время и желание, то и «Учебник».
Поможет разобраться на начальном этапе изучения и отпадут многие вопросы.

Я так понял что в файл template.css надо добавить классы img_left, img_right, img_center. И потом в html статьи добавлять команду <div id="img_left">картинка</div>.

Если Вы добавите в css такие строки:
Код: css
.img_left{float:left;margin:0 10px 5px 0;}
.img_right{float:right;margin:0 0 5px 10px;}
.img_center{display:block;margin:5px auto;}

То достаточно нужный класс добавить на тег изображения и все будет срабатывать:
Код: html4strict
<img class="img_left" src="image.jpg" alt="alt text" />
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться