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

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0
Здравствуйте!
Как правильно загрузить форму по известному имени в контроллере компонента?
Спойлер
[свернуть]
Обращение к методу из формы для сохранения внесённых изменений.
На экране сообщение, HTTP ERROR 500 - невозможно обработать запрос
« Последнее редактирование: 15.12.2016, 17:59:41 от GuDeVic »
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Сначала вам нужно получить экземпляр класса модели
Код: php-brief
$model=$this->getModel();
Вы не можете извне обратиться к функции loadForm, но к getForm - можете
Код: php-brief
$form=$model->getForm();
Не будь паразитом, сделай что-нибудь самостоятельно!
*

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0
Сначала вам нужно получить экземпляр класса модели
Код: php-brief
$model=$this->getModel();
Вы не можете извне обратиться к функции loadForm, но к getForm - можете
Код: php-brief
$form=$model->getForm();
В контроллере есть
Код
 $model  = $this->getModel('Order', 'OrderModel');
и сначала форму я вызывала в контроллере
Код
		$form = $model->getForm();

if (!$form)
{
JError::raiseError(500, $model->getError());

return false;
}
В модели GetForm:
Код
public function getForm($data = array(), $loadData = true) 
{
        $input = JFactory::getApplication()->input;
     
   // Устанавливаем форму в зависимости от типа заявки.
 
   $this->form = $this->getItem( $input->getInt('id', 0))->tip;
   // Get the form.
   $form = $this->loadForm(
     
      'com_order.' . $this->form, $this->form, array('control' => 'jform', 'load_data' => $loadData)
   );
   
   if (empty($form))
   {
      return false;
   }
   
   return $form;
}
В итоге ошибка:
Код
500 JForm::getInstance(name, *string*)
т.е. ошибка при загрузки формы.
*

SmokerMan

  • Гуру
  • 5290
  • 720 / 26
Цитировать
$input->getInt('id', 0))->tip
Здравствуйте!
Как правильно загрузить форму по известному имени в контроллере компонента?
Спойлер
[свернуть]
если это контроллер, откуда в нем метод loadForm не понятно

Цитировать
$this->form = $this->getItem( $input->getInt('id', 0))->tip;
что там в getItem тоже не понятно
Код
var_dump($this->form)
что показывает?

да и совсем не понятно что и где надо вывести, сформулируйте вопрос внятно, с полным кодом, а не отрывками непонятного кода
*

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0

да и совсем не понятно что и где надо вывести, сформулируйте вопрос внятно, с полным кодом, а не отрывками непонятного кода

Код
loadform
в контроллере - это ... ошибка, попытка обойти ошибку
Код
$form=$model->getForm();
Задача такая: сохранить отредактированные данные из формы редактирования.
представление:
Спойлер
[свернуть]
модель/site/com_order/models/order.php
Спойлер
[свернуть]
контроллер
Спойлер
[свернуть]
« Последнее редактирование: 15.12.2016, 20:26:50 от GuDeVic »
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Замените в модели эти методы
Спойлер
[свернуть]
Если ошибка все равно вылезет, то сделайте проверку в методе getForm
Код: php-brief
	$form=$this->loadForm('com_order.'.$type,$type,array('control'=>'jform','load_data'=>$loadData));//после этой строки добавьте следующую
print_r($form);exit();

P.S. Где-то я уже видел очень похожую тему.
P.P.S. Исправил ошибку в loadFormData().
« Последнее редактирование: 15.12.2016, 21:09:32 от robert »
Не будь паразитом, сделай что-нибудь самостоятельно!
*

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0
Замените в модели эти методы
Спойлер
[свернуть]
Если ошибка все равно вылезет, то сделайте проверку в методе getForm
Код: php-brief
	$form=$this->loadForm('com_order.'.$type,$type,array('control'=>'jform','load_data'=>$loadData));//после этой строки добавьте следующую
print_r($form);exit();

P.S. Где-то я уже видел очень похожую тему.
Я не очень поняла, чем отличаются приведённые Вами коды методов от того, что в моем компоненте
Спойлер
[свернуть]
Та же ошибка выходит. Если прямо в getForm указать имя формы, то ошибки нет. Но у меня 10 типов форм, так что.
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Вы читали мой последний пост до конца? Проверку сделали?
Не будь паразитом, сделай что-нибудь самостоятельно!
*

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0
Вы читали мой последний пост до конца? Проверку сделали?
Читала до конца. Вставила проверку, белый экран, переход на index.php?option=com_order&task=order.save&Itemid=142
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Читала до конца.
И это тоже
P.P.S. Исправил ошибку в loadFormData().
?
И почему переход на order.save? Вставьте проверку, откройте запись для редактирования - при отсутствии ошибки у вас должен выводиться JForm Object.
« Последнее редактирование: 15.12.2016, 22:10:48 от robert »
Не будь паразитом, сделай что-нибудь самостоятельно!
*

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0
И это тоже?
И это тоже исправила.
Похоже, всё-таки, не определяется в getForm тип записи, т.к., если я принудительно вставляю название формы (номер), то форма в контроллер возвращается без ошибки.
Похожая тема была. И это была моя тема. Задача была создать новую заявку, информация о типе заявки получалась из как бы независимой формы, в которой был просто селект типов заявок, в модели  getForm
Спойлер
[свернуть]
Данные заявки сохранялись.
Теперь несколько иная задача - из списка заявок, по интерактивному полю (когда известны и тип заявки и id) переход в режим редактирования. Так что методы модели используются для перехода в order.edit. А теперь надо сделать save того, что добавляется в редактируюмую запись. И вот здесь-то getForm не может выбрать нужное название формы. Может быть, там уже не input должен быть?
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Ну почему вы все всегда говорите кусками, вырванными из контекста?
Похожая тема была. И это была моя тема. Задача была создать новую заявку, информация о типе заявки получалась из как бы независимой формы, в которой был просто селект типов заявок, в модели  getForm
Теперь несколько иная задача - из списка заявок, по интерактивному полю (когда известны и тип заявки и id) переход в режим редактирования. Так что методы модели используются для перехода в order.edit. А теперь надо сделать save того, что добавляется в редактируюмую запись. И вот здесь-то getForm не может выбрать нужное название формы. Может быть, там уже не input должен быть?
С этого и должны были начать.
Что за интерактивное поле?
Проблема в открывании формы или в сохранении?
Не будь паразитом, сделай что-нибудь самостоятельно!
*

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0
И это тоже?
И почему переход на order.save? Вставьте проверку, откройте запись для редактирования - при отсутствии ошибки у вас должен выводиться JForm Object.
Да, выводится JForm Object при открытии записи на редактирование. Правильно заполнено.
*

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0
Ну почему вы все всегда говорите кусками, вырванными из контекста?С этого и должны были начать.
Что за интерактивное поле?
Проблема в открывании формы или в сохранении?
Интерактивное поле? Ну, наверное, неправильно так называть. Когда я вывожу введенные записи, одно из полей я делаю ссылкой
Код
<a href="<?php echo JRoute::_('index.php?option=com_order&task=order.edit&id=' . (int) $item->id); ?>">
<?php $user_cod=$item->user_cod; echo $user_cod; ?>
</a>
По этой ссылке (этим ссылкам) можно открыть конкретную запись на редактировние (с учетом типа записи (заявки). Проблема с сохранением добавленной в форму информации. Точнее, просто с сохранением. Точнее, не могу загрузить нужную форму в соответствии с типом записи.
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
По этой ссылке (этим ссылкам) можно открыть конкретную запись на редактировние (с учетом типа записи (заявки). Проблема с сохранением добавленной в форму информации. Точнее, просто с сохранением.
Значит, с getForm() все нормально: вы ведь форму открыли, верно? Но сразу в следующем предложении вы написали
Точнее, не могу загрузить нужную форму в соответствии с типом записи.
?
Если вы не научитесь внятно разъясняться, никто не сможет вам помочь, кроме экстрасенсов.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0
Я вставила в модель два одинаковых по содержанию кода getForm и getForm2, к методу getForm2 обращение из контроллера при сохранении записи. Если в getForm2 принудительно задать название формы, то  dump_r выводит JForm Object, но без данных из формы. А вот без принудительно заданного  имени и дампа нет.
Т.е. неправильно к записи обращаюсь из формы редактирования?
*

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0
Значит, с getForm() все нормально: вы ведь форму открыли, верно? Но сразу в следующем предложении вы написали?
Если вы не научитесь внятно разъясняться, никто не сможет вам помочь, кроме экстрасенсов.
Да и экстрасенсы в отпуске. Спасибо, что помогаете, в том числе, и правильно сформулировать.
Форму для редактирования я открыла. А вот сохранить отредактированные данные не могу. При обращении к getForm из контроллера получаю ошибку.
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Я вставила в модель два одинаковых по содержанию кода getForm и getForm2, к методу getForm2 обращение из контроллера при сохранении записи. Если в getForm2 принудительно задать название формы, то  dump_r выводит JForm Object, но без данных из формы. А вот без принудительно заданного  имени и дампа нет.
Т.е. неправильно к записи обращаюсь из формы редактирования?
Вы с какой планеты, GuDeVic? У вас там все сидят друг у друга в голове? Или у всех на лбу выводятся мысли? Почему только сейчас всплыла getForm2? Что она должна делать и где она фигурирует?
Не будь паразитом, сделай что-нибудь самостоятельно!
*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
со стороны это даже смешно, совсем не так, когда сам участвуешь :)
проще, наверно, доступ предоставить товарищу robert'у, это сбережет много нервов обеим сторонам.
*

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0
Вы с какой планеты, GuDeVic? У вас там все сидят друг у друга в голове? Или у всех на лбу выводятся мысли? Почему только сейчас всплыла getForm2? Что она должна делать и где она фигурирует?
Вообще-то в ответе#4 в контроллере написано
Код
 // Validate the posted data.
      //   $form = $model->getForm();  // выдает ошибку!, поэтому для проверки обращение к getForm2 c явно указанной формой
      $form = $model->getForm2();
Сейчас в getForm2() абсолютно тот-же код, что и getForm(). Это ведь ни на что не влияет? И потом я использовала эти 2 метода, чтобы вставлять dump_r при вызове формы для редактирования и для сохранения. Как бы можно было пройти через дамп при вызове на редактирование, чтобы посмотреть дамп при сохранении в рамках одного метода?
Хотя о чем я? Вы потратили время на мои проблемы, отягощённые моей уверенностью, что и так всё понятно, что у меня в голове, тем более, это для верности ещё и на лбу у меня написано.. Спасибо Вам огромное.
*

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0
со стороны это даже смешно, совсем не так, когда сам участвуешь :)
проще, наверно, доступ предоставить товарищу robert'у, это сбережет много нервов обеим сторонам.
Ну, насчет моих нервов. Я очень переживаю, что нервирую roberta.
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Попробуйте соранить id в сессии.
Вот методы в модели
Спойлер
[свернуть]
Убрать getForm2(), использовать только getForm().
« Последнее редактирование: 16.12.2016, 09:58:37 от robert »
Не будь паразитом, сделай что-нибудь самостоятельно!
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться