Новости Joomla

Перевод и публикация интервью на греческом портале Joomla Утро, просматриваешь входящие письма и...

Перевод и публикация интервью на греческом портале Joomla 🇬🇷Утро, просматриваешь входящие письма и изучаешь новости и внезапно обнаруживаешь, что инициатива, которую ты начал, подхватывается другими людьми. 🎉Недавно я взял интервью у Билла (Василиса) Коциаса - руководителя студии, читающего лекции в университете и популяризатора Joomla в Греции.Это интервью из журнала NorrNext, в оригинале на английском, теперь доступно на греческом языке и опубликовано на портале joomla.gr. 🎉До чего же приятно… 😇😊 Работа замечена и с ней посчитали необходимым ознакомить аудиторию страны, в которой Билл читает лекции. И это солнечная Греция - страна, страна, с которой Россию многое связывает. 🇬🇷🇷🇺🕊Смотрю на греческий алфавит и тут же рисуются картины белоснежных зданий в окружении винограда и амфор, красивых женщин в сандалиях и мужественных воинов, охраняющих покой полисов, в которых ученые мужи работают над трудами, позже вошедшими в века. Красиво! 😇Но вернемся к интервью. Из него вы узнаете, что в Греции доля Joomla среди CMS занимает порядка 30-40%. По моему мнению это - самый высокий показатель во всем мире. Также чтение лекций о Joomla в университетах позволит привести новых пользователей и к тому же молодое поколение. Ну и огромное кол-во сертификтатов Билла на стене (смотрим фото в статье) свидетельствует о том, что Joomla может применяться как профессиональный инструмент. 🇬🇷 Интервью на греческом портале (joomla.gr)🌐 Оригинальное интервью (на английском)Что насчет перевода на русский? Увы, времени всего 24 часа в сутках. Я продолжаю готовить новые интервью. Возможно, после завершения выпуска журнала, рассмотрю перевод некоторых интервью на русский. Но я об этом не говорил. 😊 В блоге @eugenius_blog публикую анонсы интересных событий из мира Joomla, интервью, уроки и полезные советы, а также делюсь мыслями:, связанными с разработкой и веб-дизайном.

Обработка HTTP ответа в Joomla 6+. Изменения по сравнению с Joomla 3 - Joomla 5

👩‍💻 Обработка HTTP ответа в Joomla 6+. Изменения по сравнению с Joomla 3 - Joomla 5.В Joomla для выполнения внешних запросов из PHP к сторонним API используется класс Joomla\Http\Http напрямую или же Joomla\Http\HttpFactory, который возвращает для работы преднастроенный по умолчанию класс Http. О работе с HTTP-запросами подробно рассказывалось в статье 2021 года Создание внешних запросов с использованием HttpFactory (Joomla). Некоторые изменения касаются работы с ответами на запросы. Например, наш запрос:
use Joomla\Http\HttpFactory;$http = (new HttpFactory)->getHttp($options, ['curl', 'stream']);$response = $http->get('https://any-url.ru/api/any/endpoint');
Раньше можно было получить код ответа или тело ответа как свойство $response - $response->code или $response->body. Однако, Joomla, начиная с Joomla 4 во многом переходит на стандарты PSR. В частности для работы с HTTP-ответами - на PSR-7. Также хорошая статья на Хабре о PSR-7: PSR-7 в примерах.
Прямое обращение к свойствам code, headers, body объявлено устаревшим в Joomla 6.0.0 и обещают удалить в Joomla 7.0.0.
Вместо этого нужно работать с HTTP-ответом по стандартам PSR-7. Код ответа.Было $response->code. Стало $response->getStatusCode().Заголовки ответа.Было $response->headers. Стало $response->getHeaders().Тело ответа.Было $response->body. Стало (string)$response->getContents().В тело ответа теперь приходит не строка, а поток - объект класса Laminas\Diactoros\Stream. Поэтому его нужно привести к строке (если это json, к примеру): (string)$response->getContents(). Чаще всего в коде Joomla встречается именно такой вариант. Однако, есть и вариант с перемещением указателя чтения на начало потока:
// Получили ответ в виде потока$stream = $response->getBody();// "перемотали" на начало$stream->rewind();// Получили строковый ответ$json = $stream->getContents();
В итоге результат одинаковый.@joomlafeed#joomla #разработка #php

Quantum Manager нужен сообществу, а автору нужна ваша поддержка!

Quantum Manager нужен сообществу, а автору нужна ваша поддержка!Файловый менеджер Quantum — одно...

Файловый менеджер Quantum — одно из самых популярных решений для Joomla, созданное разработчиком из сообщества Joomla, Дмитрием Цымбалом (@tsymbalmitia). Он делает Quantum удобным, безопасным и современным, обновляет его, исправляет уязвимости и отвечает пользователям — всё это в свободное от основной работы время.

Теперь настал момент для следующего шага: развитие проекта требует больше времени и ресурсов.

0 Пользователей и 1 Гость просматривают эту тему.
  • 20 Ответов
  • 12929 Просмотров
*

MetaSpirit

  • Завсегдатай
  • 1370
  • 106 / 0
  • R.A.S.Lab[.org]
Т.к. разработчики не позаботились о возможности создания плагинов для этого компонента. На досуге реализовал такую возможность.
Для обработки доступны следующие события:
* onAfterItemSave
Код: php
function onAfterItemSave(&$item, $isNew)
        {
                global $mainframe;
                    // Code
 return true;
* onAfterItemRemove
Код: php
function onAfterItemRemove( &$item)
        {
                global $mainframe;
                      // Code
                return true;
}
В файле установки обязательно группу указываем zoo - group="zoo".

Для того, чтобы плагины работали немного нужно залезть в ядро компонента. Сложного ничего нет, только и требуется то скопировать и вставить.

Для работы события onAfterItemSave необходимо добавить следующий код в файлы  item.php (/site/administrator/components/com_zoo/controllers/) и submission.php (/site/components/com_zoo/controllers/)  в функцию save() перед  $this->setRedirect($link, $msg):
Код: php
 
    JPluginHelper::importPlugin('zoo');
    $dispatcher =& JDispatcher::getInstance();
    if ($cid || (int) $this->item->id) {
        $isNew = '0';
      } else {
         $isNew = '1';
      }
    $dispatcher->trigger( 'onAfterItemSave', array(&$item, $isNew) );
Для работы события оnAfterItemRemove необходимо добавить следующий код в файлы  item.php (/site/administrator/components/com_zoo/controllers/) и submission.php (/site/components/com_zoo/controllers/)  в функцию remove(). Тут посложнее, находим
Код: php
// delete items
foreach ($cid as $id) {
  $table->delete($table->get($id));
}
Внутрь foreach, перед $table->delete($table->get($id)) вставляем - $item = $table->get($id), а после $table->delete($table->get($id)) - код ниже, а для submission.php - только вставляем ниже приведенный код после $table->delete($item) :
Код: php
JPluginHelper::importPlugin('zoo');
$dispatcher =& JDispatcher::getInstance();    
$dispatcher->trigger( 'onAfterItemRemove', array(&$item) );

На этом все. Оригинал статьи можете почитать на моем сайте, там же можете скачать первую пару плагинов для Yootheme Zoo, которые написаны по данной методике: плагин для пинга (думаю, будет полезен всем) и плагин для публикации в ленте активности JomSocial.
R.A.S.Lab[.org]: ZOOvirtue - корзина для ZOO, Яндекс.Карты для ZOO, ItemPanes - табы для ZOO, ZOOlendar - календарь для ZOO  и др.
Создание расширений для YOOtheme ZOO на заказ. Становитесь в очередь.
*

voland

  • Легенда
  • 11026
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
То есть это все таки хак?
Кроме того, зу сейчас понимает контентные плагины, этого недостаточно?
*

MetaSpirit

  • Завсегдатай
  • 1370
  • 106 / 0
  • R.A.S.Lab[.org]
То есть это все таки хак?
Хак только для того, чтобы реализовать вызов плагина. Легче один раз сделать в ядре вызов, чем каждый раз лезть в компонент и редактировать под свои потребности.
Цитировать
Кроме того, зу сейчас понимает контентные плагины, этого недостаточно?
Этого недостаточно. Напр., для меня нужен был момент сохранения итема, а контент-плагин только текст обрабатывает.
R.A.S.Lab[.org]: ZOOvirtue - корзина для ZOO, Яндекс.Карты для ZOO, ItemPanes - табы для ZOO, ZOOlendar - календарь для ZOO  и др.
Создание расширений для YOOtheme ZOO на заказ. Становитесь в очередь.
*

MetaSpirit

  • Завсегдатай
  • 1370
  • 106 / 0
  • R.A.S.Lab[.org]
В Zoo 2.4 реализовали систему событий. Уже и хак не требуется. Кто-то пробовал разобратся, т.к. документации 0?
R.A.S.Lab[.org]: ZOOvirtue - корзина для ZOO, Яндекс.Карты для ZOO, ItemPanes - табы для ZOO, ZOOlendar - календарь для ZOO  и др.
Создание расширений для YOOtheme ZOO на заказ. Становитесь в очередь.
*

voland

  • Легенда
  • 11026
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
*

MetaSpirit

  • Завсегдатай
  • 1370
  • 106 / 0
  • R.A.S.Lab[.org]
И так продолжаем тему.
Как создать плагин для Zoo 2.4.x?
Плагин для данного компонента является системным, поэтому пишем как обычный системный плагин.
Основная функция плагина - onAfterInitialise()
в которой подключаем конфигурацию компонента
Код: php
// load ZOO config
require_once(JPATH_ADMINISTRATOR.'/components/com_zoo/config.php');
Создаем экземпляр компонента
Код: php
// Get the ZOO App instance
$zoo = App::getInstance('zoo');
Регистрируем и присоединяем обработчик событий
Код: php
// register event
$zoo->event->dispatcher->connect('item:saved', array('plgSystemZooevent', 'itemSaved'));
Создаем дополнительную функцию, которая будет обрабатывать событие
Код: php
function itemSaved($event) {
      $item = $event->getSubject();
      $new = $event['new'];

      // do whatever you'd like to do
}
На этом создание плагина закончено.

Посмотреть какие события для Zoo реализованы и какие параметры принимаются и возращаются можно посмотреть в administrator/components/com_zoo/config.php и  administrator/components/com_zoo/events/
R.A.S.Lab[.org]: ZOOvirtue - корзина для ZOO, Яндекс.Карты для ZOO, ItemPanes - табы для ZOO, ZOOlendar - календарь для ZOO  и др.
Создание расширений для YOOtheme ZOO на заказ. Становитесь в очередь.
*

topos

  • Захожу иногда
  • 78
  • 10 / 0
у кого нить получилось написать плагин для 2.4 используя события?
*

topos

  • Захожу иногда
  • 78
  • 10 / 0
подскажите как получить в плагине значение элемента по имени ?
*

topos

  • Захожу иногда
  • 78
  • 10 / 0
Есть значение поля elements

Код
<?xml version="1.0" encoding="utf-8"?>
<elements>

<myelement identifier="0bd05834-bda4-4d47-8a7d-f15e2ffc3e8b">
  <value1><![CDATA[011115]]></value1>
  <value2><![CDATA[100]]></value2>
</myelement>
</elements>

Как получить значения value1 и value2?
*

MetaSpirit

  • Завсегдатай
  • 1370
  • 106 / 0
  • R.A.S.Lab[.org]
Как получить значения value1 и value2?
Только методом парсинга XML файла. Можно попробовать использовать simple XML.
R.A.S.Lab[.org]: ZOOvirtue - корзина для ZOO, Яндекс.Карты для ZOO, ItemPanes - табы для ZOO, ZOOlendar - календарь для ZOO  и др.
Создание расширений для YOOtheme ZOO на заказ. Становитесь в очередь.
*

topos

  • Захожу иногда
  • 78
  • 10 / 0
Код
$xml = $item->elements;
$xml_arr = simplexml_load_string($xml);
$value1 = $xml_arr->myelement->value1;
$value2 = $xml_arr->myelement->value2;
:)
*

MetaSpirit

  • Завсегдатай
  • 1370
  • 106 / 0
  • R.A.S.Lab[.org]
Нашел баг в процессе написания плагинов.
Суть в том, что плагины являются системными и работают не только на сайте, а и в админке тоже.
Ну так вот при использовании в плагине функции рендеринга:
Код: php
$renderer = $this->app->renderer->create('item')->addPath(array($this->app->path->path('component.site:'), $this->app->path->path('plugins:plugin/zooplugin/')));
echo $renderer->render('item.default', array('item' => $item));
и если где-то в шаблоне для данного плагина выводится ссылка (напр., ссылка привязана к картинке), то при срабатывании плагина в админке возникает такая ошибка - Class 'JSite' not found in /****/***/public_html/administrator/components/com_zoo/helpers/route.php on line 268. (JSite::getMenu();)
Если сделать проверку места вызова и вместо "component.site" в админке использовать "component.administration" вылезет другая - Renderer Layout "element.default" not found. (File: /administrator/components/com_zoo/classes/renderer/item.php, Line: 131).
Т.е. пока разработчики что-то не сделать с существующей привязкой ссылок к меню и если нужно использовать данный код в плагине то возможными путями решения проблемы являются:
 - отказ от использования ссылки на итем
 - или если последнее нежелательно - делать проверку, и только когда плагин вызывается во фронт-энде рендерить итем.
Вот такие получаются пироги.
R.A.S.Lab[.org]: ZOOvirtue - корзина для ZOO, Яндекс.Карты для ZOO, ItemPanes - табы для ZOO, ZOOlendar - календарь для ZOO  и др.
Создание расширений для YOOtheme ZOO на заказ. Становитесь в очередь.
*

topos

  • Захожу иногда
  • 78
  • 10 / 0
Работаем с элементами в плагине.
У нас есть функция которая срабатывает при сохранении item
Код
function itemSaved($event) {

        $item = $event->getSubject();

1) Получаем все  типы элементов которые есть в item:

Допустим у нас есть елементы link, download, text

Код
foreach ($item->getElements() as $elements)
{
echo $elements->getElementType().',';

}

Получим
Код
link,text,download,

2) Получаем нужный нам элемент по названию
      
Код
		foreach ($item->getElements() as $element)
{
if ($element->getElementType() == "myelement" ){
$myelement = $item->getElement($element->identifier);
  }
}

Далее мы можем работать с этим элементом как с обьектом. Тоесть мы можем обратится к любой своей функции в этом элементе. Если у нас есть функция в элементе "myelement" которая по запросу возвращает нам значение текстового поля "text"

Код
	public function _getText(){

return  $this->_data->get('text');

}

то мы можем, в нашем плагине, получить это значение

Код
$text = $myelement->_getText()
*

vaa20003

  • Новичок
  • 7
  • 0 / 0
Попытался использовать плагин пинга.
Вот что вылазит:
PingService: http://ping.blogs.yandex.ru/RPC2 - <-1> - HTTP/1.0 400 Bad Request
PingService: http://api.my.yahoo.com/RPC2 - <-1> - HTTP/1.0 303 See Other
Я так понимаю, что это ошибки.
*

MetaSpirit

  • Завсегдатай
  • 1370
  • 106 / 0
  • R.A.S.Lab[.org]
Попытался использовать плагин пинга.
Вот что вылазит:
PingService: http://ping.blogs.yandex.ru/RPC2 - <-1> - HTTP/1.0 400 Bad Request
PingService: http://api.my.yahoo.com/RPC2 - <-1> - HTTP/1.0 303 See Other
Я так понимаю, что это ошибки.
тут нужно подбирать, какие сервисы для пинга сработают. Аналогичное наблюдается и оригинальном плагине blogping.
R.A.S.Lab[.org]: ZOOvirtue - корзина для ZOO, Яндекс.Карты для ZOO, ItemPanes - табы для ZOO, ZOOlendar - календарь для ZOO  и др.
Создание расширений для YOOtheme ZOO на заказ. Становитесь в очередь.
*

vaa20003

  • Новичок
  • 7
  • 0 / 0
Спасибо. Сам уже разобрался. В нете куча списков сервисов, которые не работают, или работают с оговорками как например http://ping.blogs.yandex.ru/RPC2   
*

playthetechno

  • Осваиваюсь на форуме
  • 36
  • 0 / 0
Подскажите пожалуйста!У меня есть компонент поиска (jxfinder), к которому ставишь плагин для ZOO и он работает. Ситуация такая!
С Zoo 2.0 все нормально, ставлю версию 2.4 (та с которой мне было бы удобно работать) компонент поиска пишет
An Error Has Occurred

Fatal error: Class 'YTable' not found in C:\AppServ\www\sputnik\plugins\finder\zoo2_items.php on line 342


в этой строчке находится:
$zooItem   = YTable::getInstance('item')->get($item->id);

Что делать? Ютемовцы наверно изменили что-то, и плагин теперь не работает :(
К тому же, работа над плагином вроде прекращена. не знаю что и делать :( помогите пожалуйста!
*

MetaSpirit

  • Завсегдатай
  • 1370
  • 106 / 0
  • R.A.S.Lab[.org]
Подскажите пожалуйста!У меня есть компонент поиска (jxfinder), к которому ставишь плагин для ZOO и он работает. Ситуация такая!
С Zoo 2.0 все нормально, ставлю версию 2.4 (та с которой мне было бы удобно работать) компонент поиска пишет
An Error Has Occurred

Fatal error: Class 'YTable' not found in C:\AppServ\www\sputnik\plugins\finder\zoo2_items.php on line 342


в этой строчке находится:
$zooItem   = YTable::getInstance('item')->get($item->id);

Что делать? Ютемовцы наверно изменили что-то, и плагин теперь не работает :(
К тому же, работа над плагином вроде прекращена. не знаю что и делать :( помогите пожалуйста!
По идее под 2.5 должно быть:
$zooItem   = $this->app->table->item->get($item->id);
но там еще вылезут баги
R.A.S.Lab[.org]: ZOOvirtue - корзина для ZOO, Яндекс.Карты для ZOO, ItemPanes - табы для ZOO, ZOOlendar - календарь для ZOO  и др.
Создание расширений для YOOtheme ZOO на заказ. Становитесь в очередь.
*

worstinme

  • Захожу иногда
  • 82
  • 10 / 0
  • hawkeye 57 lvl.
Привет. Хочу сделать плагин для zoo, который при сохранении материала дублировал бы данные элемента в специально созданную таблицу. Начал делать плагин по инструкции в этой теме и не пойму вообще как он работает, на данном этапе я просто хочу вывести к примеру

это

Код
foreach ($item->getElements() as $elements)
{
echo $elements->getElementType().',';

}

и собственно, что должно произойти? используется функция itemsave я так понимаю при сохранении материала должны вывестись имена элементов. но куда?) вобщем подскажите, вкратце, просто у меня при сохранении материала результат действия этой функции никуда не выводится ;)

ps: в настройках плагин включен, я просто взял плагин zooevents, который устанавливается вместе с ZOO разкомментировал все необходимые строки. ну и добавил функцию вывода элементов

psps. ну, кажется с базой плагин такие работает и функции нужного мне элемента выполняет корректно, а большего пока и не надо ;) но все еще интересно, куда именно выводятся результаты echo $elements->getElementType().',';    
« Последнее редактирование: 17.06.2012, 20:51:44 от worstinme »
*

alex_next

  • Захожу иногда
  • 137
  • 2 / 0
Ребят ...в планах попытаться наковырять или создать свой вариант рейтинга для zoo item-ов, суть в том что бы рейтинг высчитывался из колличества просмотров+шаров в соц сеть (при помощи кнопок соц сетей стандартных для zoo)+количества комментариев, подскажите с чего начать? Для реализации нужно создавать новое расширение для zoo или копать стоит в стандартном элементе рейтинга?
*

MetaSpirit

  • Завсегдатай
  • 1370
  • 106 / 0
  • R.A.S.Lab[.org]
подскажите с чего начать?
Для начала нарисуйте логику работы: что и откуда берется? как плюсуется? как выглядит? и т.д.
можно написать и новый, а можно и внести изменения в стандартный.
R.A.S.Lab[.org]: ZOOvirtue - корзина для ZOO, Яндекс.Карты для ZOO, ItemPanes - табы для ZOO, ZOOlendar - календарь для ZOO  и др.
Создание расширений для YOOtheme ZOO на заказ. Становитесь в очередь.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться