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

Niko

  • Осваиваюсь на форуме
  • 17
  • 0 / 0
  • Каламбия пикчерз не представляет...
А вот это (http://www.jms2win.com/download?page=shop.product_details&flypage=flypage.tpl&product_id=32&category_id=1) кто-нибудь пробовал?

я пробовал. но эта штука пользователей разных сайтов не объединяет
*

Niko

  • Осваиваюсь на форуме
  • 17
  • 0 / 0
  • Каламбия пикчерз не представляет...

3б) Если надо копировать пользователя в другую БД тогда для каждого дополнительного сайта вставляем:
Код: php
$option['driver']   = 'mysql';          // Драйвер 
$option['host']     = 'localhost';        // Хост
$option['user']     = 'root';           // Пользователь
$option['password'] = '';                  // Пароль
$option['database'] = 'other_db';          // Имя базы данных
$option['prefix']   = 'prefix_';         // Префикс таблиц (может быть пустым)
$db = & JDatabase::getInstance( $option );
$query = "INSERT INTO `#__ИМЯ_ТАБЛИЦИ_БЕЗ_ПРЕФИКСА` ( ПОЛЯ ) VALUES ( ЗНАЧЕНИЯ );";
$db->setQuery( $query );
$db->query();

Для полноты решения необходимо ещё добавить предварительные проверки на отсутствие такого пользователя в БД дополнительных сайтов, но я дальше описанного не экспериментировал.


это решение с одного очень любимого мной форума поэтому ссылку на него давать не буду


Fatal error: Call to undefined method JException::setQuery() in /home/xxxxxxx/public_html/xxxxxx/components/com_user/controller.php on line 288
*

Mudraya

  • Осваиваюсь на форуме
  • 33
  • 0 / 0
Кто-нибудь решил данный вопрос? Если да, то как?
*

Be(ool

  • Захожу иногда
  • 59
  • 5 / 0
У меня есть самописный компонент для много сайтовости работает 8 сайтов с одной базой, довольно шустро, есть поддержка аддонов, компонент без аддона является сквозным, то есть одинаков для всех сайтов, можно привязывать любой объект к определенному сайту.  Можно менять язык, установки локали, короче почти весь конфиг. Мне нужно только интерфейсик доработать. Скажу одно - в ООП вся сила. И вообще очень странно, что в Joomla нет многосайтовости, ибо спроектирована она очень грамотно и нужно немного усилий, что бы заставить работать несколько разных сайтов на одной копии Joomla
*

..С...е...р...ы...й..

  • Захожу иногда
  • 51
  • 110 / 2
Доработаешь, выкладывай, посмотрим что за зверь.   ^-^
*

denisog

  • Осваиваюсь на форуме
  • 22
  • 0 / 0
Так кто нить решил эту проблему. У меня тоже сайт и под сайт) оба имеют общую БД (разные префиксы). Нужно что бы сайты записывал пользователей в таблицу all_users(и подобные типа all_core*), а не в jos_users (или rus_user)
Или же записывал  каждый сайт одновременно в две таблицы, два запроса на запись. В каких файлах нужно изменить или добавить код?
Я попробовал все что здесь написано! не работает.
Видел компоненты для таких целей в они большинство для Joomla 1.0, слышал есть платные (50-100$)
 неужели новичку,  так трудно объяснить или дать ссылку!((  !
« Последнее редактирование: 25.11.2009, 15:19:59 от denisog »
*

denisog

  • Осваиваюсь на форуме
  • 22
  • 0 / 0
Сам на этом обработчике застрял [. Подскажите! что так тяжело?
*

denisog

  • Осваиваюсь на форуме
  • 22
  • 0 / 0
denisog, у тебя были какие-нибудь наработки? пробовал писать что-либо?
я уже не помню, помню все брал с этого форума но ничего не помогало, точнее неполучалось , спрашивал, молчат. советовали в БД сделать ссылки на 2 таблицы, но это не помогало, так как все равно код нужно менять. тут никто до конца не дает ответ, как я понял, задал вопрос ему что-то объяснили, он что то додумал и все, тема закрыта, но вопрос не решен!!
*

denisog

  • Осваиваюсь на форуме
  • 22
  • 0 / 0
Тоже буду чуть позже копать, только для 1.5, если что свяжимся. Вопрос АКТУАЛЬНЫЙ!! :D
*

denisog

  • Осваиваюсь на форуме
  • 22
  • 0 / 0
)))) я в БД тоже шаманил но ни связи ни ссылки ни "перенаправления" не помогают.
*

