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

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Re: Написание Компонента
« Ответ #60 : 01.09.2016, 11:35:42 »
JLayoutHelper  а не подскажите подробнее?
у вас сейчас работает? пусть так и остается )
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Re: Написание Компонента
« Ответ #61 : 01.09.2016, 11:42:02 »
JLayoutHelper  а не подскажите подробнее?
У вас все работает? тогда оставьте все как есть, в жизни и так мало чудес случается ;D

MVC - это общее понятие, не нужно на нём зацикливаться. Лично я AJAX всегда в контроллере вывожу, когда мне не нужно как-то красиво оформлять перед отдачей. А кто-то Helper использует и в нём модель запрашивает. Тут кому как больше нравится.
Ну так как я не зацикливаюсь то у меня гоняет AJAX в контроллер, контроллер идет если нужно в модель, и если нужен какой то вывод то вывожу через слой JLayoutHelper кусок кода, который обычно и юзается для вывода без аякса.. например вывод комментов и получение их через AJAX..
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Re: Написание Компонента
« Ответ #62 : 01.09.2016, 11:42:53 »
ну а если хочешься знать то как то так:
1. в своем компоненте создаете папку layouts
2. в ней создаете файл например search.php
3. в контроллере:
public function teacher($name){     
      echo JLayoutHelper::render('search', $this->getModel->searchTeacher($name));
      exit;
 }
4. в файле layouts/search.php
<?php foreach($displayData as $item): ?>
<?php print_r($item); ?>
<?php endforeach;?>
« Последнее редактирование: 01.09.2016, 11:46:00 от Istaan »
*

zheev

  • Захожу иногда
  • 98
  • 0 / 0
Re: Написание Компонента
« Ответ #63 : 01.09.2016, 11:46:45 »
ну а если хочешься знать то как то так:
1. в своем компоненте создаете папку layouts
2. в ней создаете файл например search.php
3. в контроллере:
public function teacher($name){     
      echo JLayoutHelper::render('search', $this->getModel->searchTeacher($name));
      exit;
 }
4. в файле layouts/search.php
<?php foreach($displayData as $item): ?>
<?php print_r($item); ?>
<?php endforeach;?>

Понял, спасибо вам большое))))
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Re: Написание Компонента
« Ответ #64 : 01.09.2016, 11:49:10 »
Кстати, строку:
Код: php-brief
->where( 'fname LIKE ' . $this->getDbo()->q( '%' . $name . '%' ) );

Я бы заменил на:
Код: php-brief
->where( 'fname LIKE ' . $this->getDbo()->q( '%' . $this->getDbo()->escape($name, true). '%', false ) );

Почему? Ответ.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Re: Написание Компонента
« Ответ #65 : 01.09.2016, 11:57:13 »
Почему? Ответ.
Кстати, это самый крутой учебник по программированию расширений Joomla, который только существует! Не устану выражать благодарность Дмитрию!
*

zheev

  • Захожу иногда
  • 98
  • 0 / 0
Re: Написание Компонента
« Ответ #66 : 01.09.2016, 11:57:26 »
Кстати, строку:
Код: php-brief
->where( 'fname LIKE ' . $this->getDbo()->q( '%' . $name . '%' ) );

Я бы заменил на:
Код: php-brief
->where( 'fname LIKE ' . $this->getDbo()->q( '%' . $this->getDbo()->escape($name, true). '%', false ) );

Почему? Ответ.


Спасибо)) изучу вопрос)))
*

zheev

  • Захожу иногда
  • 98
  • 0 / 0
Re: Написание Компонента
« Ответ #67 : 01.09.2016, 11:57:47 »
Кстати, это самый крутой учебник по программированию расширений Joomla, который только существует! Не устану выражать благодарность Дмитрию!

Сам по нему учился)
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Re: Написание Компонента
« Ответ #68 : 01.09.2016, 15:07:46 »
Спасибо. Жаль, что свободное время не позволяет написать руководство по написанию компонента под Joomla 3... Хотя 2.5 тоже по сути подходит, так как принцип во многом одинаковый.
*

zheev

  • Захожу иногда
  • 98
  • 0 / 0
Re: Написание Компонента
« Ответ #69 : 01.09.2016, 15:12:12 »
Ребят, а как можно ускорить работу AJAX? чтобы всё было как будто в реальном времени. А то ввожу в поиск и пока список сформируется проходит порядка минуты
*

zheev

  • Захожу иногда
  • 98
  • 0 / 0
Re: Написание Компонента
« Ответ #70 : 01.09.2016, 15:13:42 »
Спасибо. Жаль, что свободное время не позволяет написать руководство по написанию компонента под Joomla 3... Хотя 2.5 тоже по сути подходит, так как принцип во многом одинаковый.

Будем очень ждать))
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Re: Написание Компонента
« Ответ #71 : 01.09.2016, 17:01:14 »
Ребят, а как можно ускорить работу AJAX? чтобы всё было как будто в реальном времени. А то ввожу в поиск и пока список сформируется проходит порядка минуты
а сколько записей в базе? какой сервер?
*

zheev

  • Захожу иногда
  • 98
  • 0 / 0
Re: Написание Компонента
« Ответ #72 : 01.09.2016, 17:05:55 »
а сколько записей в базе? какой сервер?

Записей 52. У меня хостинг. А можно ещё вопрос)) мне нужно получить один раз данные, грубо скажем имя и фамилия. И везде приходится использовать foreach($this->data as dt); а можно как нибудь без foreach? Спасибо большое)))
« Последнее редактирование: 01.09.2016, 17:22:42 от zheev »
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Re: Написание Компонента
« Ответ #73 : 01.09.2016, 17:30:48 »
если записей 52 то все должно летать!
а вторую часть вопроса я не понял..
*

zheev

  • Захожу иногда
  • 98
  • 0 / 0
Re: Написание Компонента
« Ответ #74 : 01.09.2016, 17:49:32 »
если записей 52 то все должно летать!
а вторую часть вопроса я не понял..
Вывожу из бд имя. И фамилию. Получаю массив и постоянно приходится получать данные из массивов через foreach. А можно как нибудь не черезь foreach?
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Re: Написание Компонента
« Ответ #75 : 01.09.2016, 17:54:05 »
Вывожу из бд имя. И фамилию. Получаю массив и постоянно приходится получать данные из массивов через foreach. А можно как нибудь не черезь foreach?
Эмм, ну обход по массиву всегда через итерации, можно через for ещё. Без обхода только напрямую обращаться через индекс массива. Или имеется ввиду получение конкретной записи, а не вывод нескольких?
*

zheev

  • Захожу иногда
  • 98
  • 0 / 0
Re: Написание Компонента
« Ответ #76 : 01.09.2016, 17:59:08 »
Эмм, ну обход по массиву всегда через итерации, можно через for ещё. Без обхода только напрямую обращаться через индекс массива. Или имеется ввиду получение конкретной записи, а не вывод нескольких?
Я пытался напрямую через $this->data->name правда не пробовал $this->data['name']
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Re: Написание Компонента
« Ответ #77 : 01.09.2016, 18:01:27 »
$this->data[0]->name скорее всего, так как у Вас массив объектов.
*

zheev

  • Захожу иногда
  • 98
  • 0 / 0
Re: Написание Компонента
« Ответ #78 : 01.09.2016, 18:02:59 »
$this->data[0]->name скорее всего, так как у Вас массив объектов.
Спасибо Вам большое)
*

zheev

  • Захожу иногда
  • 98
  • 0 / 0
Re: Написание Компонента
« Ответ #79 : 02.09.2016, 10:04:32 »
У меня ещё одна беда(((( >:( При выводе записей из БД, почему то некоторые дублируются, напрмер.
Спойлер
[свернуть]
*

b2z

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

zheev

  • Захожу иногда
  • 98
  • 0 / 0
Re: Написание Компонента
« Ответ #81 : 02.09.2016, 10:19:20 »
А где дубли? Недели же разные.
Упс забыл дни расставить( Прошу прощения спасибо
*

zheev

  • Захожу иногда
  • 98
  • 0 / 0
Re: Написание Компонента
« Ответ #82 : 02.09.2016, 10:22:28 »
А где дубли? Недели же разные.
могу ли в представление вызвать функцию?) Хочу число в день преобразовать?) Или лучше таблицу создать с днями и просто join ить?)
« Последнее редактирование: 02.09.2016, 10:27:48 от zheev »
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Re: Написание Компонента
« Ответ #83 : 02.09.2016, 10:30:34 »
могу ли в представление вызвать функцию?) Хочу число в день преобразовать?) Или лучше таблицу создать с днями и просто join ить?)
Создайте помощника вида и из него дергайте что вам нужно!
*

zheev

  • Захожу иногда
  • 98
  • 0 / 0
Re: Написание Компонента
« Ответ #84 : 02.09.2016, 10:34:02 »
Создайте помощника вида и из него дергайте что вам нужно!

прошу прощения за туповатый вопрос, а как его создать?
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Re: Написание Компонента
« Ответ #85 : 02.09.2016, 11:08:08 »
Здесь есть пример создания помощника вида (в примере он используемого для создания подменю в админке, вы же можете его использовать для абсолютно любых нужд)
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Re: Написание Компонента
« Ответ #86 : 02.09.2016, 12:49:09 »
Здесь есть пример создания помощника вида (в примере он используемого для создания подменю в админке, вы же можете его использовать для абсолютно любых нужд)
В представлении хелперы можно подключать через loadHelper.
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Re: Написание Компонента
« Ответ #87 : 02.09.2016, 14:08:17 »
В представлении хелперы можно подключать через loadHelper.
А лучше через банальный инклуд в точке входа в компонент ;D
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Re: Написание Компонента
« Ответ #88 : 02.09.2016, 14:14:57 »
А лучше через банальный инклуд в точке входа в компонент ;D
Ну тогда уж через:

Код: php-brief
JLoader::discover('IvgpuHelper', JPATH_COMPONENT . '/helpers');

И всем классам помощникам задавать префикс IvgpuHelper.
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Re: Написание Компонента
« Ответ #89 : 02.09.2016, 14:15:58 »
Ну тогда уж через:

Код: php-brief
JLoader::discover('IvgpuHelper', JPATH_COMPONENT . '/helpers');

И всем классам помощникам задавать префикс IvgpuHelper.

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