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

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Есть pagination.php, в котором имеется:
Спойлер
[свернуть]

Результат выглядит так (активная выделена):
    В начало    Назад    1    2    3    4    …    6    7    8    9    Вперёд    В конец


А надо так:
    В начало    Назад    …    3    4    5    6    7    …    Вперёд    В конец


При этом за точками должна скрывать не одна страница (как имеется по факту), а 2 и более.

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

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Re: Требуется переделать пагинацию, J3
« Ответ #1 : 17.06.2014, 20:52:45 »
А еще подскажите пожалуйста, в какой функции выводятся ссылки пагинации внутри материалов
<ul class="pager pagenav">
    <li class="previous"></li>
    <li class="next"></li>
</ul>

upd
Нашел, выводится плагином "Контент - Навигация по страницам"
« Последнее редактирование: 17.06.2014, 22:16:00 от AlekVolsk »
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Re: Требуется переделать пагинацию, J3
« Ответ #2 : 17.06.2014, 21:23:48 »
Как можно в шаблоне переопределить \plugins\content\pagenavigation\tmpl\defaulp.php (вьюха плагина)?
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Re: Требуется переделать пагинацию, J3
« Ответ #3 : 17.06.2014, 22:11:41 »
Как можно в шаблоне переопределить \plugins\content\pagenavigation\tmpl\defaulp.php (вьюха плагина)?
тут два варианта, или переопределить вывод плагина в шаблоне материала, распарсив переменную либо написать системный плагин в котором переопределить класс контентного плагина.
интернет-блог: http://websiteprog.ru
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Re: Требуется переделать пагинацию, J3
« Ответ #4 : 17.06.2014, 22:13:36 »
тут два варианта, или переопределить вывод плагина в шаблоне материала, распарсив переменную либо написать системный плагин в котором переопределить класс контентного плагина.
Лучше первое =) да не знаю, как
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Re: Требуется переделать пагинацию, J3
« Ответ #5 : 17.06.2014, 22:22:52 »
Ну и все, вроде как в $this->item->pagination  содержится HTML?
Загружаешь его в DOMDocument как HTML и парсишь.
Можешь и регулярками конечно но не советую..

c simplexml ты вроде бы работал, там все похожее, в мануале php есть описание всех методов.
Если хочешь можешь сделать импорт в объект simplexml:
Код: php
$doc = new DOMDocument();
$doc->loadHTML($html);
$xml = simplexml_import_dom($doc);
« Последнее редактирование: 17.06.2014, 22:28:42 от zomby6888 »
интернет-блог: http://websiteprog.ru
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Re: Требуется переделать пагинацию, J3
« Ответ #6 : 17.06.2014, 22:28:34 »
1. Где это лучше сделать? в com_content/article/ ?
2. "Загружаешь его в DOMDocument как HTML и парсишь." - и близко себе данный процесс не представляю.
Неужели нельзя просто сделать копию файла и править соответственно? Вопрос в правильных путях.
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Re: Требуется переделать пагинацию, J3
« Ответ #7 : 17.06.2014, 22:31:35 »
1. Где это лучше сделать? в com_content/article/ ?
ну да там вроде в default.php она выводится $this->item->pagination переменная вроде так называется
Неужели нельзя просто сделать копию файла и править соответственно? Вопрос в правильных путях.
ну полюбому лучше переопределить в шаблоне

Ну тебе может необязательно ее парсить по тегам, может достаточно будет str_replace сделать какой нибудь, все зависит от того что ты будешь творить с этой пагинацией)
интернет-блог: http://websiteprog.ru
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Re: Требуется переделать пагинацию, J3
« Ответ #8 : 17.06.2014, 22:36:48 »
К ссылкам добавить класс, оригинал:
Код: php
<ul class="pager pagenav">
<?php if ($row->prev) : ?>
<li class="previous">
<a href="<?php echo $row->prev; ?>" rel="prev"><?php echo JText::_('JGLOBAL_LT'). $pnSpace . JText::_('JPREV'); ?></a>
</li>
<?php endif; ?>
<?php if ($row->next) : ?>
<li class="next">
<a href="<?php echo $row->next; ?>" rel="next"><?php echo JText::_('JNEXT'). $pnSpace . JText::_('JGLOBAL_GT'); ?></a>
</li>
<?php endif; ?>
</ul>

Желаю получить:
Код: php
<ul class="pager pagenav">
<?php if ($row->prev) : ?>
<li class="previous">
<a href="<?php echo $row->prev; ?>" rel="prev" class="btn btn-primary"><?php echo JText::_('JGLOBAL_LT'). $pnSpace . JText::_('JPREV'); ?></a>
</li>
<?php endif; ?>
<?php if ($row->next) : ?>
<li class="next">
<a href="<?php echo $row->next; ?>" rel="next" class="btn btn-primary"><?php echo JText::_('JNEXT'). $pnSpace . JText::_('JGLOBAL_GT'); ?></a>
</li>
<?php endif; ?>
</ul>
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Re: Требуется переделать пагинацию, J3
« Ответ #9 : 17.06.2014, 23:36:54 »
элементарно ватсон, ищешь в шаблоне article вывод переменной $this->item->pagination . там его может быть много так что методом комментирования определи какой именно тебе выводит пагинацию. заменяешь вывод на:
Код: php
$html = mb_convert_encoding($this->item->pagination, 'HTML-ENTITIES', "UTF-8");
$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
$nodes = $xpath->query('//ul/li/a');
foreach($nodes as $node)
    $node->setAttribute('class','btn btn-primary');
echo $doc->saveHTML();
интернет-блог: http://websiteprog.ru
*

Efanych

  • Глобальный модератор
  • 4683
  • 644 / 0
  • Меняю свою жизнь на 360°!
Re: Требуется переделать пагинацию, J3
« Ответ #10 : 17.06.2014, 23:58:02 »
Немного не доработано, но почти то, что нужно...
Цитировать
В начало    Назад    …    3    4    5    6    7    …    Вперёд    В конец
http://joomlaforum.ru/index.php/topic,291099.msg1442047.html#msg1442047
Плагин просто подменяет pagination.php, а изменения в нём уже смотрите...

P.S. Сорри, не обратил внимания, что вы этот плагин уже видели...
Создание сайтов, шаблонов, помощь в решении проблем.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Re: Требуется переделать пагинацию, J3
« Ответ #11 : 18.06.2014, 00:05:46 »
zomby6888, Премного благодарен! +
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Re: Требуется переделать пагинацию, J3
« Ответ #12 : 18.06.2014, 00:06:43 »
Efanych, я про него просто забыл! Спасибо!
А поиск на этом форуме ой как хромает...
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Re: Требуется переделать пагинацию, J3
« Ответ #13 : 18.06.2014, 00:17:12 »
Efanych, не отображается "В начало", "Назад", если на 1 странице. Пусть лучше выводятся как active и некликабельны. Где что посмотреть/подправить можно?
Глюк: если страница == 15, то где-то не закрывается div...

И все-таки это несколько не то: выводит
В начало    Назад    …    3    4    5    6    7    Вперёд    В конец
либо
В начало    Назад    3    4    5    6    7    …    Вперёд    В конец
либо, при постраничном прокручивании, когда клик на соседний номер, вообще без точек
« Последнее редактирование: 18.06.2014, 09:52:14 от AlekVolsk »
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Re: Требуется переделать пагинацию, J3
« Ответ #14 : 18.06.2014, 15:01:43 »
Дмитрий Рекун подсказал на joomlablog, как переопределить вьюху плагина:
/plugins/content/pagenavigation/tmpl/defaulp.php => /templates/my_template/htm/plg_content_pagenavigation/defaulp.php
Поставлю ему +, как только здесь отзовется ))

ТЗ по первому посту остается актуальным.
« Последнее редактирование: 18.06.2014, 15:11:13 от AlekVolsk »
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Re: Требуется переделать пагинацию, J3
« Ответ #15 : 21.06.2014, 12:55:29 »
ап, см.стартпост
*

Efanych

  • Глобальный модератор
  • 4683
  • 644 / 0
  • Меняю свою жизнь на 360°!
Re: Требуется переделать пагинацию, J3
« Ответ #16 : 21.06.2014, 16:15:32 »
Efanych, не отображается "В начало", "Назад", если на 1 странице. Пусть лучше выводятся как active и некликабельны. Где что посмотреть/подправить можно?
Глюк: если страница == 15, то где-то не закрывается div...

И все-таки это несколько не то: выводит
В начало    Назад    …    3    4    5    6    7    Вперёд    В конец
либо
В начало    Назад    3    4    5    6    7    …    Вперёд    В конец
либо, при постраничном прокручивании, когда клик на соседний номер, вообще без точек
Судя по примеру - вы поменяли количество отображаемых циферок в одном месте, а там ещё одна переменная есть...
Создание сайтов, шаблонов, помощь в решении проблем.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Re: Требуется переделать пагинацию, J3
« Ответ #17 : 21.06.2014, 19:53:43 »
Efanych, ничего не менял вообще, удалил modules/pagination.php, установил/активировал плагин - и все, результат представлен
*

Efanych

  • Глобальный модератор
  • 4683
  • 644 / 0
  • Меняю свою жизнь на 360°!
Re: Требуется переделать пагинацию, J3
« Ответ #18 : 21.06.2014, 20:57:22 »
Я не понимаю, почему у вас 6 видимых страниц в пагинации, хотя в обоих плагинах я проверил - выставлено 5.
Посмотрите в файле plugins\system\altpagination\pagination.php переменную $displayedPages. Ей в двух местах должно задаваться значение "5"
Создание сайтов, шаблонов, помощь в решении проблем.
*

Efanych

  • Глобальный модератор
  • 4683
  • 644 / 0
  • Меняю свою жизнь на 360°!
Re: Требуется переделать пагинацию, J3
« Ответ #19 : 21.06.2014, 21:01:11 »
Цитировать
удалил modules/pagination.php
Это что за файл такой?
Посмотрите, нет ли у вас в шаблоне html/pagination.php
Создание сайтов, шаблонов, помощь в решении проблем.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Re: Требуется переделать пагинацию, J3
« Ответ #20 : 21.06.2014, 23:30:22 »
сори. модуль пишу параллельно, вот и modules в голове постоянно крутится. да, html/pagination.php - его удалял.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Re: Требуется переделать пагинацию, J3
« Ответ #21 : 07.07.2014, 15:03:00 »
up

Если убрать какие-либо проверки и просто сделать текущий вывод:
Код: php
function pagination_list_render($list){
  $html = '<ul class="pagination-list">';
  $html .= $list['start']['data'];
  $html .= $list['previous']['data'];
  foreach($list['pages'] as $k => $page) {
    $html .= $page['data'];
  }
  $html .= $list['next']['data'];
  $html .= $list['end']['data'];
  $html .= '</ul>';
  return $html;
}
, то J3  максимум выводит 10 страниц, если страниц 27, то, находясь на последней, между "Назад" и "Вперед" будут показаны с 18 по 27, а надо все: с 1 по 27, как?
« Последнее редактирование: 07.07.2014, 15:06:14 от AlekVolsk »
*

Efanych

  • Глобальный модератор
  • 4683
  • 644 / 0
  • Меняю свою жизнь на 360°!
Re: Требуется переделать пагинацию, J3
« Ответ #22 : 07.07.2014, 15:19:13 »
В системном pagination.php есть переменная $displayedPages, которая определяет, сколько страниц будет выводиться
Создание сайтов, шаблонов, помощь в решении проблем.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Re: Требуется переделать пагинацию, J3
« Ответ #23 : 07.07.2014, 15:29:43 »
А в настройках J это нигде не указывается? Сам не нашел, искал плохо?
*

Efanych

  • Глобальный модератор
  • 4683
  • 644 / 0
  • Меняю свою жизнь на 360°!
Re: Требуется переделать пагинацию, J3
« Ответ #24 : 07.07.2014, 15:31:28 »
Нигде не указывается, только в системном файле.
Создание сайтов, шаблонов, помощь в решении проблем.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Re: Требуется переделать пагинацию, J3
« Ответ #25 : 07.07.2014, 15:35:36 »
И не переопределить... ппц. А как в переопределяемом файле узнать общее кол-во имеющихся страниц?
*

Efanych

  • Глобальный модератор
  • 4683
  • 644 / 0
  • Меняю свою жизнь на 360°!
Re: Требуется переделать пагинацию, J3
« Ответ #26 : 07.07.2014, 15:52:29 »
И не переопределить...
Я для этого плагин и делал.
Чтоб не морочиться с переопределением в шаблоне...
Создание сайтов, шаблонов, помощь в решении проблем.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

К текущему дню недели добавить класс

Автор Gover

Ответов: 5
Просмотров: 1151
Последний ответ 04.09.2016, 23:23:41
от effrit
Отображение результатов запроса в таблич

Автор 68pin

Ответов: 6
Просмотров: 1219
Последний ответ 17.12.2015, 09:41:50
от beliyadm
PageSpeed Insights находит на сайте непонятные страницы

Автор daddy

Ответов: 2
Просмотров: 2944
Последний ответ 14.12.2015, 18:44:47
от AlekVolsk
Не верно отображаеться редирект - ?

Автор warlocksp

Ответов: 0
Просмотров: 1042
Последний ответ 21.07.2015, 16:37:36
от warlocksp
Как прописать JavaScript позицию вывода ?

Автор warlocksp

Ответов: 3
Просмотров: 1360
Последний ответ 04.05.2015, 14:38:43
от warlocksp