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

denism300

  • Захожу иногда
  • 210
  • 5 / 0
Подскажите, как вызвать функцию, находящуюся в публичной модели из контроллера, находящегося в админке?
Если просто подключить файл с моделью и обратиться к функции, то подхватываются все параметры (файлы локализаций, блиблиотеки и т.п.), относящиеся к админ. части, соответственно, все это выдает неверный результат.

Мне же надо, чтобы функция "думала", что ее вызвали из публичной части.
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Вызов внешней функции из админки
« Ответ #1 : 13.12.2016, 23:27:03 »
Не перестану удивляться тому, как все так любят думать категориями "функция думала", "обмануть функцию". Так часто бывает, что придумав какую-нибудь идею, уже сразу решили, что она единственная верная.
Приведите код, так вам намного быстрее ответят.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

denism300

  • Захожу иногда
  • 210
  • 5 / 0
Re: Вызов внешней функции из админки
« Ответ #2 : 14.12.2016, 19:20:00 »
Не перестану удивляться тому, как все так любят думать категориями "функция думала", "обмануть функцию". Так часто бывает, что придумав какую-нибудь идею, уже сразу решили, что она единственная верная.
Приведите код, так вам намного быстрее ответят.
вызываемая функция из публичной модели:
Код: php
function getFile() {
$referer = JRequest::getString('HTTP_REFERER', null, 'SERVER');
$file = './media/com_vmtoxls/price.xlsx';
$this->getXLS($file);

if (JFile::exists($file)) {
header("Content-Type: application/octet-stream");
header("Accept-Ranges: bytes");
header("Content-Length: ".filesize($file));
header("Content-Disposition: attachment; filename=" . JFile::stripExt(JFile::getName($file)). '_' . date("d-m-Y"). '.' . JFile::getExt($file)); 
readfile($file);

}
else {
JFactory::getApplication()->redirect($referer, JText::_('COM_VMTOXLS_NOTICE_FILE_NOT_EXISTS'), error);
}
return true;
}

эта функция, в свою очередь, вызывает getXLS(), которая, получая данные, обращаясь к другим функциям, которые, в свою очередь, делают выборку из БД, формирует xlsx файл.

из контроллера админки я вызываю так:

Код: php
public function update() {
$router = JRouter::getInstance('site');
$router -> setMode(JROUTER_MODE_SEF);
$update = new VMtoXLSModelGetXLS();
$update -> getFile();
$this->setRedirect(JRoute::_('index.php?option=com_vmtoxls&view=products', false));
}

соответственно, функция вызывается из админки и не генерируются чпу ссылки, файл пытается создаться (естественно, неуспешно) не в site/media/com_vmtoxls/, а в site/administrator/media/com_vmtoxls/, не подключается публичная локализация и т.п.
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Вызов внешней функции из админки
« Ответ #3 : 14.12.2016, 19:31:17 »
getFile($isSite=true){}. Пишу за рулем. Или испрльзуйте абсолютные пути.
« Последнее редактирование: 14.12.2016, 19:40:43 от robert »
Не будь паразитом, сделай что-нибудь самостоятельно!
*

flyingspook

  • Живу я здесь
  • 3590
  • 247 / 9
Re: Вызов внешней функции из админки
« Ответ #4 : 14.12.2016, 22:20:21 »
Пишу за рулем. Или испрльзуйте абсолютные пути.
2robert
не нарушай ПДД
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Вызов внешней функции из админки
« Ответ #5 : 14.12.2016, 22:36:35 »
2robert
не нарушай ПДД
Виноват, исправлюсь :) (хотя реально езды как таковой и не было: стоял 4 часа в пробке :().
Не будь паразитом, сделай что-нибудь самостоятельно!
*

denism300

  • Захожу иногда
  • 210
  • 5 / 0
Re: Вызов внешней функции из админки
« Ответ #6 : 15.12.2016, 01:29:07 »
getFile($isSite=true){}. Пишу за рулем. Или испрльзуйте абсолютные пути.
не сработало.
использовать абсолютные пути не вариант, т.к. в прайс вставляются ссылки на товары, и, если, вызывать из админки, то ссылки не конвертируются в ЧПУ
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Вызов внешней функции из админки
« Ответ #7 : 15.12.2016, 08:28:37 »
Уже много раз писали на форуме, как использовать ЧПУ фронта в админке, не искали?
Не будь паразитом, сделай что-нибудь самостоятельно!
*

denism300

  • Захожу иногда
  • 210
  • 5 / 0
Re: Вызов внешней функции из админки
« Ответ #8 : 15.12.2016, 15:37:33 »
искал, и даже перед тем, как создать эту тему, делал изначально так, но возникли проблемы в виде того, что к концу ссылки при вызове из фронта добавлялся алиас кнопки меню.

в итоге, решил проблему так (это кусок кода в публичной модели, отвечающего за формирование ссылки):
Код: php
if ($app->isAdmin()) {
$uri = $router->build(JURI::root(). JRoute::_($link, true));
$path = str_replace(array('http:/', '/administrator', '/index.php'), array('http://', '', ''), $uri->getPath());
$uri->setPath($path);
$url = JURI::root(). $uri->toString(array('path', 'query', 'fragment'));
}
else {
$uri = JURI::root(). JRoute::_($link, true);
$url = str_replace(array('//', 'http:/', '/index.php', '/component/vmtoxls'), array('/', 'http://', '', ''), $uri);
}

не знаю, насколько корректно с точки зрения API Joomla, но работает правильно.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Вызов формы компонента в pop-up, при клике по ссылке из любого места

Автор SkyAn

Ответов: 1
Просмотров: 664
Последний ответ 01.03.2021, 04:08:48
от gartes
Установка демо данных из админки расширения

Автор effrit

Ответов: 16
Просмотров: 1282
Последний ответ 28.05.2018, 10:54:48
от effrit
Вызов редактирования материала в модальном окне

Автор AlekVolsk

Ответов: 14
Просмотров: 1752
Последний ответ 18.03.2018, 00:32:29
от robert
Модуль для админки

Автор platonische

Ответов: 2
Просмотров: 1926
Последний ответ 29.03.2017, 16:53:58
от SeBun
вызов setRedirect() из модели

Автор denism300

Ответов: 2
Просмотров: 1271
Последний ответ 11.12.2016, 21:16:12
от denism300