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

Stasweb

  • Завсегдатай
  • 1500
  • 24 / 0
Вопрос сам в названии темы возможно ли держать скрипты счетчиков у себя.
Вот допустим Яндекс счетчик вот его кусок кода
Код
s.src = (d.location.protocol == "https:" ? "https:" : "http:") + "//mc.yandex.ru/metrika/watch.js";
Файл watch.js он постоянно подгружает https://mc.yandex.ru/metrika/watch.js и тот же pagespeed пишет что кэшируйте этот скрипт на 60 минут.
Вот вопрос втом что если я закачаю себе этот js будут ли счетчики правельно вести статистику.
 
*

Bright

  • Захожу иногда
  • 170
  • 2 / 2
Вопрос сам в названии темы возможно ли держать скрипты счетчиков у себя.
Я б добавил к вопросу
- что вообще делать с этими счетчиками?
- сколько и какие из них реально нужны? (инфа в сети очень противоречивая)
- как их лучше оформлять, чтобы они меньше досаждали и тормозили?
У меня, кстати, Я.метрики нет, но вопросы те же...
*

SeBun

  • BanMaster
  • 4030
  • 259 / 5
  • @SeBun48
По сабжу: да, можете скачать и исправить скрипт подключения этого файла. Этот файл статичен и должен работать. Сам не пробовал, поэтому отпишитесь, если подключите. Ну а если при вызове этого файла проверяется IP и эта запись где то регистрируется, а потом идет обращение скрипта к этой записи, то счетчик работать у вас не будет.
« Последнее редактирование: 03.08.2016, 15:10:36 от SeBun »
Оказываю услуги по Joomla | Миграция/Обновление | Сопровождение | IT-аутсорсинг | Недорогие домены и хостинг
*

Stasweb

  • Завсегдатай
  • 1500
  • 24 / 0
Так они вроде на прямую под
Яндекс
Спойлер
[свернуть]
Маил
Спойлер
[свернуть]
аналитика
Спойлер
[свернуть]
*

Stasweb

  • Завсегдатай
  • 1500
  • 24 / 0
Спросил у yandex про хранения скриптов у себя и вот что они ответели.
Цитировать
Такой способ улучшения скорости загрузки сайта может быть использован при условии, что Вы будете своевременно обновлять файл watch.js. Обновления происходят с примерной периодичностью раз в 2 недели (точнее этот срок описать не представляется возможным). В случае, если файл не будет обновлен своевременно на Вашей стороне, статистические данные будут собираться некорректно.
Так же подтормаживает скрипт https://www.google-analytics.com/analytics.js как насчет его не кто не ставил себе
« Последнее редактирование: 04.08.2016, 07:18:04 от Stasweb »
*

Stasweb

  • Завсегдатай
  • 1500
  • 24 / 0
вот нашел такое решение
создаем файл для крона, я создал в /cli/cron.php
Код
<?php
<?php
// CRON для автоматического обновления файлов стороних сервисов и счетчиков.
function downloadJs($file_url, $save_to)
{
    $content = file_get_contents($file_url);
    file_put_contents($save_to, $content);
}
// Указываем URL, затем папку от корня сайта и имя файла с расширением.
// Проверьте чтобы на папке были права на запись 777/755

// Метрика
downloadJs('https://mc.yandex.ru/metrika/watch.js', realpath("./media/js"). '/watch.js');

// Google Analytics
downloadJs('https://www.google-analytics.com/analytics.js', realpath("./media/js"). '/analytics.js');

// Для скриптов без расширения
//downloadJs('http://code.jivosite.com/script/widget/NuT1gBLsC6', realpath("./media/js"). '/NuT1gBLsC6');
?>
пути для хранения скаченных файлов указал /media/js.
Перехожу в файл /cli/cron.php и получаю ошибку
Warning: file_put_contents(/watch.js): failed to open stream: Permission denied in /cli/cron.php on line 6
Warning: file_put_contents(/analytics.js): failed to open stream: Permission denied in /cli/cron.php on line 6
6-я строка у меня получается
Код
file_put_contents($save_to, $content);
Получается он не может получить доступ в /cli/cron.php хотя прова стоят
/media/js 755 и /cli/cron.php 755
Подскажите как решить
*

Stasweb

  • Завсегдатай
  • 1500
  • 24 / 0
Все в принцыпе вроде работает буду наблюдать.
Ошибка была в том что путь был не полный realpath("./media/js") надо так realpath("/var/............./media/js").
Было бы еще неплохо логировать записанные файлы в отдельный лог таким образом можно увидить как меняются файлы и на какое время оптимально выставлять крон задачу.
*

Stasweb

  • Завсегдатай
  • 1500
  • 24 / 0
Вот так работает с записью логов
Спойлер
[свернуть]
Может кто подскажет как сделать перенос строки после записи блока логов
« Последнее редактирование: 05.08.2016, 07:22:43 от Stasweb »
*

Stasweb

  • Завсегдатай
  • 1500
  • 24 / 0
Вот готовый код с переносом блока строк для удобного чтения.
Код
<?php
// CRON для автоматического обновления файлов стороних сервисов и счетчиков.
function downloadJs($file_url, $save_to, $end_block = false)
{
$content = file_get_contents($file_url);
file_put_contents($save_to, $content);
    if(file_put_contents($save_to, $content)){
        $file = basename($file_url);
        $size = filesize($save_to);
        $date = date('d/m/Y H:i:s');
        $eol = !$end_block ? PHP_EOL : PHP_EOL.PHP_EOL;
        $log = $date.' | '.$file.' | '.$size.$eol;
        file_put_contents($_SERVER['DOCUMENT_ROOT'].'/logs/loguploads.txt', $log, FILE_APPEND);
    }
}
// Для скриптов без расширения
// downloadJs('http://code.jivosite.com/script/widget/NuT1gBLsC6', realpath($_SERVER['DOCUMENT_ROOT']./media/js'). '/NuT1gBLsC6');

// Метрика
downloadJs('https://mc.yandex.ru/metrika/watch.js', realpath($_SERVER['DOCUMENT_ROOT'].'/media/js').'/watch.js');
// Google Analytics
downloadJs('https://google-analytics.com/analytics.js', realpath($_SERVER['DOCUMENT_ROOT'].'/media/js').'/analytics.js');
downloadJs('https://google-analytics.com/ga.js', realpath($_SERVER['DOCUMENT_ROOT'].'/media/js').'/ga.js');
//mail.ru
downloadJs('https://top-fwz1.mail.ru/js/code.js', realpath($_SERVER['DOCUMENT_ROOT'].'/media/js').'/code.js', true);
?>
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Индексация Disqus Comments. Возможно ли реализовать?

Автор Good_user

Ответов: 1
Просмотров: 2033
Последний ответ 12.01.2016, 00:32:42
от Lordon
Счетчик Яндекс. Метики себя ведет странно

Автор bronepoezd27

Ответов: 3
Просмотров: 1095
Последний ответ 04.07.2015, 19:48:37
от bronepoezd27
В поисковике Google "Возможно, этот сайт был взломан."

Автор teremok

Ответов: 12
Просмотров: 3121
Последний ответ 21.05.2015, 11:16:10
от teremok
Google говорит: надо открывать файлы.CSS и скрипты для индексации!

Автор 1day

Ответов: 1
Просмотров: 2243
Последний ответ 28.10.2014, 22:24:25
от ChaosHead
Возможно ли запретить индексацию отдельных категорий из админки?

Автор easy_simple

Ответов: 0
Просмотров: 1111
Последний ответ 24.09.2014, 15:54:45
от easy_simple