Новости Joomla

SW JProjects v.2.5.0 - компонент каталога цифровых проектов на Joomla

SW JProjects v.2.5.0 - компонент каталога цифровых проектов на Joomla

👩‍💻 SW JProjects v.2.5.0 - компонент каталога цифровых проектов на Joomla.Компонент - менеджер цифровых проектов для Joomla! CMS. Компонент обеспечивает создание каталога цифровых проектов и предоставляет возможность скачивания, в том числе с использованием лицензионных ключей.👩‍💻 v.2.5.0. Что нового?Схемы структур данных для серверов обновлений. Теперь с SW JProjects вы может создавать сервер обновлений не только для расширений Joomla, но и свои собственные. Например, вам нужно, чтобы структура данных сервера обновлений была другая и формат должен быть, например, не XML, а JSON. Формирование структуры данных для сервера обновлений расширений Joomla вынесено в отдельный плагин. Вы можете создать свой собственный плагин и реализовать в нём нужную вам структуру данных, добавив или наоборот исключив отображаемые данные. Сервер обновлений в компоненте по-прежнему отображает информацию о списке проектов и их версиях, о конкретном проекте и его changelog.Можно выбрать схему данных сервера обновлений глобально для всего компонента, выбрать другую схему данных для категории проектов, а так же выбрать схему в каждом проекте.

Разработчикам в качестве образца можно посмотреть плагин схемы данных для Joomla в составе компонента или же плагин-образец JSON-схемы на GitHub.
Группа плагинов swjprojects. Для нужд компонента создана группа плагинов swjprojects. В частности, в этой группе находится плагин структуры данных Joomla расширений для сервера обновлений.Изменение языковых констант. Изменены некоторые языковые константы в панели администратора. Если вы делали переопределение констант - переопределите их снова.👩‍💻 Joomla 6. Внесены изменения для корректной установки и работы компонента на Joomla 6. Компонент успешно протестирован на Joomla 6-beta2.Минимальная версия Joomla - 5. Подняты минимальные системные требования: Joomla 5.0.0 и PHP 8.1.
- Страница расширения👉 Плагин-образец кастомной JSON-схемы данных для сервера обновлений на GitHub.- GitHub расширения- Документация на GitHub- Joomla Extensions Directory#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 Гость просматривают эту тему.
  • 19 Ответов
  • 1261 Просмотров
*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
Всем привет!
Делаю плагинчик генерации оглавления на основе заголовков страницы.
Сейчас он типа content и срабатывает только на статье, т.е. 1 раз - это норм.

Но было бы интересно запускать и в режиме блога, но тогда будет много запусков.
Сам функционал реализован на JS, так что мне, в принципе, хватит условия на "уже сработал раз - выходим", но вообще хочется оптимально по быстродействию - чтобы плагин сработал 1 раз.

Вопрос - как это лучше реализовать?
Не разрешать повторный запуск или сменить тип плагина на системный?
И какое событие вообще оптимально для такого?
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Цитировать
сменить тип плагина на системный?
Это ещё хуже - будет срабатывать при каждом чихе. Ну если только в самом плагине не добавить условие.
*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
дык вот я про это и думаю - какое из меньших зол выбрать :)
в идеале нужно что-то типа "запустить 1 раз после отрисовки страницы"

а если в контентном делать условие на повторный запуск не подскажешь условие?
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
а если в контентном делать условие на повторный запуск не подскажешь условие?
Ну можно попробовать в свойстве хранить значение, типа:

Код: php
private $done = false;

if ($done === true)
{
return;
}

// сделали дело
$this->done = true;

Правда не уверен, что сработает.
*

Septdir

  • Живу я здесь
  • 3370
  • 168 / 4
Всем привет!
Делаю плагинчик генерации оглавления на основе заголовков страницы.
Сейчас он типа content и срабатывает только на статье, т.е. 1 раз - это норм.

Но было бы интересно запускать и в режиме блога, но тогда будет много запусков.
Сам функционал реализован на JS, так что мне, в принципе, хватит условия на "уже сработал раз - выходим", но вообще хочется оптимально по быстродействию - чтобы плагин сработал 1 раз.

Вопрос - как это лучше реализовать?
Не разрешать повторный запуск или сменить тип плагина на системный?
И какое событие вообще оптимально для такого?
А почему ты не хочешь его в модуль засунуть. А сам скрипт подключать в хед один раз через addscript . Так можно выводить несколько блоков навигации
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
CodersRank | Контакты | Мой GitHub | Workshop
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
хранить в приватном свойстве - сработает
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
да, нашел ещё пример с объявленным статиком, так что оставлю контентный.
модуль не подходит, т.к. часть гибкости потеряется - плагин универсальнее.
всем спасибо )
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
да, нашел ещё пример с объявленным статиком, так что оставлю контентный.
А без статики не работает?
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
работает

Код
private $done = false;
 
public function blabla() {
    if ($this->done === true)
    {
return;
    }
    $this->done = true;
 
    // этот код будет выполнен 1 раз
    ....
}
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
*

Septdir

  • Живу я здесь
  • 3370
  • 168 / 4
модуль не подходит, т.к. часть гибкости потеряется - плагин универсальнее.
Ну дело конечно твое, но ИМХО модуль в данном случае гибче по ряду причин.
1. Можно без труда привязывать к определенным страницам.
2. Можно выводить блок несоклько раз. К примеру один в сайдбаре другой в мобильном блоке (ofcanvas к примеру)
3. Модуль не привязан к комопнентам. В отличае от плагина, где нужного content может и не быть
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
CodersRank | Контакты | Мой GitHub | Workshop
*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
аааа! чукча тупой. не работает через private  у меня ))

вот так получилось:

Код
static $done = false;
if ($done) return;
$done = true;

Septdir ну, скажем, есть свои плюсы и минусы тоже есть :)
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
ну как не работает? работает. что то не так делаете.

P.S. приватное свойство класса используете? именно как я написал - с $this ? потому что если просто переменная в функции приватная - то конечно не будет работать
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
ну ок :) просто интересно, почему не работает. только что проверил у себя - работает. ну да ладно
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Что-то у меня ни private, ни static не работает. Только запись в сессию помогла.
Вру, и то, и другое работает.
« Последнее редактирование: 20.12.2016, 17:04:43 от robert »
Не будь паразитом, сделай что-нибудь самостоятельно!
*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
Код
	public function onContentPrepare( $context, $article, $params ){ 
static $done = false; // флаг проходов, не даем срабатывать больше 1 раза

if ($done) return;
echo " первый проход ";
$done = true; // код отработан, выставляем флаг для запрета повторного срабатывания в режиме блога, например

}

зы
ну хоть не один я собеседование завалил  ;D
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
А если $done вынести из функции в область класса, то должно и так и так работать, а в функции только static.
*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
Ну дело конечно твое, но ИМХО модуль в данном случае гибче по ряду причин.
1. Можно без труда привязывать к определенным страницам.
3. Модуль не привязан к комопнентам. В отличае от плагина, где нужного content может и не быть

т.к. переделывать в модуль банально лень, то просто добавил режим ручного запуска по спецтегу.
пишем в модуле с произвольным HTML волшебное слово и генерируем оглавление где угодно :)
фактически получам плюсы и плагина и модуля.
хотя можно было  и наоборот - написать модуль и грузить его внутрь статей.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Событие: сохранение настроек плагина

Автор anatol81n

Ответов: 2
Просмотров: 919
Последний ответ 29.01.2021, 07:17:45
от voland
Модуль обратной связи. Как использовать свойство context в ajax запросе

Автор ushangi

Ответов: 0
Просмотров: 682
Последний ответ 15.02.2020, 22:08:12
от ushangi
Как создавать в админке раздел для изменения настроек плагина?

Автор lculver

Ответов: 2
Просмотров: 808
Последний ответ 21.05.2018, 08:55:46
от dmitry_stas
На кого лучше оставлять замену подстроки: на БД или php?

Автор borro

Ответов: 5
Просмотров: 755
Последний ответ 11.10.2017, 10:50:02
от borro
Как при помощи плагина изменить $data до сохраннения?

Автор Septdir

Ответов: 9
Просмотров: 1022
Последний ответ 02.06.2017, 17:34:35
от Septdir