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

d0ublezer0

  • Захожу иногда
  • 356
  • 31 / 0
  • Javaхарлал Неру
Здрасте всем.

Хочу сделать разбивку на страницы таким же стилем, как сделано в админке:


Допустим, стили я вытяну из CSS админки.

А как сделать/подключить свой шаблон для разбивки?

Я так понял, что отдельного модуля для отображения деления на страницы не существует.
Куда же тогда цеплять шаблон?

Править код компонента com_content очень не хочется - никакой гибкости не будет
« Последнее редактирование: 19.04.2010, 08:28:15 от d0ublezer0 »
Я помог вам? Ткните в карму.
*

d0ublezer0

  • Захожу иногда
  • 356
  • 31 / 0
  • Javaхарлал Неру
Нашел родной плагин pagenavigation.php - но он не поддерживает шаблоны :(
« Последнее редактирование: 22.04.2009, 13:59:58 от d0ublezer0 »
Я помог вам? Ткните в карму.
*

d0ublezer0

  • Захожу иногда
  • 356
  • 31 / 0
  • Javaхарлал Неру
Да и вообще после его изучения я так понял, что он просто листает материалы: Следующий/Предыдущий

Я помог вам? Ткните в карму.
*

d0ublezer0

  • Захожу иногда
  • 356
  • 31 / 0
  • Javaхарлал Неру
Почему столько вопросов?
1. Потому что я 1.5 только начал изучать.
2. Потому что даже при включенной разбивке на странице в меню блога категории, разбивка эта не отображается.
pagination.php в Libraries присутствует.
если копирую файл pagination.php в шаблон\html, PHP ругается что не может декларировать класс JPagination.
Я помог вам? Ткните в карму.
*

d0ublezer0

  • Захожу иногда
  • 356
  • 31 / 0
  • Javaхарлал Неру
В общем, как всегда всё нашел сам и сам сделал.

Разговор сам с собой получился.

Админы, удалите тему, а?
« Последнее редактирование: 22.04.2009, 16:43:07 от d0ublezer0 »
Я помог вам? Ткните в карму.
*

gdX

  • Глобальный модератор
  • 995
  • 128 / 0
  • Открыт к заказам по дизайну
В общем, как всегда всё нашел сам и сам сделал.
Может кому-нибудь тоже интересно решение такого вопроса.
Если не затруднит, то можно было бы расписать его здесь.
Думаю, что Вам за это многие скажут «спасибо».
*

d0ublezer0

  • Захожу иногда
  • 356
  • 31 / 0
  • Javaхарлал Неру
Охотно.
Всё до безумия просто.

Достаточно было скопировать файл
/administrator/templates/khepri/html/pagination.php
в
/templates/мой_шаблон/html/pagination.php
Немного исправить и подключить CSS из админки (в моем случае-general.css был переименован в pagination.css, в нем были удалены лишние элементы стиля и поправлены пути к картинкам)
Я помог вам? Ткните в карму.
*

IIIeff

  • Новичок
  • 8
  • 0 / 0
Вроде сделал как написано, но выравнивание по левому краю и не переходит по страницам всё время на первую кидает (даже не перезагружает, а просто в самый верх первой)
не подскажете в чем проблема?
« Последнее редактирование: 15.04.2010, 13:50:34 от IIIeff »
*

d0ublezer0

  • Захожу иногда
  • 356
  • 31 / 0
  • Javaхарлал Неру
не подскажете в чем проблема?

Чтобы понять вашу проблему, нужно видеть ваш код.
Или хотя бы ссылку на сайт дайте.
Я помог вам? Ткните в карму.
*

IIIeff

  • Новичок
  • 8
  • 0 / 0
код pagination.php взятый из /public_html/administrator/templates/khepri/html

<?php
// no direct access
defined('_JEXEC') or die('Restricted access');
function pagination_list_footer($list)
{
   // Initialize variables
   $lang =& JFactory::getLanguage();
   $html = "<del class=\"container\"><div class=\"pagination\">\n";

   $html .= "\n<div class=\"limit\">".JText::_('Display Num').$list['limitfield']."</div>";
   $html .= $list['pageslinks'];
   $html .= "\n<div class=\"limit\">".$list['pagescounter']."</div>";

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

   return $html;
}
function pagination_list_render($list)
{
   // Initialize variables
   $lang =& JFactory::getLanguage();
   $html = null;

   if ($list['start']['active']) {
      $html .= "<div class=\"button2-right\"><div class=\"start\">".$list['start']['data']."</div></div>";
   } else {
      $html .= "<div class=\"button2-right off\"><div class=\"start\">".$list['start']['data']."</div></div>";
   }
   if ($list['previous']['active']) {
      $html .= "<div class=\"button2-right\"><div class=\"prev\">".$list['previous']['data']."</div></div>";
   } else {
      $html .= "<div class=\"button2-right off\"><div class=\"prev\">".$list['previous']['data']."</div></div>";
   }

   $html .= "\n<div class=\"button2-left\"><div class=\"page\">";
   foreach( $list['pages'] as $page ) {
      $html .= $page['data'];
   }
   $html .= "\n</div></div>";

   if ($list['next']['active']) {
      $html .= "<div class=\"button2-left\"><div class=\"next\">".$list['next']['data']."</div></div>";
   } else {
      $html .= "<div class=\"button2-left off\"><div class=\"next\">".$list['next']['data']."</div></div>";
   }
   if ($list['end']['active']) {
      $html .= "<div class=\"button2-left\"><div class=\"end\">".$list['end']['data']."</div></div>";
   } else {
      $html .= "<div class=\"button2-left off\"><div class=\"end\">".$list['end']['data']."</div></div>";
   }

   return $html;
}

function pagination_item_active(&$item)
{
   if($item->base>0)
      return "<a href=\"#\" title=\"".$item->text."\" onclick=\"javascript: document.adminForm.limitstart.value=".$item->base."; submitform();return false;\">".$item->text."</a>";
   else
      return "<a href=\"#\" title=\"".$item->text."\" onclick=\"javascript: document.adminForm.limitstart.value=0; submitform();return false;\">".$item->text."</a>";
}

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

IIIeff

  • Новичок
  • 8
  • 0 / 0
Re: Разбивка на страницы как в админке?
« Ответ #10 : 16.04.2010, 08:56:07 »
Пока писал разобрался с работоспособностью навигации - сделал.  Магия поста ^-^
Осталась проблема с выравниванием по центру
*

d0ublezer0

  • Захожу иногда
  • 356
  • 31 / 0
  • Javaхарлал Неру
Re: Разбивка на страницы как в админке?
« Ответ #11 : 16.04.2010, 12:01:28 »
Ссылка-то где?
У вас скорее всего в CSS проблема.
Я помог вам? Ткните в карму.
*

d0ublezer0

  • Захожу иногда
  • 356
  • 31 / 0
  • Javaхарлал Неру
Re: Разбивка на страницы как в админке?
« Ответ #12 : 16.04.2010, 12:03:49 »
Оберните ваш вывод разбивки в div со стилями:
Код
display:table;
margin:0 auto;
padding:0;
Я помог вам? Ткните в карму.
*

IIIeff

  • Новичок
  • 8
  • 0 / 0
Re: Разбивка на страницы как в админке?
« Ответ #13 : 16.04.2010, 12:35:41 »
сайт cadka.ru
*

IIIeff

  • Новичок
  • 8
  • 0 / 0
Re: Разбивка на страницы как в админке?
« Ответ #14 : 19.04.2010, 08:14:57 »
Спасибо! Вкурил. Заработало.
*

Beer

  • Завсегдатай
  • 1103
  • 43 / 1
  • БИРУ - БИР!
 Еще бы в первом посту собрать все воедино и пошагово. ;)
*

IIIeff

  • Новичок
  • 8
  • 0 / 0
ща напишем
« Последнее редактирование: 20.04.2010, 06:50:32 от IIIeff »
*

IIIeff

  • Новичок
  • 8
  • 0 / 0
копируем файл
/administrator/templates/khepri/html/pagination.php в /templates/мой_шаблон/html/pagination.php если как у меня в шаблоне не было папки HTML - создаём и кидаем туда
код пришлось немного изменить у меня получился такой
 
Код
<?php
/**
 * @version $Id: pagination.php 10381 2008-06-01 03:35:53Z pasamio $
 * @package Joomla
 * @copyright Copyright (C) 2005 - 2008 Open Source Matters. All rights reserved.
 * @license GNU/GPL, see LICENSE.php
 * Joomla! is free software. This version may have been modified pursuant
 * to the GNU General Public License, and as distributed it includes or
 * is derivative of works licensed under the GNU General Public License or
 * other free or open source software licenses.
 * See COPYRIGHT.php for copyright notices and details.
 */
// 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 = "<del class=\"container\"><div class=\"pagination\">\n";

$html .= "\n<div class=\"limit\">".JText::_('Display Num').$list['limitfield']."</div>";
$html .= $list['pageslinks'];
$html .= "\n<div class=\"limit\">".$list['pagescounter']."</div>";

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

return $html;
}

function pagination_list_render($list)
{
// Initialize variables
$lang =& JFactory::getLanguage();
$html = null;
//тут дописана строка для выравнивания по центру спасибо d0ublezer0
    $html = '<div style="display:table;margin:0 auto;padding:0;">';

//закомментировал строки для кнопки start или «начало», кому нужны включаем обратно
//if ($list['start']['active']) {
// $html .= "<div class=\"button2-right\"><div class=\"start\">".$list['start']['data']."</div></div>";
//} else {
// $html .= "<div class=\"button2-right off\"><div class=\"start\">".$list['start']['data']."</div></div>";
//}
if ($list['previous']['active']) {
$html .= "<div class=\"button2-right\"><div class=\"prev\">".$list['previous']['data']."</div></div>";
} else {
$html .= "<div class=\"button2-right off\"><div class=\"prev\">".$list['previous']['data']."</div></div>";
}

$html .= "\n<div class=\"button2-left\"><div class=\"page\">";
foreach( $list['pages'] as $page ) {
$html .= $page['data'];
}
$html .= "\n</div></div>";

if ($list['next']['active']) {
$html .= "<div class=\"button2-left\"><div class=\"next\">".$list['next']['data']."</div></div>";
} else {
$html .= "<div class=\"button2-left off\"><div class=\"next\">".$list['next']['data']."</div></div>";
}
//такая же процедура для кнопки end или «в конец»
//if ($list['end']['active']) {
//$html .= "<div class=\"button2-left\"><div class=\"end\">".$list['end']['data']."</div></div>";
//} else {
// $html .= "<div class=\"button2-left off\"><div class=\"end\">".$list['end']['data']."</div></div>";
//}
//закрываем выравнивание по центру
$html .= '</div>';
return $html;
}

function _item_active(&$item)
{
global $mainframe;
if ($mainframe->isAdmin())
{
if($item->base>0)
return "<a title=\"".$item->text."\" onclick=\"javascript: document.adminForm.limitstart.value=".$item->base."; submitform();return false;\">".$item->text."</a>";
else
return "<a title=\"".$item->text."\" onclick=\"javascript: document.adminForm.limitstart.value=0; submitform();return false;\">".$item->text."</a>";
} else {
return "<a title=\"".$item->text."\" href=\"".$item->link."\" class=\"pagenav\">".$item->text."</a>";
}
}

function _item_inactive(&$item)
{
global $mainframe;
if ($mainframe->isAdmin()) {
return "<span>".$item->text."</span>";
} else {
return "<span class=\"pagenav\">".$item->text."</span>";
}
}


?>

вырезаем лишнеее и подключаем CSS из админки /public_html/administrator/templates/khepri/css  скорее всего general.css
картинки кнопок тут /administrator/templates/khepri/images - правим к ним пути или копируем их в свой шаблон
получилось вот так

соответственно извращаяясь с картинками кнопок можно создать что-нибудь оригинальное
удачи!
P.S. Да, названия предыдущая, следующая и т.д - меняем, как тут неоднократно писалось, в в файле language/ru-Ru/ru-Ru.ini  
« Последнее редактирование: 25.06.2010, 11:10:02 от IIIeff »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Свой адрес страницы

Автор acamaz

Ответов: 2
Просмотров: 2026
Последний ответ 21.07.2015, 13:56:33
от Gosha5767
Решено. Шаблон YooMilk где исправить Continue Reading ?

Автор Nino

Ответов: 3
Просмотров: 4036
Последний ответ 18.07.2015, 14:14:57
от rukodelie
Вставить ручками рекламный блок вверх страницы шаблона раздела и категории

Автор annushka

Ответов: 2
Просмотров: 1757
Последний ответ 27.04.2015, 14:56:19
от annushka
Как прописать адрес главной страницы во 2 меню?

Автор p4o1

Ответов: 4
Просмотров: 2722
Последний ответ 25.04.2015, 10:17:54
от p4o1
Как сделать меню вконце страницы ?

Автор p4o1

Ответов: 1
Просмотров: 1767
Последний ответ 08.04.2015, 22:46:50
от vipiusss