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

zeus07

  • Давно я тут
  • 723
  • 9 / 0
Здравствуйте!

Пишу модуль для вывода отзывов с сайта http://freelancehunt.com, использую их API. В настройках модуля есть вывод даты отзыва. Хочу сделать возможность выбора формата даты.

В модуле это реализовано вот так: http://clip2net.com/s/3uT31cZ. Суть в том,  что все даты отзывов лежат в массиве.
Вопрос: как делать выборку из массива, преобразовывать в нужный формат, и перезаписывать обратно в массив?

Подскажите пожалуйста.
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
Вопросом на вопрос
А пользовательский формат в приведенном скрине, что делает?
*

zeus07

  • Давно я тут
  • 723
  • 9 / 0
Это возможность пользователю прописать свой формат даты. По сути эти возможности из компонента Zoo (элемент date) уж очень понравилась эта возможность. Но вот как это в модуле сделать, пока не разберусь
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
если вы не будете использовать все значения массива то даты лучше преобразовывать перед выводом
в другом же случае foreach самый быстрый цикл в php
Код: php-brief
foreach($arr as &$value){
    $value['date'] = 'new date';
}
*

zeus07

  • Давно я тут
  • 723
  • 9 / 0
Наверное будет проще, если вы увидите кусок моего кода. Вот этот код отвечает за переключатель, который выводит дату:
Код
// Вывод времени отзыва 
$review_time = $params->get('review_time');
    if ($review_time == 1) {
    $rev_time_array = array();
    for ($i = 0; $i <= $reviews_count; $i++) {
        $rev_time = $json['reviews'][$i]['review_time'];
        // Добавляем в массив время отзывов
        $rev_time_array[] = $rev_time;
        // В массиве могут оказаться пустые значения, избавляемся от них
        $rev_time_array = array_diff($rev_time_array, $array_empty);
        }
    }

И вот у нас есть массив в таком формате:
Код
Array ( [0] => 2015-05-07T16:42:14+03:00 [1] => 2014-10-31T22:22:02+02:00 )

И мне бы хотелось, чтобы у пользователя была возможность выбрать нужный формат даты. В моём примере в массиве дата выводится в полном формате.
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
Код: php-brief
print_r(date_parse('2015-05-07T16:42:14+03:00'));
дальше из массива собирайте как вам нужно
или так
Код: php-brief
$date = date_create('2015-05-07T16:42:14+03:00');
echo date_format($date, "Y/m/d H:i:s");
*

zeus07

  • Давно я тут
  • 723
  • 9 / 0
Код: php-brief
print_r(date_parse('2015-05-07T16:42:14+03:00'));
дальше из массива собирайте как вам нужно

А как мне через date_parse взять элемент из массива именно?
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
Код: php-brief
foreach($json['reviews'] as &$review){
    if(empty($review['review_time'])) continue;
    $review['review_time'] = date_format(date_create($review['review_time']), "Y/m/d H:i:s"); //нужный формат здесь задаем
}
*

zeus07

  • Давно я тут
  • 723
  • 9 / 0
Ага, Спасибо. И последнюю строку уже можно изменять по условию как я понимаю
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
да
Код: php
$format = 'Y/m/d H:i:s';
foreach($json['reviews'] as &$review){
    if(empty($review['review_time'])) continue;
    $review['review_time'] = date_format(date_create($review['review_time']), $format);
}
*

zeus07

  • Давно я тут
  • 723
  • 9 / 0
Нет, наверное всё-таки немного не так.
Дело в том,  что у меня уже есть чистый массив $rev_time_array и мне надо из него брать дату, преобразовывать в нужном формате, и перезаписывать элемент массива
*

buyanov

  • Захожу иногда
  • 188
  • 29 / 1
  • Сайты 74
Привет, а даты приходят в таком формате из API?
Почему бы не использовать для всего этого колдовства с датами стандартные возможности Joomla например класс JDateTime и JText?
Создание сайтов, интернет-магазинов, оптимизация, продвижение, хостинг, безопасность, лечение от вирусов - мой сайт, телега, Хостинг
*

zeus07

  • Давно я тут
  • 723
  • 9 / 0
Привет, а даты приходят в таком формате из API?
Почему бы не использовать для всего этого колдовства с датами стандартные возможности Joomla например класс JDateTime и JText?

