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

chilly_bang

  • Захожу иногда
  • 113
  • 1 / 1
Word -> MySQL / K2
« : 17.12.2012, 13:21:36 »
Приветствую.

Нарисовалася такая задачка:

Клиенты поставляют информацию в виде Word-файлов, которые надо отчитывать и на основании частей док-файлов (отдельных абзацев, строк, слов) создавать К2-статьи. В К2-статье около 40 дополнительных полей, куда должны записываться отдельные абзацы, строки, слова. Доп. поля разные: селекты, мультиселекты, текстовые строки и поля. Отпарсить полностью и разом Word-файлы не получается: клиенты дурные, каждый раз присылают всё по разному.

Первая идея: написать VBA-макросов по количеству доп. полей, отчитывать глазами файлы, отмечать мышкой необходимые данные и запускать соответствующий макрос, записывая сразу в MySQL.
Вторая идея: пользоваться компонентом импорта данных в К2, сперва приводить данные из Word-файлов в импортируемый вид, потом импортировать разом всё.

Подскажите, пожалуйста, какой метод эффективней, по вашему.
Спасибо.

пс: мне бы предпочтительней второй метод, т. к. для меня VBA - terra incognita:(
*

Pazys

  • Завсегдатай
  • 1738
  • 241 / 4
  • <a>А где я ошибся-то?</b>
Re: Word -> MySQL / K2
« Ответ #1 : 17.12.2012, 13:44:21 »
Третья идея - сделать шаблон для Wordа - прислать клиентам, пусть заполняют.
Четвертая идея - сделать форму, пусть клиенты заполняют онлайн.

Я много времени потратил на подобное, только 4 вариант работает.
Ишак меня нюхал ...
Если помог - плюсуйте в карму.
*

chilly_bang

  • Захожу иногда
  • 113
  • 1 / 1
Re: Word -> MySQL / K2
« Ответ #2 : 17.12.2012, 14:03:28 »
@Pazys: к сожаления, не канает. Решения возможны только на моей стороне. От клиентов ничего не получить. Бизнес идея не позволяет - клиенты слабенькие умишком.
*

Pazys

  • Завсегдатай
  • 1738
  • 241 / 4
  • <a>А где я ошибся-то?</b>
Re: Word -> MySQL / K2
« Ответ #3 : 17.12.2012, 14:08:01 »
Поэтому только 4 вариант.
Ишак меня нюхал ...
Если помог - плюсуйте в карму.
*

chilly_bang

  • Захожу иногда
  • 113
  • 1 / 1
Re: Word -> MySQL / K2
« Ответ #4 : 17.12.2012, 14:18:19 »
@ Pazys: ты, похоже, молод ещё, прости, но, как сказано уже, клиент в схемах оптимизации НЕ задействуется. Поэтому свои варианты оставь при себе, не флуди, если не можешь ответить на поставленный вопрос. Ещё раз прости за резкость. Твой четвёртый вариант был отметён за номером ноль, ещё до появления моих, т. к. клиент в схемах оптимизации НЕ задействуется. Надеюсь, более повторять не придётся. Спасибо.
« Последнее редактирование: 17.12.2012, 14:21:32 от chilly_bang »
*

Pazys

  • Завсегдатай
  • 1738
  • 241 / 4
  • <a>А где я ошибся-то?</b>
Re: Word -> MySQL / K2
« Ответ #5 : 17.12.2012, 14:30:45 »
Может и молод, но нашел единственный возможный вариант, как из клиента достать информацию, в том виде, которая нужна. Если этот вариант не подходит, то надо руками работать. УВЫ ... мне просто жалко коллег, и дело не в самой жалости, а в сочувствии. Я много сайтов из-за рукозадых клиентов "испортил". Потому что не дал им форму, а редактор.

Я не пишу что попало ... просто опыт.
Ишак меня нюхал ...
Если помог - плюсуйте в карму.
*

chilly_bang

  • Захожу иногда
  • 113
  • 1 / 1
Re: Word -> MySQL / K2
« Ответ #6 : 17.12.2012, 14:33:45 »
Вы пишете именно 4то попало: оба ваших варианта содержат слова "пусть клиенты заполняют", когда условие содержит полное исключение этого варианта.

модератор, почистите, тему, пожалуйста!
*

AL_ALEX

  • Глобальный модератор
  • 855
  • 112 / 1
Re: Word -> MySQL / K2
« Ответ #7 : 17.12.2012, 14:53:27 »
chilly_bang но конца понял, что вы хотите услашать, какой совет, т.к. пишите
Первая идея: написать VBA-макросов по количеству доп. полей, отчитывать глазами файлы, отмечать мышкой необходимые данные и запускать соответствующий макрос, записывая сразу в MySQL.
для меня VBA - terra incognita:(
Вторая идея: пользоваться компонентом импорта данных в К2, сперва приводить данные из Word-файлов в импортируемый вид, потом импортировать разом всё.
мне бы предпочтительней второй метод
Что вы хотите услышать, чтобы вам по вашим же суждениям сказали, что лучше 2 вариант, т.к. для вас VBA - terra incognita:(?
Вам необходимо оптимизировать работу, чтобы не надо было делать ни чего руками. Ваши оба варианта отчасти ручная работа, особенно 2-ой.

PS. Согласен с Pazys, если пользователи что-то могут предоставить в Word-файле, то заполнить форму уж точно смогут.
*

chilly_bang

  • Захожу иногда
  • 113
  • 1 / 1
Re: Word -> MySQL / K2
« Ответ #8 : 17.12.2012, 15:03:22 »
@AL_ALEX:
- я хотел бы услышать ответ на поставленный вопрос: какой из вариантов эффективней относительно соотношения: работа по кодированию решения/работа по интеграции данных.
- terra incognita означает в переводе "неизвестная/неисследованная земля", а не отсутствие желания работать.
- Предпочтительность означает то, что механизмы работы с Joomla известны лучше, чем с VBA.
- "Вам необходимо оптимизировать работу, чтобы не надо было делать ни чего руками." - я это где-то сказал или Вы придумали? Перечтите, пожалуйста, мой текст. Спасибо.

Если Вы согласны с предыдущим оратором, значит, Вы также либо невнимательно прочитали, либо недостаточно значения придали условию "клиент в процессе оптимизации не участвует".
*

Pazys

  • Завсегдатай
  • 1738
  • 241 / 4
  • <a>А где я ошибся-то?</b>
Re: Word -> MySQL / K2
« Ответ #9 : 17.12.2012, 15:57:07 »
Тогда вариант 2 ... ибо первый вариант при первом же случае откажется работать, т.к. клиенты пришлют вам такой файлик, который ваш макрос не поймет. Или проглотит, и выплюнет каку, которую прийдется руками разбирать.

Ишак меня нюхал ...
Если помог - плюсуйте в карму.
*

chilly_bang

  • Захожу иногда
  • 113
  • 1 / 1
Re: Word -> MySQL / K2
« Ответ #10 : 17.12.2012, 16:08:44 »
"который ваш макрос не поймет": такого варианта быть не может. макрос будет работать так: отправить выделенные данные в определённую ячейку определённой строки определённой таблицы определённой базы данных. Выделение делается руками. Наверное, зря я сразу не сказал: клиентские файлы содержат только текст и вставленные прямо в Word картинки.

во втором же варианте придётся, похоже, тоже писать макросы, типа таких: создать из выделенного текста XML-файл, сохранить его, который потом средствами импорта будет импортирован в К2. Эти макросы гораздо проще, чем создать connection с базой, 30 секунд таймаут, поддерживать коннекшн, или создавать его снова на каждый инсерт. Ещё, опять же вопрос, как пробиться на порт 3306 сервера баз данных (он хостится, доступ на порт 80).

коро4е, такой комплекс проблемок: неясно, что проще и лучше.

пс: тогда, может даже, проще: создать макросом из маркированного текста обычные текстовые файлы, по типу INSERT куда надо ВЫДЕЛЕННЫЙ ТЕКСТ, сохранять их как .sql, которые потом всадить в phpMyAdmin, и конец делу.
« Последнее редактирование: 17.12.2012, 16:18:59 от chilly_bang »
*

Pazys

  • Завсегдатай
  • 1738
  • 241 / 4
  • <a>А где я ошибся-то?</b>
Re: Word -> MySQL / K2
« Ответ #11 : 17.12.2012, 16:22:29 »
Через туннелинг
Ишак меня нюхал ...
Если помог - плюсуйте в карму.
*

chilly_bang

  • Захожу иногда
  • 113
  • 1 / 1
Re: Word -> MySQL / K2
« Ответ #12 : 17.12.2012, 19:47:20 »
нё, хостер не даст.

а, вот он ответил: говорит, даст доступ на порт. Проблемой меньше...
« Последнее редактирование: 17.12.2012, 21:13:48 от chilly_bang »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

MySQL ошибка при добавлении статьи в К2

Автор amasbee

Ответов: 0
Просмотров: 984
Последний ответ 31.03.2013, 04:29:44
от amasbee
MySQL база даннх К2

Автор yrygvay

Ответов: 4
Просмотров: 1604
Последний ответ 22.01.2013, 19:19:50
от yrygvay