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

dimazzz

  • Осваиваюсь на форуме
  • 18
  • 0 / 0
Шаблон Joomla и phpBB (фон)
« : 05.12.2009, 20:15:14 »
Решил вписать форум в дизайн сайта.
Ну вот сайт построен на шаблоне от YOOtheme, а именно YooTheme Daylight
В етом шаблоне бекграунд меняется в определенное время.
Вот CSS сайта:
Код: css
/*
 * Page
 */
 
body {
font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
font-size: 12px;
line-height: 150%;
color: #646464;
}

body.yoopage {
background: #385A81;
}

body.noon {
background: #385A81 url(../images/page_bg_noon.jpg) 50% 0 repeat-x fixed;
}

body.evening {
background: #4C5469 url(../images/page_bg_evening.jpg) 50% 0 repeat-x fixed;
}

body.night {
background: #293947 url(../images/page_bg_night.jpg) 50% 0 repeat-x fixed;
}

body.morning {
background: #395066 url(../images/page_bg_morning.jpg) 50% 0 repeat-x fixed;
}

/* set body font size (styleswitcher) */
body.font-small {
font-size: 11px;
}

body.font-medium {
font-size: 12px;
}

body.font-large {
font-size: 13px;
}

/* center page */
div.wrapper {
margin: auto;
}

/*
 * Layout
 */

div#absolute {
position: absolute;
z-index: 15;
top: 0px;
left: 0px;
width: 100%;
}

div#page-body {
background: url(../images/header_bg.png) 50% 0 repeat-x;
}

body.evening div#page-body { background: url(../images/header_bg_evening.png) 50% 0 repeat-x; }
body.night div#page-body { background: url(../images/header_bg_night.png) 50% 0 repeat-x; }
body.morning div#page-body { background: url(../images/header_bg_morning.png) 50% 0 repeat-x; }
Вот скриптик, который управляет сменой фона:
Код: javascript
/* (C) 2008 YOOtheme.com */

var YOOTools = {

start: function() {

/* Set Background */
var now = new Date();
var hours = now.getHours();
var day = '';
if (hours >= 10 && hours < 17) {
$('page').addClass('noon');
day = 'noon';
} else if (hours >= 17 && hours < 22) {
$('page').addClass('evening');
day = 'evening';
} else if (hours >= 22 || hours < 5) {
$('page').addClass('night');
day = 'night';
} else if (hours >= 5 && hours < 10) {
$('page').addClass('morning');
day = 'morning';
}

/* Match height of div tags */
YOOTools.setDivHeight();

/* Accordion menu */
new YOOAccordionMenu('div#middle ul.menu li.toggler', 'ul.accordion', { accordion: 'slide' });

/* Fancy menu */
new YOOFancyMenu($E('ul', 'menu'), { mode: 'move', transition: Fx.Transitions.Expo.easeOut, duration: 700 });

/* Dropdown menu */
new YOODropdownMenu('div#menu li.parent', { mode: 'height', transition: Fx.Transitions.Expo.easeOut });

/* Morph: main menu (tab) */
var enterColor = '#ffffaa';
var leaveColor = '#ffffff';

var menuEnter = { 'color': enterColor };
var menuLeave = { 'color': leaveColor };

new YOOMorph('div#menu li.level1', menuEnter, menuLeave,
{ transition: Fx.Transitions.linear, duration: 300 },
{ transition: Fx.Transitions.sineIn, duration: 700 }, '.level1');

var enterColor = '#ffdc6e';
var leaveColor = '#ffffff';

var menuEnter = { 'color': enterColor };
var menuLeave = { 'color': leaveColor };

new YOOMorph('div#menu li.level1', menuEnter, menuLeave,
{ transition: Fx.Transitions.linear, duration: 300 },
{ transition: Fx.Transitions.sineIn, duration: 700 }, 'span.sub');

/* Morph: main menu (drop down) */
switch (day) {
case "evening": var enterColor = '#08192f';
var leaveColor = '#11325f';
break;

case "night": var enterColor = '#10171b';
var leaveColor = '#212e36';
break;

case "morning": var enterColor = '#0c182b';
var leaveColor = '#193157';
break;

case "noon":
default: var enterColor = '#152b56';
var leaveColor = '#193775';
 }

var menuEnter = { 'background-color': enterColor };
var menuLeave = { 'background-color': leaveColor };

new YOOMorph('div#menu li.level2 a, div#menu li.level2 span.separator', menuEnter, menuLeave,
{ transition: Fx.Transitions.linear, duration: 100 },
{ transition: Fx.Transitions.sineIn, duration: 700 });

var enterColor = '#ffffaa';
var leaveColor = '#ffffff';

var menuEnter = { 'color': enterColor };
var menuLeave = { 'color': leaveColor };

new YOOMorph('div#menu li.level2 a, div#menu li.level2 span.separator', menuEnter, menuLeave,
{ transition: Fx.Transitions.linear, duration: 100 },
{ transition: Fx.Transitions.sineIn, duration: 700 });

/* Morph: sub menu */
var enterColor = '#000000';
var leaveColor = '#646464';

var submenuEnter = { 'color': enterColor};
var submenuLeave = { 'color': leaveColor};

new YOOMorph('div#middle ul.menu a, div#middle ul.menu span.separator', submenuEnter, submenuLeave,
{ transition: Fx.Transitions.expoOut, duration: 100, ignoreClass: 'current' },
{ transition: Fx.Transitions.sineIn, duration: 700 });

/* Style switcher */
new YOOStyleSwitcher($ES('.wrapper'), {
widthDefault: YtSettings.widthDefault,
widthThinPx: YtSettings.widthThinPx,
widthWidePx: YtSettings.widthWidePx,
widthFluidPx: YtSettings.widthFluidPx,
afterSwitch: YOOTools.setDivHeight,
transition: Fx.Transitions.expoOut,
duration: 500
});

/* Smoothscroll */
new SmoothScroll({ duration: 500, transition: Fx.Transitions.Expo.easeOut });
},

/* Include script */
include: function(library) {
$ES('script').each(function(s, i){
var src  = s.getProperty('src');
var path = '';
if (src && src.match(/yoo_tools\.js(\?.*)?$/)) path = src.replace(/yoo_tools\.js(\?.*)?$/,'');
if (src && src.match(/template\.js\.php(\?.*)?$/)) path = src.replace(/template\.js\.php(\?.*)?$/,'');
if (path != '') document.write('<script language="javascript" src="' + path + library + '" type="text/javascript"></script>');
});
},

/* Match height of div tags */
setDivHeight: function() {
YOOBase.matchDivHeight('div.topbox div.deepest', 0, 40);
YOOBase.matchDivHeight('div.bottombox div.deepest', 0, 40);
YOOBase.matchDivHeight('div.maintopbox div.deepest', 0, 40);
YOOBase.matchDivHeight('div.mainbottombox div.deepest', 0, 40);
YOOBase.matchDivHeight('div.contenttopbox div.deepest', 0, 40);
YOOBase.matchDivHeight('div.contentbottombox div.deepest', 0, 40);
}

};

/* Add functions on window load */
window.addEvent('domready', YOOTools.start);

/* Load IE6 fix */
if (window.ie6) {
YOOTools.include('addons/ie6fix.js');
YOOTools.include('yoo_ie6fix.js');
}
И собственно сам код на странице, который вызывает бекграунд на сайте:
Код: php
<body id="page" class="yoopage <?php echo $yootools->getCurrentStyle(); ?> <?php echo $this->params->get('leftcolumn'); ?> <?php echo $this->params->get('rightcolumn'); ?> <?php echo $itemcolor; ?> <?php echo $yootools->getCurrentToolsColor(); ?>">

Вот, ето что касается сайта.
Было бы просто, если бы форум phpBB бы overal_header было в PHP а не в хтмл... а так есть проблемы.

вообщем на форуме в CSS прописал стили, и дизайн подстроил под сайт, проблема только с бакграундом.

Подскажите как можно реализировать смену фона в определенный час...? Возможно написать простеникий джаваскрипт?

Не сочтите рекламой. Вот pidwolochysk.org.ua и forum.pidwolochysk.org.ua
« Последнее редактирование: 05.12.2009, 20:20:27 от dimazzz »
*

Darkick

  • Завсегдатай
  • 1142
  • 239 / 1
Re: Шаблон Joomla и phpBB (фон)
« Ответ #1 : 06.12.2009, 01:36:24 »
Наверно можно и JavaScript.
А можно и PHP. Разрешаем в форуме использование PHP в шаблонах; пишем в шаблоне
Код
<!-- PHP -->
а тут просто пишем на PHP
<!-- ENDPHP -->
*

dimazzz

  • Осваиваюсь на форуме
  • 18
  • 0 / 0
Re: Шаблон Joomla и phpBB (фон)
« Ответ #2 : 12.12.2009, 02:11:15 »
большое спасибо)
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Тег OpenGraph image в Joomla 1.5

Автор Savitar

Ответов: 3
Просмотров: 10159
Последний ответ 23.05.2023, 09:02:51
от sivers
Слетели URL и шаблон

Автор max888

Ответов: 2
Просмотров: 5791
Последний ответ 28.12.2020, 17:37:52
от draff
VirtueMart 1.9 шаблон письма

Автор m176

Ответов: 0
Просмотров: 3100
Последний ответ 23.10.2020, 12:38:35
от m176
Как вывести путь до шаблона с помощью API Joomla?

Автор elche

Ответов: 13
Просмотров: 15811
Последний ответ 11.09.2018, 23:48:50
от DK-Scorp
шаблон IT Newsy - By IceTheme проблема со списком.

Автор wolf34

Ответов: 4
Просмотров: 6042
Последний ответ 30.05.2017, 11:52:27
от darkghost