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

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Переписывая модули для JComments под Joomla 1.7 столкнулся с некоторой странностью. Может быть я неправ, тогда расскажите в чем.

Итак, имеем некий модуль, у него в манифесте в элементе description указываем некую константу:

Код: xml
<description>MOD_JCOMMENTS_LATEST_XML_DESCRIPTION</description>

Вроде бы все нормально? В языковых файлах en-GB.mod_jcomments_latest.ini и en-GB.mod_jcomments_latest.sys.ini прописываем значение для этой константы:
Код: ini
MOD_JCOMMENTS_LATEST_XML_DESCRIPTION="This Module shows a list of latest comments."

Устанавливаем модуль. И вот когда установка модуля успешно завершена (о чем нам мастер установки пишет), ниже вместо описания установленного модуля мы видим именно эту константу. Почему?

Если вместо константы написать нормальный текст - он покажется и будет читаем. Но тогда - прощай локализация. При этом, если мы зайдем в параметры модуля в административной панели - там описание будет локализованным - все отлично.

Стало интересно, почему такая фигня происходит, полез в /libraries/joomla/installer/adapters/module.php:
Код: php
		// Get the component description
$description = (string)$this->manifest->description;
if ($description) {
$this->parent->set('message', JText::_($description));
}

Вроде бы все нормально - содержимое элемента description прогоняют через JText. А вот и нет. Языковой-то файл модуля в этот момент еще не подгружен, и, как следствие, имеем константу, вместо адекватного описания.

Или же все совсем не так и я где-то что-то упустил?
*

Виталик

  • Завсегдатай
  • 1244
  • 130 / 0
*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Re: Локализация описания модуля Joomla 1.7
« Ответ #2 : 25.10.2011, 23:32:27 »
Прикрепил пример модуля, который ставится, но при установке описание не локализованное. Походу надо делать патч для 1.7 и прикреплять в баг-треккер.

[вложение удалено Администратором]
*

SmokerMan

  • Гуру
  • 5290
  • 720 / 26
Re: Локализация описания модуля Joomla 1.7
« Ответ #3 : 26.10.2011, 00:18:58 »
а это старый баг еще с 1.6.
Почему-то файлы локализации не срабатывают после установки.
Если потом поверх ставить "upgrade", т.е. когда файлы уже есть, то все переводиться корректно.
*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Re: Локализация описания модуля Joomla 1.7
« Ответ #4 : 26.10.2011, 00:53:36 »
Что интересно, при удалении модуля, все нормально, ибо:

Код: php
		// Attempt to load the language file; might have uninstall strings
$this->loadLanguage(($row->client_id ? JPATH_ADMINISTRATOR : JPATH_SITE). '/modules/'.$element);

Странные они...

А вот еще один прикол, все с той же локализацией, но уже с элементом name. Если прописываем так:
Код: xml
<name>JComments Latest</name>
то, естественно, имя не локализуется, в списке модулей в названии видим "JComments Latest", в колонке тип - тоже "JComments Latest". Делаем ход конем, меняем в манифесте на:
Код: xml
<name>mod_jcomments_latest</name>
Естественно, в языковых файлах такая константа у нас есть. Устанавливаем. Теперь в колонке с названием модуля имеем вообще не информативное 'mod_jcomments_latest', зато в колонке Тип - 'JComments Latest' (или его локализованное значение).

Вот казалось бы, второй путь правильнее - ну у встроенных модулей типы переведены, все красиво. Но с заголовком вновь установленного модуля получается же полная фигня! Хотя понятно, что локализованное значение там тоже не подходит - ведь могли ставить в административной панели с русским языком, а сайт сам на английском и т.д. Но от этого легче никак не становится... Буду завтра пытаться убедить JM, что это неприятность и надо править.
*

SDKiller

  • Живу я здесь
  • 2705
  • 329 / 5
  • ...ergo sum
Re: Локализация описания модуля Joomla 1.7
« Ответ #5 : 28.10.2011, 15:31:53 »
..._XML_DESCRIPTION...

Заработало, по крайней мере на 1.7.1 - 1.7.2 )))

Почитал ещё раз:

Цитировать
1. It is used for installation process translations, when a folder language is included in the pack.
pack/language/en-gb/en-gb.extension.ini
pack/language/en-gb/en-gb.extension.sys.ini
In this case, the <description>COM_MYCOMPONENT_XML_DESCRIPTION</description> used in the sys.ini will display on installing/updating the extension.

Сделал:

Код
	<languages folder="language">
<language tag="ru-RU">ru-RU/ru-RU.plg_search_smfaq.ini</language>
<language tag="ru-RU">ru-RU/ru-RU.plg_search_smfaq.sys.ini</language>
<language tag="en-GB">en-GB/en-GB.plg_search_smfaq.ini</language>
<language tag="en-GB">en-GB/en-GB.plg_search_smfaq.sys.ini</language>
</languages>

Аналогичная вещь с неразложенными по папкам языков файлами и файлами не в папке, а также с наименованием папки languages не работала.
« Последнее редактирование: 28.10.2011, 15:43:01 от SDKiller »
*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Re: Локализация описания модуля Joomla 1.7
« Ответ #6 : 28.10.2011, 16:10:19 »
Аналогичная вещь с неразложенными по папкам языков файлами и файлами не в папке, а также с наименованием папки languages не работала.
Слушай, ну они реально больные... Специально потратил еще 15 минут времени, посмотрел код, но явной причины почему оно так может работать не вижу. У JInstallerModule есть метод loadLanguages который по идее вызывается из функции install у JInstaller... Судя по коду - вроде бы все прилично.
*

SmokerMan

  • Гуру
  • 5290
  • 720 / 26
Re: Локализация описания модуля Joomla 1.7
« Ответ #7 : 02.11.2011, 12:38:52 »
Аналогичная вещь с неразложенными по папкам языков файлами и файлами не в папке, а также с наименованием папки
В общем решил разобраться почему так происходит. На примере плагина, в модулях и компонентах, думаю, тоже самое будет.
До установки расширения подключается локализации из временной директории.
Цитировать
         if ($name)
         {
            $extension = "plg_${group}_${name}";
            $lang = JFactory::getLanguage();
            $source = $path ? $path : JPATH_PLUGINS . "/$group/$name";
            $folder = (string)$element->attributes()->folder;
            if ($folder && file_exists("$path/$folder"))
            {
               $source = "$path/$folder";
            }
            
            $lang->load($extension . '.sys', $source, null, false, false)
            ||   $lang->load($extension . '.sys', JPATH_ADMINISTRATOR, null, false, false)
            ||   $lang->load($extension . '.sys', $source, $lang->getDefault(), false, false)
            ||   $lang->load($extension . '.sys', JPATH_ADMINISTRATOR, $lang->getDefault(), false, false);
         }
В объекте JLanguage устанавливается дефолтный путь для файлов локализации.
Цитировать
   public static function getLanguagePath($basePath = JPATH_BASE, $language = null)
   {
      $dir = "$basePath/language";

      if (!empty($language)) {
         $dir .= "/$language";
      }

      return $dir;
   }
Следовательно директория для файлов локализации должна называться "language" и никак иначе, так же в ней файлы должны быть разнесены по соответствующим директориям. Т.е. для инглиш должны быть  "language/en-GB" и т.д.
ХЗ может они так и задумывали. Только не написали об этом))
« Последнее редактирование: 02.11.2011, 12:42:44 от SmokerMan »
*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Re: Локализация описания модуля Joomla 1.7
« Ответ #8 : 02.11.2011, 12:47:15 »
Т.е. для инглиш должны быть  "language/en-GB" и т.д.
Слушай, может быть я торможу сильно, но почему? Ведь они считывают путь из атрибута:

Код: php
$folder = (string)$element->attributes()->folder;

По идее они должны грузить локализацию из:
Код: php
  $source = "$path/$folder";

А это и есть временная папка + путь из атрибута folder у элемента languages... Или я туплю?
*

SmokerMan

  • Гуру
  • 5290
  • 720 / 26
Re: Локализация описания модуля Joomla 1.7
« Ответ #9 : 02.11.2011, 12:53:36 »
$element - это обеъкт XML ($element = $this->manifest->files) т.е. директория расширения, а не локализации.
Т.е. если брать путь от туда до будет так.
$element = $this->manifest->languages->attributes()->folder;
при этом при подключении языка к нему будет добавляться еще директория "language"
в JLanguage
Цитировать
$dir = "$basePath/language";

Т.е. по идее все правильно там.


*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Re: Локализация описания модуля Joomla 1.7
« Ответ #10 : 02.11.2011, 13:02:39 »
Хм, логично. И кто они после всего этого? Неужели так сложно сделать по-человечески?
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Документация по созданию модуля для Joomla 2.5 и Joomla 3.x

Автор b2z

Ответов: 1
Просмотров: 2284
Последний ответ 29.07.2015, 09:40:30
от b2z
JPluginHelper::importPlugin('content') в Joomla 1.7

Автор Dutch

Ответов: 2
Просмотров: 4750
Последний ответ 30.03.2015, 14:22:51
от twins717
Документация по созданию компонента для Joomla 2.5

Автор Sulpher

Ответов: 74
Просмотров: 57240
Последний ответ 17.11.2014, 13:43:07
от limon142
Документация по созданию плагина для Joomla 2.5 и Joomla 3.x

Автор b2z

Ответов: 8
Просмотров: 14277
Последний ответ 27.08.2014, 09:52:02
от skinny
Как в XML Manifest files модуля вытащить категории и далее использовать в запросе для вывода?

Автор mainet

Ответов: 6
Просмотров: 2195
Последний ответ 19.02.2014, 23:23:59
от mainet