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

Septdir

  • Живу я здесь
  • 3370
  • 168 / 4
Здравствуйте, разрабатываю свой компонент и столкнулся с проблемой.

Задача следующая. Вывести метки на Яндекс карту через objectManager, следовательно надо получать данные с сайта в формате JSON
Для тестирования сделал view.josn.php (на скорую руку, потом уберу в контролер и сделаю модель) Сам вывод:http://test.joomlazen.com/index.php?option=com_jz_location&view=ymap&format=json
Код вывода:
Код
class JZLocationViewYmap extends JViewLegacy {
public function getMapObject($data) {
    $item = new stdClass();
    $item->type = 'Feature';
    $item->id = $data->id;
    $item->geometry = new stdClass();
    $item->geometry->type = 'Point';
    $item->geometry->coordinates = '[55.831903,37.411961]';
    $item->properties = new stdClass();
    $item->properties->balloonContent = 'Content';
    $item->properties->clusterCaption = 'Cluste';
    $item->properties->hintContent = 'Hint';
    return $item;
    }
public function getMapFeatures() {
    $db = JFactory::getDbo();
    $query = $db->getQuery(true);
    $query
        ->select('*')
        ->from($db->quoteName('#__k2_items','a'))
        ->group($db->quoteName('a.id'))
        ->order('a.id DESC')
    ;
    $db->setQuery($query);
    $rows = $db->loadObjectList();
    if ($rows) {
        foreach ($rows as $row) {
            $main[] = $this->getMapObject($row);            
        }
        return $main;
    }
    return false;
}

public function display($tpl = NULL) {
    $app = JFactory::getApplication();
    $app->setHeader('Content-Type', 'application/json; charset=utf-8');
    $data = new stdClass();
    $data->type = "FeatureCollection";
    $data->features = $this->getMapFeatures();
    echo json_encode($data);
}
И соответственно создал вывод для удобства в простом HTML (Пример взял из Песочницы Яндекс, а на сайте сделал Access-Control-Allow-Origin:"*" )
Код
<!DOCTYPE html>
<html>
<head>
    <title>Примеры. Добавление на карту большо числа объектов</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <!-- Если вы используете API локально, то в URL ресурса необходимо указывать протокол в стандартном виде (http://...)-->
    <script src="http://api-maps.yandex.ru/2.1/?lang=ru-RU" type="text/javascript"></script>
    <script src="http://yandex.st/jquery/2.1.0/jquery.min.js" type="text/javascript"></script>
    <script>
ymaps.ready(init);

function init () {
    var myMap = new ymaps.Map('map', {
            center: [55.831903,37.411961],
            zoom: 10
        }, {
            searchControlProvider: 'yandex#search'
        }),
        objectManager = new ymaps.ObjectManager({
            // Чтобы метки начали кластеризоваться, выставляем опцию.
            clusterize: true,
            // ObjectManager принимает те же опции, что и кластеризатор.
            gridSize: 32
        });

    // Чтобы задать опции одиночным объектам и кластерам,
    // обратимся к дочерним коллекциям ObjectManager.
    objectManager.objects.options.set('preset', 'islands#greenDotIcon');
    objectManager.clusters.options.set('preset', 'islands#greenClusterIcons');
    myMap.geoObjects.add(objectManager);

    $.ajax({
        url: 'http://test.joomlazen.com/index.php?option=com_jz_location&view=ymap&format=json'
    }).done(function(data) {
        objectManager.add(data);
    });

}</script>
<style>
        HTML, body, #map {
            width: 100%; height: 100%; padding: 0; margin: 0;
        }
    </style>
</head>
<body>
<div id="map"></div>
</body>
</html>
Честно говоря с AJAX не сильно дружу. поэтому прошу помочь разобраться. Заранее благодарен.

Для тех кому удобнее отвечать на stackoverflow вот ссылки http://ru.stackoverflow.com/questions/521697/joomla-json-yandex-map http://stackoverflow.com/questions/37134854/joomla-json-output-ajax
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
CodersRank | Контакты | Мой GitHub | Workshop
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Аякс тут совсем не нужен, собирайте данные в массив или объект, как вам надо для карты, потом с этим массивом/объектом json_encode() и все.
*

Septdir

  • Живу я здесь
  • 3370
  • 168 / 4
Аякс тут совсем не нужен, собирайте данные в массив или объект, как вам надо для карты, потом с этим массивом/объектом json_encode() и все.
Так вся, как я понимаю и проблема в JSON, точнее в том что карта не понимает что это json (хотя по логу ссылка распознается как "application/json; charset=utf-8")
Посмотрите пожалуйста код. может в нем проблема. А Акс мне потом понадобиться но дальше то я управлюсь просто застрял на этом месте
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
CodersRank | Контакты | Мой GitHub | Workshop
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Из кода не видно что у вас в data приходит, на вскидку добавьте еще в AJAX параметр dataType : 'json', тогда данные в data будут не строкой а объектом (если там действительно json приходит).
*

Septdir

  • Живу я здесь
  • 3370
  • 168 / 4
Из кода не видно что у вас в data приходит, на вскидку добавьте еще в AJAX параметр dataType : 'json', тогда данные в data будут не строкой а объектом (если там действительно json приходит).
сам JSON вывод http://test.joomlazen.com/index.php?option=com_jz_location&view=ymap&format=json
 dataType : 'json', - попробовал не помогает
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
CodersRank | Контакты | Мой GitHub | Workshop
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Включайте FireBug, отлавливайте ошибки. json с виду вполне нормальный.
*

Septdir

  • Живу я здесь
  • 3370
  • 168 / 4
Включайте FireBug, отлавливайте ошибки. json с виду вполне нормальный.
Да в том то и дело, что там пусто. data в консоль тоже передается
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
CodersRank | Контакты | Мой GitHub | Workshop
*

Septdir

  • Живу я здесь
  • 3370
  • 168 / 4
Проблему удалось решить путем добавления контролера. Код контролера
Код
function __construct($config = array()) {
    parent::__construct( $config );
}

 public function getMapObject($data) {
    $item = new stdClass();
    $item->type = 'Feature';
    $item->id = $data->id;
    $item->geometry = new stdClass();
    $item->geometry->type = 'Point';
    $item->geometry->coordinates = array(55.831903,37.411961);
    $item->properties = new stdClass();
    $item->properties->balloonContent = 'Content';
    $item->properties->clusterCaption = 'Cluste';
    $item->properties->hintContent = 'Hint';
    return $item;
    }
public function getMapFeatures() {
    $db = JFactory::getDbo();
    $query = $db->getQuery(true);
    $query
        ->select('*')
        ->from($db->quoteName('#__k2_items','a'))
        ->group($db->quoteName('a.id'))
        ->order('a.id DESC')
    ;
    $db->setQuery($query);
    $rows = $db->loadObjectList();
    if ($rows) {
        foreach ($rows as $row) {
            $main[] = $this->getMapObject($row);            
        }
        return $main;
    }
    return false;
}

public function some() {
    $app = JFactory::getApplication();
    $app->setHeader('Content-Type', 'application/json; charset=utf-8');
    $data = new stdClass();
    $data->type = "FeatureCollection";
    $data->features = $this->getMapFeatures();
    echo json_encode($data);

}
Так же была ошибка в координатах  
Код
$item->geometry->coordinates = '[55.831903,37.411961]';
Они должны быть массивом
Код
 $item->geometry->coordinates = array(55.831903,37.411961);
« Последнее редактирование: 16.05.2016, 11:41:43 от Septdir »
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
CodersRank | Контакты | Мой GitHub | Workshop
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
*

Septdir

  • Живу я здесь
  • 3370
  • 168 / 4
Почеме в контроллере работаете с базой данных?
еще не окончательная версия, пока не более чем набросок для тестов (а тестировать удобно когда все в одном файле). Пока, не думал как в итоге сделать, но точно по другому.
Все операции с базой как полагается будут в model, возможно формирование объекта тоже(причем в одной функции). А вот дальше пока не знаю. С одной стороны формировать json под аякс  во view тоже не комильфо, с другой стороны это все же вывод.
« Последнее редактирование: 16.05.2016, 19:10:31 от Septdir »
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
CodersRank | Контакты | Мой GitHub | Workshop
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Ну отдайте представлению чистые данные, а оно пусть само решает, что с ними делать. Либо в контроллере получите данные и дальше представлению, хотя при аяксе представление по сути лишнее. Как правило, в контроллере сразу JResponseJson формируете, забрав данные у модели, и отдаёте через echo.
*

Septdir

  • Живу я здесь
  • 3370
  • 168 / 4
Как правило, в контроллере сразу JResponseJson формируете, забрав данные у модели, и отдаёте через echo.
Ну вот я пока именно в эту сторону склоняюсь. Но все же до этого мне по плану еще далеко, просто не удержался с картой поиграться
« Последнее редактирование: 16.05.2016, 20:00:42 от Septdir »
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
CodersRank | Контакты | Мой GitHub | Workshop
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Не занимать место под пустой вывод модуля

Автор platonische

Ответов: 11
Просмотров: 932
Последний ответ 28.04.2020, 07:53:11
от sivers
[РЕШЕНО] curl-файл Joomla $model->save($data) подключение модели администратора

Автор platonische

Ответов: 31
Просмотров: 1809
Последний ответ 30.05.2019, 16:10:57
от sivers
Вывод данных из нескольких одинаковых таблиц

Автор Outpost

Ответов: 6
Просмотров: 825
Последний ответ 11.02.2019, 14:42:55
от passer
Вывод сгенерированного изображения в модуле

Автор Inoken

Ответов: 4
Просмотров: 1073
Последний ответ 16.08.2017, 22:00:59
от robert
Структура компонента (1 запись + JSON ИЛИ Много записей)

Автор platonische

Ответов: 4
Просмотров: 1096
Последний ответ 02.03.2017, 15:18:26
от passer