Новости Joomla

Joomla 6 нуждается в вашей помощи с тестированием.Вышел недавно релиз Joomla 6 alpha1

Joomla 6 нуждается в вашей помощи с тестированием.Вышел недавно релиз Joomla 6 alpha1

👩‍💻 Joomla 6 нуждается в вашей помощи с тестированием.Вышел недавно релиз Joomla 6 alpha1. Это релиз, в который включены уже проверенные изменения, но ещё очень многие исправления и улучшения ждут своей очереди. Joomla следит за качеством и безопасностью своего кода и каждое изменение должно быть успешно протестировано как минимум ещё двумя участниками сообщества. Разработка Joomla ведётся на платформе GitHub.Филипп Уолтон (Philip Walton) - один из разработчиков, кто активно вносит свой вклад в ядро Joomla. Он уже несколько месяцев посвящает свои послеполуденные часы пятницы работе с Joomla и предлагает присоединиться к нему. 📆 Пятница, 30 мая 2025, с 15:00 до 17:00 по UTC (Лондон) - с 18:00 до 20:00 по Москве.В чате Google Meet Филипп готов помочь с тестированием тем, кто будет делать это в первый раз. А так же он подготовил список лёгких Pull Request, которые можно протестировать довольно быстро. Чем больше тестов будет проведено сейчас, тем меньше ошибок вылезет потом. На данный момент 148 (уже 147 на момент написания заметки) PR на GitHub Joomla ждут тестирования.👩‍💻 Open to all. All together.Также вам поможет сделать первые шаги это видео.GitHub JoomlaДа, это вечер пятницы. Но тестирование занимает порой минут 15, а доброе дело сделано. Просто убедитесь, что разработчик чего-то не пропустил и всё работает как ожидается.#joomla #joomla6 #community

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

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

  • Легенда
  • 11028
  • 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

  • Легенда
  • 11028
  • 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 на заказ. Становитесь в очередь.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться