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

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
Цитировать
Вот тут вопрос: в AJAX get или post прилетает
Не понял. Посмотри в консоли. FireBug F12 консоль
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Сделал тест: $this->printJson(filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT), false); => корректное id получил, значит get
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
После запроса:
if($db->getAffectedRows()){//успешный запрос!}
вот это не сработало

получилось так пока
Код: php
  public function delCode() {
    $result = (bool)JFactory::getDbo()->setQuery('delete from `#__aimfo_codes` where `id` = '.filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT))->execute();
    $this->printJson(JText::_('COM_AIMFO_CODES_DELCODE_'.$result), $result);
  }
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Вот тут вопрос: в AJAX get или post прилетает?
В AJAX ничего не прилетает ) AJAX отправляет POST или GETом и получает то что сервер отдал (какие либо данные строчные)


Преобразование убрал, все равно не показывает
$this->printJson(JText::_('COM_AIMFO_CODES_DELCODE_'.$result), $result);
Константы COM_AIMFO_CODES_DELCODE_0 и COM_AIMFO_CODES_DELCODE_1 существуют.
Посмотрите в консоли браузера или нет ошибок JS после отправки запроса! Возможно у вас ошибка!
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
вот это не сработало

получилось так пока
Код: php
  public function delCode() {
    $result = (bool)JFactory::getDbo()->setQuery('delete from `#__aimfo_codes` where `id` = '.filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT))->execute();
    $this->printJson(JText::_('COM_AIMFO_CODES_DELCODE_'.$result), $result);
  }

а вы так и написали:
Код: php
if($db->getAffectedRows()){//успешный запрос!} 
?)))

И да в модели пишите не JFactory::getDbo()
а $this->getDbod()->setQuery('delete from `#__aimfo_codes` where `id` = '.filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT))->execute();
и потом if($this->getDbod()->getAffectedRows())
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Посмотрите в консоли браузера или нет ошибок JS после отправки запроса! Возможно у вас ошибка!
Делал так:
Код: php
$result = $db->getAffectedRows();
$this->printJson($result, false);
Получал NULL, сам запрос коррректен, в реале возвращает true



И да в модели пишите не JFactory::getDbo()
а $this->getDbod()->setQuery('delete from `#__aimfo_codes` where `id` = '.filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT))->execute();
и потом if($this->getDbod()->getAffectedRows())
Попробую, спс



Как в аякс-модели в public function addCode() {} модальное окошко вывести? или выводить его надо во вьюхе, а здесь только обрабатывать нажатие "сохранить"?
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Код: php
    if($this->getDbod()->getAffectedRows()) {$result = '123';} else {$result = '789';}
    $this->printJson(($result, false));
Тишина, никакого сообщения, в консоли чисто
« Последнее редактирование: 23.10.2014, 00:37:22 от AlekVolsk »
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Вывожу во вьюхе модальное окошко, нажимаю на #btn-code, ничего не происходит, alert($('#btn-code').data('mode')) => add

Код: javascript
    $('#btn-code').on('click', function() {
      if ($('#btn-code').data('mode') == 'add') {
        $.getJSON('index.php', {option:'com_ai_mfo', task:'getAjax', action:'addCode', userid:<?php echo $this->item->userid; ?>, relnum:$('#jform_relnum').val(), relcode:$('#jform_relcode').val()}, function(response) {
          if (response.result) {
            alert(response.message);
          } else {
            alert(response.message);
          }
        })
      } else {
      }
    });

Код: php
  public function addCode() {
    $userid = filter_input(INPUT_GET, 'userid', FILTER_VALIDATE_INT);
    $relnum = filter_input(INPUT_GET, 'relnum');
    $relcode = filter_input(INPUT_GET, 'relcode', FILTER_VALIDATE_INT);
    $this->printJson($userid.' '. $relnum.' '.$relcode, $result);
  }
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
потому что я опечатался ) не $this->getDbod(), а $this->getDbo()!
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
потому что я опечатался ) не $this->getDbod(), а $this->getDbo()!
ок, вернусь к удалению записи после, сначала добавить надо, а то уже база от экспериментов пуста ))
« Последнее редактирование: 23.10.2014, 02:33:28 от AlekVolsk »
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
гдето ошибка в JS наверно..
кстати не могу понять этого маневра
$('#btn-code').on('click', function() {
      if ($('#btn-code').data('mode') == 'add') {
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Код: php
    $this->getDbo()->setQuery('insert into `#__aimfo_codes` (`userid`, `relnum`, `relcode`) values ('.$userid.', \''.$relnum.'\', '.$relcode.')')->execute();
    $result = $this->getDbo()->getAffectedRows();
никакого эффекта

Код: php
    $result = $this->getDbo()->setQuery('insert into `#__aimfo_codes` (`userid`, `relnum`, `relcode`) values ('.$userid.', \''.$relnum.'\', '.$relcode.')')->execute();
а так возврат true
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
кстати не могу понять этого маневра
$('#btn-code').on('click', function() {
      if ($('#btn-code').data('mode') == 'add') {
$('#btn-code').on('click', function() {
  if ($('#btn-code').data('mode') == 'add') {
    // вызов addCode для добавления новой записи
  } else {
    // вызов updCode для изменения текущей записи
  }
}
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
С аяксом разобрался, работает (кроме getAffectedRows() - забил на него).

Теперь на панель инструментов (там, где создать, изменить, в корзину, публиковать) во вьюхе со списком надо добавить пару своих нестандартных кнопок и и обработчики к ним.
Как это можно сделать?
*

aspidy

  • Завсегдатай
  • 1008
  • 55 / 1
  • Миграция joomla 1.0-1.5-2.5
Цитировать
Как в аякс-модели в public function addCode() {} модальное окошко вывести? или выводить его надо во вьюхе, а здесь только обрабатывать нажатие "сохранить"?
Для встроенного окна добавляете modal и характеристики окна, для фанси бокс подключение фанси. 
Цитировать
пару своих нестандартных кнопок и и обработчики к ним.
Как это можно сделать?
так же онклик или якорем
Мелкий ремонт. skype poisk-plus
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
$('#btn-code').on('click', function() {
  if ($('#btn-code').data('mode') == 'add') {
    // вызов addCode для добавления новой записи
  } else {
    // вызов updCode для изменения текущей записи
  }
}

Что делает условие понятно, на зачем вы его повесили?
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Полный код:
Спойлер
[свернуть]
Это "Сохранить" в модальном окошке. .data('mode') присваивается до того, как окошко вызывается (установление заголовка и заполнение полей):
Спойлер
[свернуть]
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
я в суть особо не вникал но сколько у вас повторяющегося кода! Ваш код выше можно записать куда короче:
Спойлер
[свернуть]
примерно так, код становится чище и понятнее
интернет-блог: http://websiteprog.ru
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Хороший рефакториннг, спс, просто про оптимизацию кода пока вообще не думал, главное сейчас - добиться рабочего результата для демонсрации шефу, а уж потом можно и оптимизацией заняться.

И да: это была сознательная очепятка ))
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
По вопросу добавления своей кнопки на тулбар, в com_menus нашел, как добавляется кнопка "пакетная обработка", но не уверен, все ли правильно я понял:
Код: php
		if ($user->authorise('core.create', 'com_menus') && $user->authorise('core.edit', 'com_menus') && $user->authorise('core.edit.state', 'com_menus'))
{
JHtml::_('bootstrap.modal', 'collapseModal'); // подключаем модальные окошки bs и - непонятно - связываем действие с collapseModal?
$title = JText::_('JTOOLBAR_BATCH'); // заголовок кнопки ?

// Instantiate a new JLayoutFile instance and render the batch button
$layout = new JLayoutFile('joomla.toolbar.batch'); // код кнопки лежит в /layouts/joomla/toolbar/batch.php

$dhtml = $layout->render(array('title' => $title)); // подключаем кнопку и устанавливаем заголовок(?)
$bar->appendButton('Custom', $dhtml, 'batch'); // показываем кнопку
}
Код кнопки прост до безобразия, просто показывает модальное окошко.
Само окошко лежит внутри вьюхи в default_batch.php.

Непонятно следующее:
- как подключается для дальнейшего вызова default_batch.php?
- имя файла с окошком тоже играет роль? какую и как?
- где обработчик кнопки "выполнить"? onclick="Joomla.submitbutton('item.batch');" => модель item, функция batch?
- collapseModal - id окошка, играет ли роль при создании кнопки в view.html.php? какую?
« Последнее редактирование: 23.10.2014, 15:35:08 от AlekVolsk »
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Фронт.
В модели пишу функцию:
Код: php
  public function getSubscriptions() {
    $userid = JFactory::getUser()->id;
    $query = $this->getDbo()->getQuery(true);
    $query->select('`idt`, `iname`, `sdt`, `sname`')->from('#__aimfo_subscriptions')->where('`userid`='.(int)$userid);
    return $this->getDbo()->setQuery($query)->loadObject();   
  }

Во вьюхе пытаюсь получить результат:
Код: php
$ss = $this->get('getSubscriptions');
var_dump($ss);

На выходе получаю NULL. Где мог ошибиться?

Тот же запрос непосредственно во вьюхе возвращает результат.
« Последнее редактирование: 24.10.2014, 00:57:13 от AlekVolsk »
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
$ss = $this->get('Subscriptions');
интернет-блог: http://websiteprog.ru
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Notice: Trying to get property of non-object
Может, чего в контролере забыл? он вообще пустой сейчас

upd
В view.html.php
      $model = $this->getModel('List', 'Ai_MfoModel', array('ignore_request' => false));
      $this->ss = $model->get('Subscriptions');
      var_dump($this->ss); // => NULL


upd2
В общем, в итоге пришлось переместить getSubscrictions в view.html.php и вызывать в display():
      $this->ss = $this->getSubscriptions();

Из модели ну ни в какую....
« Последнее редактирование: 24.10.2014, 10:25:29 от AlekVolsk »
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
а как обращаетесь ко всему этому?
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Цитировать
$model = $this->getModel('List', 'Ai_MfoModel', array('ignore_request' => false));
$this->ss = $model->get('Subscriptions');
так не будет работать, потому что у модели нет метода get()
интернет-блог: http://websiteprog.ru
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
а как обращаетесь ко всему этому?
Фронт.
В модели пишу функцию:
Код: php
  public function getSubscriptions() {
    $userid = JFactory::getUser()->id;
    $query = $this->getDbo()->getQuery(true);
    $query->select('`idt`, `iname`, `sdt`, `sname`')->from('#__aimfo_subscriptions')->where('`userid`='.(int)$userid);
    return $this->getDbo()->setQuery($query)->loadObject();   
  }

Во вьюхе пытаюсь получить результат:
Код: php
$ss = $this->get('getSubscriptions');
var_dump($ss);

На выходе получаю NULL. Где мог ошибиться?

Тот же запрос непосредственно во вьюхе возвращает результат.
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Я понимаю как вы все это пишете, но по какой ссылке вы пытаетесь все это получить?
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Так это не по ссылке (или что вы имеете ввиду под ссылкой?), просто пытаюсь получить массив данных для последующего вывода во фронт.

Что показать?
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Через AJAX пытаетесь получить?
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Как работает сейчас.

Модель
Спойлер
[свернуть]

view.html.php
Спойлер
[свернуть]

Вьюха
Спойлер
[свернуть]

Нет, это не аякс
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Отправка файлов через ajax в модуль Joomla

Автор hemicide

Ответов: 19
Просмотров: 2108
Последний ответ 11.04.2022, 08:44:33
от sivers
Создание компонента для табеля рабочего времени

Автор sashahz

Ответов: 7
Просмотров: 775
Последний ответ 12.04.2021, 11:12:11
от sashahz
Вызов формы компонента в pop-up, при клике по ссылке из любого места

Автор SkyAn

Ответов: 1
Просмотров: 664
Последний ответ 01.03.2021, 04:08:48
от gartes
Документация по разработки компонента для Joomla 3.x

Автор Aspik

Ответов: 9
Просмотров: 3285
Последний ответ 23.01.2021, 07:55:56
от hmr
Сборка инсталятора компонента файлами из разных папок с привлечением github

Автор borro

Ответов: 1
Просмотров: 670
Последний ответ 25.12.2020, 21:21:30
от platonische