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

john.deff

  • Захожу иногда
  • 115
  • 0 / 0
что подразумевается под "Роутер не работает"? фатальная ошибка? или не получает управление?
ошибок не выдаёт, просто не переходит на страницу
site.ru/index.php?view=object_list&id_category=kakaya-to-kategoryya

а вот если раскомментировать строку:
if( isset($query['id_category']) ){$segments[] = $query['id_category']; unset($query['id_category']); }
Код
function AbreadBuildRoute( &$query )
{
    $segments = array();
    if( isset($query['view']) ){       unset($query['view']); }
    if( isset($query['task']) ){       $segments[] = $query['task'];        unset($query['task']); }
    if( isset($query['id_category']) ){$segments[] = $query['id_category']; unset($query['id_category']); }
    if( isset($query['id']) ){         $segments[] = $query['id'];          unset($query['id']); }
    if( isset($query['limitstart']) ){ unset($query['limitstart']); }

    //echo "<pre>"; print_r($segments); echo "</pre>";
    return $segments;

}
function AbreadParseRoute( $segments )
{
    $vars  = array();
    $count = count($segments);
    $menu  = JMenu::getInstance('site')->getActive();
    $view  = isset($menu->query['view'])? $menu->query['view'] : '';

    if( $view === 'object_list' && $count == 1 ){
        $vars['view'] = 'object_view';
        //$vars['id_category'] = $segments[0];
        $vars['id'] = $segments[0];
        return $vars;
        //echo "<pre>"; print_r($vars); echo "</pre>";
    }

}
то выходит ошибка:

Warning: array_merge(): Argument #2 is not an array in site.ru/libraries/cms/router/router.php on line 350
Fatal error: Unsupported operand types in site.ru/libraries/cms/router/router.php on line 234

ошибка-то понятна, но вот как её отловить, не понятно...
ведь посмотреть что в массиве невозможно!
« Последнее редактирование: 25.05.2016, 09:55:19 от john.deff »
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
ошибка-то понятна, но вот как её отловить, не понятно...
Мне кажется, что вам непонятна ошибка, поскольку отловить как раз можно - известны все данные: функция, файл, строка... В данном случае ваша функция AbreadParseRoute() ничего не возвращает, отсюда и ошибка.
ведь посмотреть что в массиве невозможно!
Сделайте
Код: php-brief
exit();
Не будь паразитом, сделай что-нибудь самостоятельно!
*

john.deff

  • Захожу иногда
  • 115
  • 0 / 0
Мне кажется, что вам непонятна ошибка, поскольку отловить как раз можно - известны все данные: функция, файл, строка... В данном случае ваша функция AbreadParseRoute() ничего не возвращает, отсюда и ошибка.Сделайте
Код: php-brief
exit();

как этим пользоваться?
покажите примерами! компонент написал проблем нет, но не могу совладать с роутингом!
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
как этим пользоваться?
Так и пользоваться: вызывайте ее после prin_r(), чтобы прервать работу скрипта.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

john.deff

  • Захожу иногда
  • 115
  • 0 / 0
Так и пользоваться: вызывайте ее после prin_r(), чтобы прервать работу скрипта.

если в роутер ставить exit(); то выводятся кракозябры и даже главная страница падает!
ссылки вывожу через модуль!
как реально сделать отладку методов роутера? покажите на примере
« Последнее редактирование: 25.05.2016, 15:26:15 от john.deff »
*

john.deff

  • Захожу иногда
  • 115
  • 0 / 0
 ^-^ Ура! разобрался! мой код с комментариями и возможностью просмотра данных в массивах

Надеюсь кому нибудь будет полезно! всем спасибо! *DRINK*
код файна "router.php" который должен лежать в корне Вашего компонента
Код: php
<? defined('_JEXEC') or die;

function AbreadBuildRoute( &$query )
{
    $segments = array();
    if( isset($query['view']) ){       unset($query['view']);}
    if( isset($query['task']) ){       $segments[] = $query['task'];        unset($query['task']); }
    if( isset($query['id_category']) ){$segments[] = $query['id_category']; unset($query['id_category']); }
    if( isset($query['id']) ){         $segments[] = $query['id'];          unset($query['id']); }
    if( isset($query['limitstart']) ){ unset($query['limitstart']); }
    return $segments;
}

function AbreadParseRoute( $segments )
{
    $vars  = array();
    $count = count($segments);
    $menu  = JMenu::getInstance('site')->getActive();
    $view  = isset($menu->query['view'])? $menu->query['view'] : '';

    //echo "<pre>"; print_r($count); echo "</pre>";
    //echo "<pre>"; print_r($menu); echo "</pre>";
    //echo "<pre>"; print_r($view); echo "</pre>";
    //echo "<pre>"; print_r($segments); echo "</pre>";

    # Этот блок орабатывает ссылки, типа:
    # index.php?option=com_macomp&view=home&Itemid=106
    # index.php?option=com_macomp&view=object_list&id_category=moya-kategoriya&Itemid=106
    # Главная страница где модуль отображает список ссылок на категории
    # это вид нашего компонента "MycompViewHome"
    if( $view === 'home' && $count == 1){// && $count == 1
        $vars['view'] = 'object_list';
        # так как нам надо отображать только alias категории без id,
        # то убираем из строки ":", так как Joomla сама автоматически проставляет это двоеточие ":"
        $vars['id_category'] = str_replace( ':', '-', $segments[0] );

        //echo "<hr />1<pre>"; print_r($view); echo "</pre>";
        //echo "<pre>"; print_r($vars); echo "</pre>";
        return $vars;
    }

    # Этот блок орабатывает ссылки, типа:
    # index.php?option=com_macomp&view=object_view&id_category=moya-kategoriya&id=29:moya-statya&Itemid=106
    # Так как эта страница выводит конечный объект в категории, то
    # в массиве у нас первей идет имя категории, второй id статьи и имя статьи (alias)
    if( $view === 'home' && $count == 2 ){// && $count == 2
        $vars['view'] = 'object_view';
        # так как нам надо отображать только alias категории без id,
        # то убираем из строки ":", так как Joomla сама автоматически проставляет это двоеточие ":"
        $vars['id_category'] = str_replace( ':', '-', $segments[0] );
        # Здесь отдаём: 29:moya-statya
        $vars['id'] = $segments[1];

        //echo "<hr />2<pre>"; print_r($view); echo "</pre>";
        //echo "<pre>"; print_r($vars); echo "</pre>";
        return $vars;
    }
}

Прошу модератора перевести тему в статус: РЕШЕНО
« Последнее редактирование: 25.05.2016, 17:25:36 от john.deff »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться