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

PicassoWeb

  • Осваиваюсь на форуме
  • 11
  • 0 / 0
Здравствуйте Всем! Такая проблема некорректно отображается пагинация, но только при РУССОМ языке контента сайта, когда переходишь на Англ все отлично. Проблема в файле пагинации шаблона, но я не знаю что в нем редактировать... когда стираю все из этого файла - пагинация работает, но не так красиво. Помогите пожалуйста! Прилагаю файл и скрин.



Содержание файла пагинации:

<?php



// no direct access
defined('_JEXEC') or die('Restricted access');

/**
 * This is a file to add template specific chrome to pagination rendering.
 *
 * pagination_list_footer
 *    Input variable $list is an array with offsets:
 *       $list[limit]      : int
 *       $list[limitstart]   : int
 *       $list[total]      : int
 *       $list[limitfield]   : string
 *       $list[pagescounter]   : string
 *       $list[pageslinks]   : string
 *
 * pagination_list_render
 *    Input variable $list is an array with offsets:
 *       $list[all]
 *          [data]      : string
 *          [active]   : boolean
 *       $list[start]
 *          [data]      : string
 *          [active]   : boolean
 *       $list[previous]
 *          [data]      : string
 *          [active]   : boolean
 *       $list[next]
 *          [data]      : string
 *          [active]   : boolean
 *       $list[end]
 *          [data]      : string
 *          [active]   : boolean
 *       $list[pages]
 *          [{PAGE}][data]      : string
 *          [{PAGE}][active]   : boolean
 *
 * pagination_item_active
 *    Input variable $item is an object with fields:
 *       $item->base   : integer
 *       $item->link   : string
 *       $item->text   : string
 *
 * pagination_item_inactive
 *    Input variable $item is an object with fields:
 *       $item->base   : integer
 *       $item->link   : string
 *       $item->text   : string
 *
 * This gives template designers ultimate control over how pagination is rendered.
 *
 * NOTE: If you override pagination_item_active OR pagination_item_inactive you MUST override them both
 */

function pagination_list_footer($list)
{
   // Initialize variables
   $lang =& JFactory::getLanguage();
   $html = "<div class=\"list-footer\">\n";

   if ($lang->isRTL())
   {
      $html .= "\n<div class=\"counter\">".$list['pagescounter']."</div>";
      $html .= $list['pageslinks'];
      $html .= "\n<div class=\"limit\">".JText::_('Display Num').$list['limitfield']."</div>";
   }
   else
   {
      $html .= "\n<div class=\"limit\">".JText::_('Display Num').$list['limitfield']."</div>";
      $html .= $list['pageslinks'];
      $html .= "\n<div class=\"counter\">".$list['pagescounter']."</div>";
   }

   $html .= "\n<input type=\"hidden\" name=\"limitstart\" value=\"".$list['limitstart']."\" />";
   $html .= "\n</div>";

   return $html;
}

function pagination_list_render($list)
{
   // Initialize variables
   $lang =& JFactory::getLanguage();
   $html = "<div class=\"pagination\"><ul class=\"pagination\">";
   $html .= '';
   // Reverse output rendering for right-to-left display
   if($lang->isRTL())
   {
      $html .= "<li class=\"pagination-start\">".$list['start']['data']."</li>";
      $html .= "<li class=\"pagination-prev\">".$list['previous']['data']."</li>";

      $list['pages'] = array_reverse( $list['pages'] );

      foreach( $list['pages'] as $page ) {
         if($page['data']['active']) {
            //  $html .= '<strong>';
         }

         $html .= "<li>".$page['data']."</li>";

         if($page['data']['active']) {
            // $html .= '</strong>';
         }
      }

      $html .= "<li class=\"pagination-next\">".$list['next']['data']."</li>";
      $html .= "<li class=\"pagination-end\">".$list['end']['data']."</li>";
      // $html .= '&#171;';
   }
   else
   {
      $html .= "";
      $html .= "<li class=\"pagination-prev\">".$list['previous']['data']."</li>";

      foreach( $list['pages'] as $page )
      {
         if($page['data']['active']) {
            // $html .= '<strong>';
         }

         $html .= "<li>".$page['data']."</li>";

         if($page['data']['active']) {
            //  $html .= '</strong>';
         }
      }

      $html .= "<li class=\"pagination-next\">".$list['next']['data']."</li>";
      $html .= "<li class=\"pagination-end\">".$list['end']['data']."</li>";
      // $html .= '&#171;';

   }
   $html .= '';
   $html .= "</ul></div>";
   return $html;
}

function pagination_item_active(&$item) {
   return "<a href=\"".$item->link."\" title=\"".$item->text."\"><strong>".$item->text."</strong></a>";
}

function pagination_item_inactive(&$item) {
   return "<span class=\"pagenav\">".$item->text."</span>";
}
?>
*

PicassoWeb

  • Осваиваюсь на форуме
  • 11
  • 0 / 0
разобрался, нужно просто исправить русские буквы они не влазят по размеру и модуль смещается.
*

Ростовчанка

  • Новичок
  • 9
  • 2 / 0
разобрался, нужно просто исправить русские буквы они не влазят по размеру и модуль смещается.

Скажите как вы это сделали? У меня та же проблема.
*

PicassoWeb

  • Осваиваюсь на форуме
  • 11
  • 0 / 0
в русском файле локализации исправьте русские слова на более короткие, я исправил на значки < (назад) > (вперед)
*

PicassoWeb

  • Осваиваюсь на форуме
  • 11
  • 0 / 0
Скажите как вы это сделали? У меня та же проблема.
андерстуд?
*

Ростовчанка

  • Новичок
  • 9
  • 2 / 0
Честно говоря не очень. Вернее смысл ясен, а вот какой файлик править нет.
*

paternoster

  • Давно я тут
  • 506
  • 24 / 1
Ваш сайт/language/ru-RU/ru-RU.com_k2.ini
*

andrejdi

  • Захожу иногда
  • 329
  • 32 / 0
А что мешает прописать в стилях шаблона?
Код
/*style for K2 */
.k2Pagination ul {text-align:center;}
.k2Pagination ul li {display:inline;}
.k2Pagination ul li a{text-decoration:none;}
.k2Pagination ul li,.k2Pagination .pagination-start,.k2Pagination .pagination-end, .k2Pagination .pagination-next,.k2Pagination .pagination-prev{color: #666; text-shadow: 0px 1px 0px rgba(255,255,255,0.59); font-size: 12px; display: inline; position: relative; margin: 0px 1px 0px 1px; width: auto;
height: auto; background: #ececec; padding: 6px 10px 6px 10px;
 outline: none; border: 1px solid #d8d8d8;
  border-bottom: 1px solid #ccc;}
.
Соответственно, ничего не придется менять в языковых файлах, все надписи на русском влезут. Стили подправьте под свои нужды
*

PicassoWeb

  • Осваиваюсь на форуме
  • 11
  • 0 / 0
А что мешает прописать в стилях шаблона?
Код
/*style for K2 */
.k2Pagination ul {text-align:center;}
.k2Pagination ul li {display:inline;}
.k2Pagination ul li a{text-decoration:none;}
.k2Pagination ul li,.k2Pagination .pagination-start,.k2Pagination .pagination-end, .k2Pagination .pagination-next,.k2Pagination .pagination-prev{color: #666; text-shadow: 0px 1px 0px rgba(255,255,255,0.59); font-size: 12px; display: inline; position: relative; margin: 0px 1px 0px 1px; width: auto;
height: auto; background: #ececec; padding: 6px 10px 6px 10px;
 outline: none; border: 1px solid #d8d8d8;
  border-bottom: 1px solid #ccc;}
.
Соответственно, ничего не придется менять в языковых файлах, все надписи на русском влезут. Стили подправьте под свои нужды

Полагаю если человек не смог найти файл локализации, прописать стили  точно не его вариант
*

Ростовчанка

  • Новичок
  • 9
  • 2 / 0
PicassoWeb спасибо за помощь, но у меня в файле Мойсайт/language/ru-RU/ru-RU.com_k2.ini нет ничего, что можно было бы исправить. И вы правы я новичок.

andrejdi попробую Ваш совет. Я так понимаю прописывать тут Мой сайт/templates/шаблон/css/template.css
*

andrejdi

  • Захожу иногда
  • 329
  • 32 / 0
Ростовчанка, именно так
*

Ростовчанка

  • Новичок
  • 9
  • 2 / 0
andrejdi, вставила Ваш код в файл, к сожалению не помогло((
*

andrejdi

  • Захожу иногда
  • 329
  • 32 / 0
Ссылку дайте, посмотрю
*

andrejdi

  • Захожу иногда
  • 329
  • 32 / 0
Попробуйте тогда добавить эти стили в .../components/com_k2/css/k2.css Я этот кусок кода взял с рабочего варианта
*

Ростовчанка

  • Новичок
  • 9
  • 2 / 0
Жаль, не получилось. Я поняла, что надо в файлах К2 искать и в русификаторах.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Как добавить свой класс для страниц вывода материалов по тегу k2?

Автор Slava77

Ответов: 0
Просмотров: 4085
Последний ответ 16.02.2023, 23:29:34
от Slava77
Как избавиться от дублей страниц вида category?start=26?

Автор sergspb

Ответов: 0
Просмотров: 1102
Последний ответ 02.02.2018, 13:22:36
от sergspb
Раздвоение страниц при переходе по нумерации страниц

Автор igor289

Ответов: 4
Просмотров: 1212
Последний ответ 06.05.2017, 21:05:55
от Septdir
Удалить дубли страниц

Автор kolhoz

Ответов: 2
Просмотров: 1343
Последний ответ 21.02.2017, 11:10:10
от voland
Не работает пагинация K2 Joomla 3.6.2

Автор Nurdaulet

Ответов: 1
Просмотров: 1125
Последний ответ 13.11.2016, 11:25:21
от Nurdaulet