eragon

  • Захожу иногда
  • 143
  • 7 / 0
чет заглохло все :)
*

Be(ool

  • Захожу иногда
  • 59
  • 5 / 0
Выкладываю свой компонент, сыроват, но рабочий. Таблицу доменов придется заполнить самостоятельно.
Инсталлируется в ручную. После установки, для того что бы компонент заработал, нужно в конфиге поменять название драйвера БД на mysqlmultisites.

Волшебные строчки и сама идея находится в mysqlmultisites.php: методы setQuery() и  _changeConfig().

Все очень просто, все sql запросы меняются в зависимости от правил трансформации см. табличку jos_vp_domains_sql_patterns. Ну и есть еще админская часть, см. т. jos_vp_domains_entity все поймете. Туда же можно добавлять свои сущности, например для связки домена с элементами сторонних компонентов.

Для каждого домена можно поменять полностью свой конфиг и все это будет разумеется в предлах одной БД и одного дистрибутива Joomla, конфиги для определенных доменов будут хранится в jos_vp_domains поле params

[вложение удалено Администратором]
*

eragon

  • Захожу иногда
  • 143
  • 7 / 0
С установкой не понятно, пишет
Цитировать
JError Unable to load Database Driver:mysqlmultisites

Но суть не в этом, из сообщения выше, не очень ясно что этот компонент делает. Просто позволяется разделить 1 Joomla на поддомены? Суть данной темы в том чтобы объединить пользователей несколько джумл в 1 базу данных, т.е. у нескольких сайтов (джумл) была 1 база пользователей. В общем не понятно :)
*

Be(ool

  • Захожу иногда
  • 59
  • 5 / 0
Цитировать

Просмотр профиля Личное сообщение (Offline)
   
   
Re: Одна база пользователей для нескольких сайтов.
« Ответ #48 : Сегодня в 01:26:06 »
   ПроцитироватьЦитировать
С установкой не понятно, пишет
Цитировать
JError Unable to load Database Driver:mysqlmultisites

Но суть не в этом, из сообщения выше, не очень ясно что этот компонент делает. Просто позволяется разделить 1 Joomla на поддомены? Суть данной темы в том чтобы объединить пользователей несколько джумл в 1 базу данных, т.е. у нескольких сайтов (джумл) была 1 база пользователей. В общем не понятно

1. Это говорит о том, что не все файлы скопированы которые я приложил, собственно сам файл mysqlmultisites.php должен лежать в libraries/joomla/database/database/mysqlmultisites.php

2. В моем случае речь идет о многосайтовом компоненте, который не только подразумевает общую базу пользователей но  и вообще одну копию Joomla. А также расширений которые установлены на этой копии. Позволяет строить на одной сборке несколько сайтов разных шаблонов, разных языков с разграничением контента по доменам и возможностью писать плагины для механизма разграничения стороних компонентов.

3. Что бы ничего не висло, нужно обязательно в настройках домена указать пункт меню по умолчанию для этого домена и убедиться, что меню в которое входит этот пункт было привязано к настраевомому домену.
*

frag79

  • Давно я тут
  • 612
  • 61 / 0
2. В моем случае речь идет о многосайтовом компоненте, который не только подразумевает общую базу пользователей но  и вообще одну копию Joomla. А также расширений которые установлены на этой копии. Позволяет строить на одной сборке несколько сайтов разных шаблонов, разных языков с разграничением контента по доменам и возможностью писать плагины для механизма разграничения стороних компонентов.

3. Что бы ничего не висло, нужно обязательно в настройках домена указать пункт меню по умолчанию для этого домена и убедиться, что меню в которое входит этот пункт было привязано к настраевомому домену.
А можно поподробнее о том как это все работает? нужно на поддомены ставить Joomla?
*

Be(ool

  • Захожу иногда
  • 59
  • 5 / 0
Цитировать
А можно поподробнее о том как это все работает? нужно на поддомены ставить Joomla?

Привожу пример

есть имена на которых нужно организовать сайты под одной копией жумлы:

onename.ru
twoname.ru
threename.ru
subdomain.threename.ru
other.onename.ru

1. В конфиге апача для каждой записи прописать

<VirtualHost *>
  ServerName www.onename.ru
  ServerAlias onename.ru
  DocumentRoot <путь  к жумле>
    <Directory <путь  к жумле>>
      Options Indexes FollowSymLinks +Includes
      AllowOverride All
      Order allow,deny
      Allow from all
    </Directory>


  DirectoryIndex index.htm index.html index.php index.shtml index.php
  AccessFileName .htaccess
  AddType text/plain .htc
</VirtualHost>

Уже в самой жумле внести эти домены и для каждого настроить пункт по меню по умолчанию шаблон язык итд..
Далее в управлении привязками нужно разграничить модули меню и контент, тоесть указать какому сайту принадлежит та или иная сущность

*

Be(ool

  • Захожу иногда
  • 59
  • 5 / 0
Цитировать
но эта штука пользователей разных сайтов не объединяет

Если уж нужно объеденение заведомо разных сайтов, то я бы сделал плагин авторизации с XML шлюзом который должен присутствовать на каждом сайте. У меня похожая ситуация была с пользователями 1с. только шлюз не нужен был, так как плагин просто делал запрос к MSSQL, ну а дальше рулит родительский класс.
*

eragon

  • Захожу иногда
  • 143
  • 7 / 0
Если уж нужно объеденение заведомо разных сайтов, то я бы сделал плагин авторизации с XML шлюзом который должен присутствовать на каждом сайте. У меня похожая ситуация была с пользователями 1с. только шлюз не нужен был, так как плагин просто делал запрос к MSSQL, ну а дальше рулит родительский класс.
Нормально выдерживает одна Joomla и одна БД такое разделение? Наверное на каждом из поддоменов не мало посетителей..

P.S. Как сделать чтобы в админке появился компонент? :)
« Последнее редактирование: 14.05.2010, 20:19:46 от eragon »
*

Be(ool

  • Захожу иногда
  • 59
  • 5 / 0
Цитировать
Нормально выдерживает одна Joomla и одна БД такое разделение? Наверное на каждом из поддоменов не мало посетителей..

нормально, это вопрос оптимизации mysql. Самые большие тормоза в Joomla отнюдь не запросы к БД   :)

Цитировать
Как сделать чтобы в админке появился компонент?

Когда находишься в админке просто добавь в сроку браузера option=com_vpmultisites
или строчки в т. jos_components (ну как обычно ставится в ручную компонент)
*

AlexSmirnov

  • Завсегдатай
  • 1862
  • 272 / 16
  • Ищите и найдете
# Back the fufalo (особенно ту самую столкершу)! #
# ВАЖНО! Кайфую от удаления присланного в личку спама, почти как от любви (особенно по выходным). #
*

Be(ool

  • Захожу иногда
  • 59
  • 5 / 0
Цитировать
этот коммерческий комп - то что вам нужно
годится только если все базы работают под одним mysql сервером
*

Наташа

  • Захожу иногда
  • 170
  • 0 / 1
Выкладываю свой компонент, сыроват, но рабочий. Таблицу доменов придется заполнить самостоятельно.
Инсталлируется в ручную. После установки, для того что бы компонент заработал, нужно в конфиге поменять название драйвера БД на mysqlmultisites.
Прекрасно, то, что я давно искала!  ;D Присоединяюсь к просьбам дать описание работы приложения и подробную инструкцию по установке и эксплуатации (информация лишней не бывает особенно для начинающего! crazy!). Спасибо!
*

AlexSmirnov

  • Завсегдатай
  • 1862
  • 272 / 16
  • Ищите и найдете
годится только если все базы работают под одним mysql сервером

этот компонент работает даже тогда, когда все базы размещены на разных серверах. потому он и зовется мультисайтовским.
« Последнее редактирование: 15.05.2010, 13:07:48 от 4webspot »
# Back the fufalo (особенно ту самую столкершу)! #
# ВАЖНО! Кайфую от удаления присланного в личку спама, почти как от любви (особенно по выходным). #
*

Be(ool

  • Захожу иногда
  • 59
  • 5 / 0
Цитировать
этот компонент работает даже тогда, когда все базы размещены на разных серверах. потому он и зовется молтисайтовским.

в большиенстве случаев mysql доступен только локально (localhost), случай когда у него есть свой IP и возможно поключение с любого IP встречается гораздо реже, да и по безопасности такой вариант не комильфо.
*

eragon

  • Захожу иногда
  • 143
  • 7 / 0
Хм, вот по основной теме, а может для CB есть какой-нибудь плагин, позволяющий объединить несколько БД юзеров с разных Joomla в одну? )
*

AlexSmirnov

  • Завсегдатай
  • 1862
  • 272 / 16
  • Ищите и найдете
в большинстве случаев mysql доступен только локально (localhost), случай когда у него есть свой IP и возможно поключение с любого IP встречается гораздо реже....

ни Вы ни я никогда не узнаем истинной статистики по части соотношений между местными и сторонними соединениями к серверам баз данных mysql.

ясно, что в случае с SYNK, компонентом синхронизации пользователей Joomla, зарегистрированных на более чем одном сайте (читайте, "хранимых на более чем одном сервере mysql"), число таковых сторонних соединений возрастает с каждым покупателем компонента.

...да и по безопасности такой вариант не комильфо.

уверен, что и авторы сервера баз данных mysql, и, соответственно, разработчики компонента SYNK работали над своими продуктами с учетом безопасности пользователей прежде всех других соображений.

« Последнее редактирование: 28.05.2010, 14:31:48 от 4webspot »
# Back the fufalo (особенно ту самую столкершу)! #
# ВАЖНО! Кайфую от удаления присланного в личку спама, почти как от любви (особенно по выходным). #
*

Skitter

  • Новичок
  • 3
  • 0 / 0
Люди, пожалуйста дайте ответ, у кого нибуть это получилось? чтобы понять пытатся мне или нет!
*

AlexSmirnov

  • Завсегдатай
  • 1862
  • 272 / 16
  • Ищите и найдете
...чтобы понять пытатся мне или нет!

именно для этого существует тестирование.
# Back the fufalo (особенно ту самую столкершу)! #
# ВАЖНО! Кайфую от удаления присланного в личку спама, почти как от любви (особенно по выходным). #
*

Skitter

  • Новичок
  • 3
  • 0 / 0
и за 2 года тестирования так ни у кого и не получилось?
*

eragon

  • Захожу иногда
  • 143
  • 7 / 0
Будем ждать Joomla 2.0 ^_^
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Авторизация пользователей

Автор Вик2811

Ответов: 0
Просмотров: 984
Последний ответ 27.08.2019, 13:55:52
от Вик2811
Ошибка 502 Bad Gateway на нескольких страницах

Автор Elimelech

Ответов: 1
Просмотров: 1787
Последний ответ 30.06.2017, 22:36:18
от ProtectYourSite
Favicon в поиске яндекса исчезли сразу со всех сайтов

Автор veblik

Ответов: 5
Просмотров: 2404
Последний ответ 12.12.2015, 14:42:13
от veblik
Как скрыть модуль зарегистрированных пользователей Joomla 1.5.26 ?

Автор ShcherbaVv

Ответов: 0
Просмотров: 1581
Последний ответ 05.04.2015, 19:42:08
от ShcherbaVv
Лог входа пользователей в систему

Автор Vasja555

Ответов: 1
Просмотров: 1759
Последний ответ 04.03.2015, 22:18:18
от voland