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

7Rei

  • Захожу иногда
  • 134
  • 20 / 0
Добрый вечер.
На хостинге пользователь FTP и апача, разных юзвери.
У меня есть возможность проставить владельца файлов:
1) Апач. Joomla будет работать отлично, но у меня не будет доступа к редактированию файлов по фтп. А без фтп, как без рук :(
2) Юзер. Тогда будут проблемы с различными компонентами и модулями, требующие доступ для записи в свои папки. Проставлять права на все папки компонентов, вручную не вариант. Да и если открываешь права 777 некоторые компоненты ругаются, типа: "Should work but this file is writable for ALL. It can be security risk".
Как поступить в подобной ситуации?

Полазил по форуму, проблема стара, но рекомендаций нету. но должен быть выход!

ЗЫ. Вариант с php как модуль cgi не годится. CGI создает файлы с недостаточными правами для нормальной работы.
*

era

  • Администратор
  • 1588
  • 392 / 5
  • В туалете лучше быть пользователем, чем админом.
Re: Владелец файлов на хостинге.
« Ответ #1 : 18.03.2009, 13:49:15 »
ЗЫ. Вариант с php как модуль cgi не годится. CGI создает файлы с недостаточными правами для нормальной работы.
это-ж почему? смотри в сторону mod_fastcgi (помоему не по всех дистрибутивах есть - ручками скомпилить придётся).
Что даст? каждый пользователь будет под своим пользователем работать. Далее берёшь vsftp(d), в настройках стивишь что чрутить сеансы пользователей (что-бы за пределы своего домашнего каталога не выходили), вуаля - система рабочая готова, всё работает под правами своих пользователей, ещё openbasedir в php указать что-бы за пределы домена не выходили (у каждого пользователя может быть несколько доменов (сайтов)). Смотри, могу примеры дать, несколько скриптов у меня написано для создания пользователей, добавления секций в apache и vsftpd.

Вот например, addnewuser.sh:
Код
#!/bin/bash
# addnewuser.sh: dobavlyaet novogo pol`zovatelya
#                i gruppu pol`zovatelya

username="ТУТ ИМЯ ПОЛЬЗОВАТЕЛЯ ПИШЕШЬ"

echo `groupadd $username`
echo `mkdir /var/www/users/$username`
echo `mkdir /var/www/users/$username/www`
echo `useradd -d /var/www/users/$username/www -g $username $username`
echo `cp -R /Scripts/newdomain/php /var/www/users/$username`
echo `chown -R $username:$username /var/www/users/$username`
echo `chmod -R 741 /var/www/users/$username`

echo `passwd $username`

echo `echo $username >> /etc/vsftpd/chroot_list`
Этот скрипт создаёт пользователя, указывает его домашний каталог, в vsftpd заносит его

второй скритик, newdomain.sh:
Код
username="ИМЯ ПОЛЬЗОВАТЕЛЯ, КОМУ БУДЕТ ПРИНАДЛЕЖАТЬ ДОМЕН"
domain="ДОМЕН.РУ"


echo `mkdir /var/www/users/$username/www/$domain`
echo `mkdir /var/www/users/$username/www/$domain/cgi`

echo `cp /Scripts/newdomain/cgi/php5.fcgi /var/www/users/$username/www/$domain/cgi/php5.fcgi`
echo `cp /Scripts/newdomain/cgi/php5.ini /var/www/users/$username/www/$domain/cgi/php5.ini`
echo `cp -R /Scripts/newdomain/conf /var/www/users/$username/www/$domain`
echo `cp -R /Scripts/newdomain/logs /var/www/users/$username/www/$domain`
echo `cp -R /Scripts/newdomain/public_html /var/www/users/$username/www/$domain`
echo `cp -R /Scripts/newdomain/tmp /var/www/users/$username/www/$domain`

sleep 3

#cat /var/www/users/$username/www/$domain/cgi/php5.fcgi|sed s/{username}/$username/g|sed s/{domain}/$domain/g > /var/www/users/$username/www/$domain/cgi/php5.fcgi
cat /var/www/users/$username/www/$domain/cgi/php5.ini|sed s/{username}/$username/g|sed s/{domain}/$domain/g > /var/www/users/$username/www/$domain/cgi/php5.fcgi
cat /var/www/users/$username/www/$domain/conf/php.ini|sed s/{username}/$username/g|sed s/{domain}/$domain/g > /var/www/users/$username/www/$domain/conf/php.ini

cat /Scripts/newdomain/vhosts.conf|sed s/{username}/$username/g|sed s/{domain}/$domain/g >> /etc/httpd/conf.d/vhosts.conf

echo `chown -R $username:$username /var/www/users/$username/www/$domain`
echo `chmod 755 /var/www/users/$username/www/$domain/cgi`

# perezapuskaem apach
/usr/sbin/apachectl restart
в директории /Scripts/newdomain/ лежит "болванка" нового домена.

При этом для каждого сайта свой php.ini, свои модули можно подключать, свои настройки.

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

Flow player вставка файлов.

Автор ksv

Ответов: 3
Просмотров: 2789
Последний ответ 16.06.2017, 21:29:30
от altvvc
Что-то вызывает перегрузку процессора на хостинге hc.ru

Автор skyvlad

Ответов: 9
Просмотров: 1651
Последний ответ 02.02.2017, 09:42:53
от skyvlad
Сравнение файлов

Автор jomz

Ответов: 16
Просмотров: 1442
Последний ответ 14.02.2016, 10:25:45
от flyingspook
[Решено] Владелец файлов - nobody

Автор slepoy

Ответов: 24
Просмотров: 8941
Последний ответ 08.03.2015, 18:11:48
от Dilmurod90
Генерация php файлов в корень сайта

Автор Mangoz

Ответов: 7
Просмотров: 2224
Последний ответ 03.10.2014, 08:23:43
от Taatshi