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

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
Хочу реализовать следующее в своем компоненте:

Журнал операций - чтоб иметь четкую картину кто когда и чего делал.
Например: есть таблица №1 и все виды для работы с ней.
при создании элемента в Т1 надо чтоб запрос как текст попал в Т(log)
Структура для Т(log) создана

Подскажите куда копать? Или отговорите...
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
самое простое: переопределить все методы создания/сохранения/публикации/удаления/прочих_действий элементов в модели и перед вызовом родителя делать запись в лог через JLog либо организовать собственный лог (запись в отдельную таблицу компонента, просмотр и управление - только в админке и только суперюзером)
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
Блин по переопределению чет сражу не понимаю. Подкиньте ссылочку на изучение, кто богат.
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Спойлер
[свернуть]
Функция test() в классе Test2 переопределена.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
А список названий какой у функций
save? или как?
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
И еще вопрос. А как достать переменные данной записи внутри метода?
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
По переопределению save получилось
Спойлер
[свернуть]
Подскажите какие еще есть функции полезные для работы и как они называются по англ и входные выходные данные. (можно ссылку)
Полезные например: после сохранения есть что-то, а то в момент сохранения может не быть id. Может еще какие заморочки есть?
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
По переопределению save получилось
Спойлер
[свернуть]
Что получилось? По приведенному коду не вижу.
Полезные например: после сохранения есть что-то, а то в момент сохранения может не быть id. Может еще какие заморочки есть?
Переведите.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
Что получилось? По приведенному коду не вижу.Переведите.
Получилось то что достал данные $data и могу их пользовать. По поводу переведите: не могу достать id элемента который только что создается.
Для добавления нового элемента как лучше достать данные?
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
не могу достать id элемента который только что создается.
В переопределенном методе save() сразу после успешной
Код: php-brief
$table->store()
делайте
Код: php-brief
$id=$table->id;
Не будь паразитом, сделай что-нибудь самостоятельно!
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
... сразу после успешной
вот эт оне понимаю. Что это значит?
И попутно вопрос как мне положить переформированные данные в другую таблицу?
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
не могу достать id элемента который только что создается.
Посмотрел JModelAdmin::save(), можно сделать проще: в переопределенном методе save() после успешного сохранения
Код: php-brief
$id=$this->getState($this->getName().'.id');
На этом бесплатные ответы закончились.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
На этом бесплатные ответы закончились.
Спасибо и на этом. Дали бы ссылки на то как писать в другой table и все прочее - я готов разбираться, можно без прямых подсказок. Тем не менее спасибо!
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Спасибо и на этом. Дали бы ссылки на то как писать в другой table и все прочее - я готов разбираться, можно без прямых подсказок. Тем не менее спасибо!
Не знаю такой ссылки - сам учусь, разбирая код.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Не знаю такой ссылки - сам учусь, разбирая код.
platonische, это на самом деле так. нет ничего лучше в изучении чего то, чем изучение работы его исходников. имхо вы без этого не продвинетесь дальше, сколько бы умных книжек вы не прочли.
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
Подскажите в каком стандартном компоненте есть запись в две таблице?
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
А в чём проблема с записью в две таблицы?

Код: php
public function save($data)
{
    if (!parent::save($data))
    {
       return false;
    }

    $id = $this->getState($this->getName(). '.id');
    $this->updateSecondTable($id, $data);
}

private function updateSecondTable($id, $data)
{
     // здесь пишите во вторую таблицу
}
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
Честно признаться. Я действительно немного знаю и достаточно тяжеловато.
Затык заключается не в ток как передать переменные другой функции, а в том куда передать?

Ведь все же есть готовое и можно наверное во вторую таблицу методом save записать данные или надо городить что-то вот такое?:
Спойлер
[свернуть]

Читаю код родительского метода из файла libraries\legacy\model\admin.php буду разбираться как его заставить table сменить... пока решение в лоб - скопировать его и присвоить нужное значение $table
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
Что выходит:
в моделе добавил getLogTable
Спойлер
[свернуть]

метод save вот такой:
Спойлер
[свернуть]

И вторая функция сохранения вот ту прошу помочь. Все работает но не все понимаю
Спойлер
[свернуть]
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
Ещё вопрос: А куда можно вынести функцию function updateSecondTable($data) чтоб пользоваться ей из всех моделей, что есть в компоненте?
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
Возник вопрос.

Сохранение во вторую таблицу работает отлично.

второе сохранение срабатывает после первого сохранения и вываливает в адресную строку id не элемента а id из второго сохранения (id таблицы log) как побороть?
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
Ответ на пред пост
Спойлер
[свернуть]
Из второго сохранения надо убрать эту строку.
*

b2z

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

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
А зачем Вам проверка  if ($this->associationsContext && JLanguageAssociations::isEnabled())?
Я не знаю - взял родительский метод под копирку.
Подскажите какие операции здесь лишние? cleanCache нужен ли и все что в catch ?
*

b2z

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

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
Продолжаю задавать вопросы.
1. Подскажите куда засунуть функцию чтоб был к ней доступ из каждой модели?
2. Подскажите как переопределить publish и delete функции? Точнее как внутри них запустить функцию save? Суть в том что мне надо при изменении статуса published делать запись во второй таблице и соответственно вызывать методы сохранения новой записи... не выходит у меня это.
Ну и еще переопределить их где лучше? в модели или контроллере?
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
1. Подскажите куда засунуть функцию чтоб был к ней доступ из каждой модели?
Никуда не засовывать, любой метод в любой модели можно дергать из другой модели!
Код: php
$model = JModelLegacy::getInstance( $name = 'List', $prefix = 'TestModel' ); //то есть имя класса модели TestModelList
echo $model->getTest();// вызываем метод getTest() в модели!

2. Подскажите как переопределить publish и delete функции? Точнее как внутри них запустить функцию save? Суть в том что мне надо при изменении статуса published делать запись во второй таблице и соответственно вызывать методы сохранения новой записи... не выходит у меня это.
Ну и еще переопределить их где лучше? в модели или контроллере?
2. переопределить просто
Код: php
public function publish( &$pks, $value = 1 ){
if ( parent::publish( $pks, $value ) ) {
//тут ваш код
}
}
Только зачем вам вызывать внутри них метод save для изменения данных?
Получаете нужную таблицу через
$table = $this->getTable('table_name'); //вместо table_name имя вашей таблицы
$table->load(10); // загружаете запись с id=10
$table->text = 'lalala'; //меняете значение в поле text на lalal
$table->save(); // сохраняете данные!
« Последнее редактирование: 14.03.2016, 21:11:11 от Istaan »
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
Никуда не засовывать, любой метод в любой модели можно дергать из другой модели!
2. переопределить просто
Код: php
public function publish( &$pks, $value = 1 ){
if ( parent::publish( $pks, $value ) ) {
//тут ваш код
}
}
Только зачем вам вызывать внутри них метод save для изменения данных?
Получаете нужную таблицу через
$table = $this->getTable('table_name'); //вместо table_name имя вашей таблицы
$table->load(10); // загружаете запись с id=10
$table->text = 'lalala'; //меняете значение в поле text на lalal
$table->save(); // сохраняете данные!
По первому вопросу спасибо испробую!
По второму немного поясню: Вот сменили значение published а в таблице Log надо СОЗДАТЬ запись, тут вопрос еще один всплывает, когда берешь внутри модели somethingS то это класс JModelList а метод сохранения у меня лежит в методе SOMETHING а он расширяет класс JModelAdmin и чего-то у меня не катит функция вызванная из другого метода
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
По первому вопросу спасибо испробую!
Я там выше код дополнил как модель дергать!

По второму немного поясню: Вот сменили значение published а в таблице Log надо СОЗДАТЬ запись
а вы пробовали хоть немножко документацию читать?!
Повторю код:
Код: php
$table = $this->getTable('table_name'); //вместо table_name имя вашей таблицы
$table->load(10); // загружаете запись с id=10
$table->text = 'lalala'; //меняете значение в поле text на lalal
$table->save(); // сохраняете данные!
Вот так вы отредактируете старую запись!

Код: php
$table = $this->getTable('table_name'); //вместо table_name имя вашей таблицы
$table->text = 'lalala'; //меняете значение в поле text на lalal
$table->save(); // сохраняете данные!
Вот так вы создадите новую запись!

Вам не нужно вызывать метод SAVE ибо он без контроллера, без переданных данных в $_POST, токена и установки состояний работать не будет!
И в конечном результате метод save делает сохранение в таблицу с помощью класса JTable!


тут вопрос еще один всплывает, когда берешь внутри модели somethingS то это класс JModelList а метод сохранения у меня лежит в методе SOMETHING а он расширяет класс JModelAdmin и чего-то у меня не катит функция вызванная из другого метода
Потому что вы 99.999% неправильно вызываете модель!
Если вызываете не так:
Код: php
$model = JModelLegacy::getInstance( $name = 'List', $prefix = 'TestModel' ); //то есть имя класса модели TestModelList
echo $model->getTest();// вызываем метод getTest() в модели!
а просто проинклудив, то неудивительно что у вас не работает!
Но и работать не будет! Вам надо сделать как я написал выше! через $table (класс JTable)
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
Понял! Шагаем дальше. Спасибо!
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

[РЕШЕНО] Дублирование при создании

Автор platonische

Ответов: 7
Просмотров: 1249
Последний ответ 12.02.2021, 11:24:26
от platonische
Обработка AJAX в компоненте Joomla!3

Автор balancer

Ответов: 33
Просмотров: 11758
Последний ответ 23.07.2020, 07:45:53
от Dolphin4ik_1
Пагинатор в нестандартном компоненте

Автор sesil

Ответов: 8
Просмотров: 1221
Последний ответ 04.09.2019, 11:24:30
от sesil
Не видится файлы языкового пакета в созданном компоненте

Автор khachatur86

Ответов: 0
Просмотров: 1642
Последний ответ 30.03.2019, 23:35:26
от khachatur86
Стандартная система рейтингов в custom компоненте

Автор platonische

Ответов: 1
Просмотров: 965
Последний ответ 12.02.2019, 16:55:03
от platonische