Привет. Да, вот я в сообщении указал, в каком виде у меня массив с датами получается. Спасибо, почитаю про JDateTime. В PHP пока что начинающий, поэтому не всё ещё понимаю)
*

buyanov

  • Захожу иногда
  • 188
  • 29 / 1
  • Сайты 74
Попробуйте так

JHtml::date(JFactory::getDate('2015-05-07T16:42:14+03:00'), JText::_('DATE_FORMAT_LC1'));

Форматы в русской локализации Joomla

DATE_FORMAT_LC="d.m.Y"
DATE_FORMAT_LC1="d.m.Y"
DATE_FORMAT_LC2="d.m.Y H:i"
DATE_FORMAT_LC3="d F Y"
DATE_FORMAT_LC4="d.m.Y"
DATE_FORMAT_JS1="d.m.y"

UPD а если хочется давать возможность пользователю задавать свой формат, то дату лучше хранить в юнкс формате
Создание сайтов, интернет-магазинов, оптимизация, продвижение, хостинг, безопасность, лечение от вирусов - мой сайт, телега, Хостинг
*

zeus07

  • Давно я тут
  • 723
  • 9 / 0
Вот в этой строке JHtml::date(JFactory::getDate('2015-05-07T16:42:14+03:00') мне нужно получается выбирать именно элемент массива.

Получается надо как-то так: JHtml::date(JFactory::getDate('$rev_time_array[$i]')?
*

buyanov

  • Захожу иногда
  • 188
  • 29 / 1
  • Сайты 74
Да JFactory::getDate первым аргументом принимает дату для преобразования, да и вообще много чего можно туда скормить даже например такое 'now +1 day' =)
Создание сайтов, интернет-магазинов, оптимизация, продвижение, хостинг, безопасность, лечение от вирусов - мой сайт, телега, Хостинг
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
А почему это
Код: php-brief
print_r(date_parse('2015-05-07T16:42:14+03:00'));
дальше из массива собирайте как вам нужно
или так
Код: php-brief
$date = date_create('2015-05-07T16:42:14+03:00');
echo date_format($date, "Y/m/d H:i:s");
вас не устраивает?
Не будь паразитом, сделай что-нибудь самостоятельно!
*

zeus07

  • Давно я тут
  • 723
  • 9 / 0
А почему этовас не устраивает?

Подскажите как это правильно применить к массиву?
*

buyanov

  • Захожу иногда
  • 188
  • 29 / 1
  • Сайты 74
echo date_format(date_create('2015-05-07T16:42:14+03:00'), "d.m.Y H:i");
echo date_format(date_create('2015-05-07T16:42:14'), "d.m.Y H:i");

Вернут одно и тоже!
Создание сайтов, интернет-магазинов, оптимизация, продвижение, хостинг, безопасность, лечение от вирусов - мой сайт, телега, Хостинг
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Подскажите как это правильно применить к массиву?
А вы хоть делали
Код: php-brief
print_r(date_parse('2015-05-07T16:42:14+03:00'));
?
Не будь паразитом, сделай что-нибудь самостоятельно!
*

buyanov

  • Захожу иногда
  • 188
  • 29 / 1
  • Сайты 74
Код: php
$user_format = 'd.m.Y H:i';
$date_arr = $params->get('date_arr', array());
if (!empty($date_arr))
{
foreach($date_arr as &$date)
{
$date = (string) JFactory::getDate($date)->format($user_format);
}
}
$params->set('date_arr', $date_arr);

Сразу обращу внимание что Joomla преобразует время в этой дате к гринвичу, чтобы учесть еще и время которое указано в настройках нужно ей сказать об этом добавив аргумент команде format

Код: php
$date = (string) JFactory::getDate($date)->format($user_format, true);
« Последнее редактирование: 28.02.2016, 22:16:14 от buyanov »
Создание сайтов, интернет-магазинов, оптимизация, продвижение, хостинг, безопасность, лечение от вирусов - мой сайт, телега, Хостинг
*

zeus07

  • Давно я тут
  • 723
  • 9 / 0
А вы хоть делали
Код: php-brief
print_r(date_parse('2015-05-07T16:42:14+03:00'));
?

Пробовал, выводит такой массив:
Код
Array ( [year] => 2015 [month] => 5 [day] => 7 [hour] => 16 [minute] => 42 [second] => 14 [fraction] => 0 [warning_count] => 0 [warnings] => Array ( ) [error_count] => 0 [errors] => Array ( ) [is_localtime] => 1 [zone_type] => 1 [zone] => -180 [is_dst] => ) 

Я читал об этой функции. НО! Ведь мне нужно сделать так, чтобы у меня в этой строке подставлялось содержимое элемента массива. Как это сделать? И как потом собрать дату так, как мне необходимо?
*

zeus07

  • Давно я тут
  • 723
  • 9 / 0
Код: php
$user_format = 'd.m.Y H:i';
$date_arr = $params->get('date_arr', array());
if (!empty($date_arr))
{
foreach($date_arr as &$date)
{
$date = (string) JFactory::getDate($date)->format($user_format);
}
}
$params->set('date_arr', $date_arr);

Сразу обращу внимание что Joomla преобразует время в этой дате к гринвичу, чтобы учесть еще и время которое указано в настройках нужно ей сказать об этом добавив аргумент команде format

Код: php
$date = (string) JFactory::getDate($date)->format($user_format, true);

А можно попросить немного прокомментировать код? А то не работал с объектом этим ни разу.
*

buyanov

  • Захожу иногда
  • 188
  • 29 / 1
  • Сайты 74
Код: php
// Это я чисто для примера взял формат типа от пользователя строчка
$user_format = 'd.m.Y H:i';
// $params это наверно объект класса \Joomla\Registry\Registry
// если это так то вытаскиваю параметры из моей выдуманной переменной date_arr (какая у тебя я не знаю)
// но предполагаю там найти массив, а если не нахожу то передаю значение по умолчанию array() можно 0
// передать что хочешь лишь бы проверить
$date_arr = $params->get('date_arr', array());
// проверяю есть ли в массиве данные
if (!empty($date_arr))
{
// из массива извлекаю элементы
// & - амперсанд - значит что я хочу чтобы PHP передавал значение по ссылке
// читаем тут http://php.net/manual/ru/language.references.pass.php
foreach($date_arr as &$date)
{
// JFactory - это фабрика объектов в Joomla она нам и вернет объект для преобразования даты
// format это метод объекта для преобразования даты
$date = (string) JFactory::getDate($date)->format($user_format);
}
}
// Преобразованный массив вернем на место
$params->set('date_arr', $date_arr);
Создание сайтов, интернет-магазинов, оптимизация, продвижение, хостинг, безопасность, лечение от вирусов - мой сайт, телега, Хостинг
*

zeus07

  • Давно я тут
  • 723
  • 9 / 0
Благодарю за комментарии, буду разбираться сейчас
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Я читал об этой функции.
Тогда сомневаюсь, что вы понимаете, для чего она нужна.
Код: php-brief
$date=date_parse('2015-05-07T16:42:14+03:00');
echo 'Год: '.$date['year'].'<br/>';
echo 'Месяц: '.$date['month'].'<br/>';
echo 'День: '.$date['day'].'<br/>';
Не будь паразитом, сделай что-нибудь самостоятельно!
*

zeus07

  • Давно я тут
  • 723
  • 9 / 0
Функция раскладывает дату на составляющие так сказать. И потом уже из них составляешь дату в том формате, в котором надо.
Это я понимаю.
Я не понимаю как мне использовать эту функцию таким образом, чтобы дата бралась из определённого элемента моего массива, то есть чтобы в этой строке я указал как-то так:
Код
$date=date_parse('$rev_time_array[$i]');
так можно сделать? Функция поймёт такую запись? Или это неверно?
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Код: php-brief
$date=date_parse($rev_time_array[$i]);
так можно сделать? Функция поймёт такую запись? Или это неверно?
Я бы на вашем месте уже 100 раз сам пробовал и делал выводы.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

zeus07

  • Давно я тут
  • 723
  • 9 / 0
Код: php-brief
$date=date_parse($rev_time_array[$i]);
Я бы на вашем месте уже 100 раз сам пробовал и делал выводы.


Такая запись не работает, массив выводится пустой.
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Значит, $rev_time_array[$i] у вас пустая или в неправильном формате. Сами ищите, где делали ошибку, модуль ваш или наш?
Не будь паразитом, сделай что-нибудь самостоятельно!
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться