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

makay

  • Осваиваюсь на форуме
  • 28
  • 0 / 0
Добрый день, не получается решить проблему с ботами, они пишут свои комментарии к материалам дело аж за сотню доходит.
Как сделать так чтобы комментарии оставляли только зарегистрированные пользователи, остальным - запретить.
*

makay

  • Осваиваюсь на форуме
  • 28
  • 0 / 0
версия к2- 2.6.8
*

shurakana

  • Давно я тут
  • 792
  • 50 / 6
Добавляй аттрибут action к форме с помощью javascript.
Эта подпись отображается внизу каждого Моего сообщения. Я также могу использовать BB код и смайлы.
*

makay

  • Осваиваюсь на форуме
  • 28
  • 0 / 0
был бы весьма признателен в подробной инструкции. С Явой как с китайским языком -  :o
*

shurakana

  • Давно я тут
  • 792
  • 50 / 6
в head добавляешь код
Код
<script>$(function(){$('#идтвоейформы').attr({'action': 'здесь/обработчик/указываешь'});});</script>

P.S. Только удали обработчик из шаблона чтоб в коде осталось
<form id="идтвоейформы" >
   твоя форма
</form>

Отпишись потом пропал спам или нет?
Эта подпись отображается внизу каждого Моего сообщения. Я также могу использовать BB код и смайлы.
*

jurassik

  • Давно я тут
  • 692
  • 52 / 1

Отпишись потом пропал спам или нет?
пропал вместе с функционалом, т.к. скрипт сработает а DОМ не построен
сам шучу - сам смеюсь
*

shurakana

  • Давно я тут
  • 792
  • 50 / 6
Ча?!..)))
Эта подпись отображается внизу каждого Моего сообщения. Я также могу использовать BB код и смайлы.
*

makay

  • Осваиваюсь на форуме
  • 28
  • 0 / 0
в head добавляешь код
Код
<script>$(function(){$('#идтвоейформы').attr({'action': 'здесь/обработчик/указываешь'});});</script>

P.S. Только удали обработчик из шаблона чтоб в коде осталось
<form id="идтвоейформы" >
   твоя форма
</form>

Отпишись потом пропал спам или нет?
А какие обработчики бывают? строчку то я добавлю, а в что за обработчики - понятия не имею. Возникает вопрос - это будет одна запись для всех материалов или для каждого материала нужно такую манипуляцию отдельно производить?
*

shurakana

  • Давно я тут
  • 792
  • 50 / 6
<form id="идтвоей формы" action="ссылкакакаянибудь">
сама форма
</form>
Надо убрать action в шаблоне чтоб получилось
<form id="идтвоей формы" >
сама форма
</form>
Проверь, форма должна перестать работать.
А затем уже вставляешь в head javascript код который написал ранее, и добавляешь туда "ссылкакакаянибудь"
Эта подпись отображается внизу каждого Моего сообщения. Я также могу использовать BB код и смайлы.
*

makay

  • Осваиваюсь на форуме
  • 28
  • 0 / 0
Пока обошелся тем, что скрыл комента
<form id="идтвоей формы" action="ссылкакакаянибудь">
сама форма
</form>
Надо убрать action в шаблоне чтоб получилось
<form id="идтвоей формы" >
сама форма
</form>
Проверь, форма должна перестать работать.
А затем уже вставляешь в head javascript код который написал ранее, и добавляешь туда "ссылкакакаянибудь"
пока обошелся тем, что скрыл вообще комментарии в К2. Начал разбираться, возникла новая проблема - не могу найти тег Head, в каком файле его искать? У меня Joomla 2.5.22.  везде index.php и там тегов нету. Что делать?
*

shurakana

  • Давно я тут
  • 792
  • 50 / 6
Ну, дружок, если ты не знаешь где это находится то ты не с того "конца" подошел, прежде всего надо узнать расположение файлов и за что они отвечают если хочешь в коде ковыряться.

<head> находится в твойсайт\templates\твойшаблон\index.php

UPD вообщем, не надо так делать, у тебя еще конфликты скорее всего скриптов будут.. Просто найди "CAPTCHA для K2". Уверен есть такая.
« Последнее редактирование: 12.08.2014, 17:24:50 от shurakana »
Эта подпись отображается внизу каждого Моего сообщения. Я также могу использовать BB код и смайлы.
*

makay

  • Осваиваюсь на форуме
  • 28
  • 0 / 0
Ну, дружок, если ты не знаешь где это находится то ты не с того "конца" подошел, прежде всего надо узнать расположение файлов и за что они отвечают если хочешь в коде ковыряться.

<head> находится в твойсайт\templates\твойшаблон\index.php

UPD вообщем, не надо так делать, у тебя еще конфликты скорее всего скриптов будут.. Просто найди "CAPTCHA для K2". Уверен есть такая.
Конечно многого не знаю в верстке, но и последним юзером себя не считаю, нет тегов в этом файле шаблона.

Может самому надо что то создать?
*

shurakana

  • Давно я тут
  • 792
  • 50 / 6
у тебя переменная $tpl есть, видимо в настройках шаблона указывается цветсхема или проч. Ищи в той папке значит еще шаблоны должны быть.
Я не разу не работал с другими шаблонами, поэтом незнаю точно где копать.
Эта подпись отображается внизу каждого Моего сообщения. Я также могу использовать BB код и смайлы.
*

makay

  • Осваиваюсь на форуме
  • 28
  • 0 / 0
у тебя переменная $tpl есть, видимо в настройках шаблона указывается цветсхема или проч. Ищи в той папке значит еще шаблоны должны быть.
Я не разу не работал с другими шаблонами, поэтом незнаю точно где копать.
Быть может файл такого содержания
Цитировать
<?php

/**
 *
 * Default view
 *
 * @version             1.0.0
 * @package             Gavern Framework
 * @copyright         Copyright (C) 2010 - 2011 GavickPro. All rights reserved.
 *               
 */
 
// No direct access.
defined('_JEXEC') or die;
//
$app = JFactory::getApplication();
$user = JFactory::getUser();
// getting User ID
$userID = $user->get('id');
// getting params
$option = JRequest::getCmd('option', '');
$view = JRequest::getCmd('view', '');
// defines if com_users
define('GK_COM_USERS', $option == 'com_users' && ($view == 'login' || $view == 'registration'));
// other variables
$btn_login_text = ($userID == 0)? JText::_('TPL_GK_LANG_LOGIN') : JText::_('TPL_GK_LANG_LOGOUT');
// make sure that the modal will be loaded
JHTML::_('behavior.modal');
//
$page_suffix_output = $this->API->get('template_pattern', 'none')!= 'none' ? 'pattern' . $this->API->get('template_pattern', 'none'). ' ' : '';
$page_suffix_output .= $this->page_suffix;
$tpl_page_suffix = $page_suffix_output != '' ? ' class="'.$page_suffix_output.'" ' : '';

?>
<!DOCTYPE html>
<html lang="<?php echo $this->APITPL->language; ?>" <?php echo $tpl_page_suffix; ?>>
<head>
   <?php $this->layout->addTouchIcon(); ?>
   <?php if(
         $this->browser->get('browser') == 'ie6' ||
         $this->browser->get('browser') == 'ie7' ||
         $this->browser->get('browser') == 'ie8' ||
         $this->browser->get('browser') == 'ie9'
      ) : ?>
   <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1" />
   <?php endif; ?>
    <?php if($this->API->get('rwd', 1)) : ?>
       <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2.0">
   <?php else : ?>
      <meta name="viewport" content="width=<?php echo $this->API->get('template_width', 1020)+80; ?>">
   <?php endif; ?>
    <jdoc:include type="head" />
    <?php $this->layout->loadBlock('head'); ?>
   <?php $this->layout->loadBlock('cookielaw'); ?>
</head>
<body<?php echo $tpl_page_suffix; ?><?php if($this->browser->get("tablet") == true) echo ' data-tablet="true"'; ?><?php if($this->browser->get("mobile") == true) echo ' data-mobile="true"'; ?><?php $this->layout->generateLayoutWidths(); ?>>   
   <?php if ($this->browser->get('browser') == 'ie7' || $this->browser->get('browser') == 'ie6') : ?>
   <!--[if lte IE 7]>
   <div id="ieToolbar"><div><?php echo JText::_('TPL_GK_LANG_IE_TOOLBAR'); ?></div></div>
   <![endif]-->
   <?php endif; ?>

   <?php if($this->API->modules('topbar')) : ?>
   <div id="gkTopBar">
      <div class="gkPage">
         <jdoc:include type="modules" name="topbar" style="<?php echo $this->module_styles['topbar']; ?>" />
      </div>
   </div>
   <?php endif; ?>
   
   <?php if(count($app->getMessageQueue())) : ?>
   <jdoc:include type="message" />
   <?php endif; ?>
   
    <header id="gkHeader">
       <div>
          <div class="gkPage" id="gkHeaderNav">                       
             <?php $this->layout->loadBlock('logo'); ?>
            
            <?php if($this->API->get('show_menu', 1) && $this->API->get('menu_type', 'classic') == 'classic') : ?>
            <div id="gkMobileMenu" class="gkPage"> <i id="mobile-menu-toggler" class="fa fa-bars"></i>
                <select onChange="window.location.href=this.value;">
                    <?php
                      $this->mobilemenu->loadMenu($this->API->get('menu_name','mainmenu'));
                      $this->mobilemenu->genMenu($this->API->get('startlevel', 0), $this->API->get('endlevel',-1));
                  ?>
                </select>
            </div>
            <?php endif; ?>
            
            <div id="gkTopNav">
               <?php if(
                  $this->API->get('login_url', 'index.php?option=com_users&view=login')!= '' ||
                  ($this->API->get('reg_url', 'index.php?option=com_users&view=registration')!= '' && $userID == 0)
               ) : ?>
               <div id="gkUserArea">
                     <?php echo JText::_('TPL_GK_LANG_USERAREA'); ?>
                     <?php if($userID == 0) : ?>
                        <?php echo JText::_('TPL_GK_LANG_USERAREA_VISITOR'); ?>
                     <?php else : ?>
                        <strong><?php echo $user->get('username'); ?></strong>
                     <?php endif; ?>

                  <?php echo JText::_('TPL_GK_LANG_LOGIN_PRE'); ?>

                   <?php if($this->API->get('login_url', 'index.php?option=com_users&view=login')) : ?>
                      <a href="<?php echo $this->API->get('login_url', 'index.php?option=com_users&view=login'); ?>" id="gkLogin"><?php echo ($userID == 0)? JText::_('TPL_GK_LANG_LOGIN') : JText::_('TPL_GK_LANG_LOGOUT'); ?></a>
                   <?php endif; ?>
                  
                   <?php if($this->API->get('reg_url', 'index.php?option=com_users&view=registration')!= '' && $userID == 0) : ?>
                      <?php echo JText::_('TPL_GK_LANG_REGISTER_PRE'); ?>
                      <a href="<?php echo $this->API->get('reg_url', 'index.php?option=com_users&view=registration'); ?>"><?php echo JText::_('TPL_GK_LANG_REGISTER'); ?></a>
                   <?php endif; ?>
                </div>
                <?php endif; ?>
               
                <?php if($this->API->modules('topnav')) : ?>
                <div id="gkTopMenu">
                   <jdoc:include type="modules" name="topnav" style="<?php echo $this->module_styles['topnav']; ?>"  modnum="<?php echo $this->API->modules('topnav'); ?>" modcol="3" />
                </div>
                <?php endif; ?>
                 </div>
                 
                 <?php if($this->API->get('show_menu', 1)) : ?>
                 <div id="gkMainMenu" <?php echo $this->API->get('menu_type', 'classic') == 'overlay' ? 'class="gkPage gkMenuOverlay"' : 'class="gkPage gkMenuClassic"'; ?>>
                         <?php
                       $this->mainmenu->loadMenu($this->API->get('menu_name','mainmenu'));
                        $this->mainmenu->genMenu($this->API->get('startlevel', 0), $this->API->get('endlevel',-1));
                    ?>
                 </div>
                 <?php endif; ?>
          </div>
       </div>
    </header>

   <div id="gkPageContent">
       <div class="gkPage">
          <section id="gkContent">               
            <div id="gkContentWrap"<?php if($this->API->get('sidebar_position', 'right') == 'left') : ?> class="gkSidebarLeft"<?php endif; ?>>
               <?php if($this->API->modules('top1')) : ?>
               <section id="gkTop1" class="gkCols3<?php if($this->API->modules('top1') > 1) : ?> gkNoMargin<?php endif; ?>">
                  <div>
                     <jdoc:include type="modules" name="top1" style="<?php echo $this->module_styles['top1']; ?>"  modnum="<?php echo $this->API->modules('top1'); ?>" modcol="3" />
                  </div>
               </section>
               <?php endif; ?>
               
               <?php if($this->API->modules('top2')) : ?>
               <section id="gkTop2" class="gkCols3<?php if($this->API->modules('top2') > 1) : ?> gkNoMargin<?php endif; ?>">
                  <div>
                     <jdoc:include type="modules" name="top2" style="<?php echo $this->module_styles['top2']; ?>" modnum="<?php echo $this->API->modules('top2'); ?>" modcol="3" />
                  </div>
               </section>
               <?php endif; ?>
               
               <?php if($this->API->modules('breadcrumb') || $this->getToolsOverride()) : ?>
               <section id="gkBreadcrumb">
                  <?php if($this->API->modules('breadcrumb')) : ?>
                  <jdoc:include type="modules" name="breadcrumb" style="<?php echo $this->module_styles['breadcrumb']; ?>" />
                  <?php endif; ?>
                  
                  <?php if($this->getToolsOverride()) : ?>
                     <?php $this->layout->loadBlock('tools/tools'); ?>
                  <?php endif; ?>
               </section>
               <?php endif; ?>
               
               <?php if($this->API->modules('mainbody_top')) : ?>
               <section id="gkMainbodyTop">
                  <jdoc:include type="modules" name="mainbody_top" style="<?php echo $this->module_styles['mainbody_top']; ?>" />
               </section>
               <?php endif; ?>   
               
               <section id="gkMainbody">
                  <?php if(($this->layout->isFrontpage() && !$this->API->modules('mainbody')) || !$this->layout->isFrontpage()) : ?>
                     <jdoc:include type="component" />
                  <?php else : ?>
                     <jdoc:include type="modules" name="mainbody" style="<?php echo $this->module_styles['mainbody']; ?>" />
                  <?php endif; ?>
               </section>
               
               <?php if($this->API->modules('mainbody_bottom')) : ?>
               <section id="gkMainbodyBottom">
                  <jdoc:include type="modules" name="mainbody_bottom" style="<?php echo $this->module_styles['mainbody_bottom']; ?>" />
               </section>
               <?php endif; ?>
            </div>
            
            <?php if($this->API->modules('sidebar')) : ?>
            <aside id="gkSidebar"<?php if($this->API->modules('sidebar') == 1) : ?> class="gkOnlyOne"<?php endif; ?>>
               <div>
                  <jdoc:include type="modules" name="sidebar" style="<?php echo $this->module_styles['sidebar']; ?>" />
               </div>
            </aside>
            <?php endif; ?>
          </section>
      </div>
   </div>
   
   <?php if($this->API->modules('bottom1')) : ?>
   <section id="gkBottom1" class="gkPage">
      <div class="gkCols6<?php if($this->API->modules('bottom1') > 1) : ?> gkNoMargin<?php endif; ?>">
         <jdoc:include type="modules" name="bottom1" style="<?php echo $this->module_styles['bottom1']; ?>" modnum="<?php echo $this->API->modules('bottom1'); ?>" />
      </div>
   </section>
   <?php endif; ?>
   
    <?php if($this->API->modules('bottom2')) : ?>
    <section id="gkBottom2" class="gkPage">
       <div class="gkCols6<?php if($this->API->modules('bottom2') > 1) : ?> gkNoMargin<?php endif; ?>">
          <jdoc:include type="modules" name="bottom2" style="<?php echo $this->module_styles['bottom2']; ?>" modnum="<?php echo $this->API->modules('bottom2'); ?>" />
       </div>
    </section>
    <?php endif; ?>
   
    <?php if($this->API->modules('bottom3')) : ?>
    <section id="gkBottom3">
       <div class="gkCols6<?php if($this->API->modules('bottom3') > 1) : ?> gkNoMargin<?php endif; ?> gkPage">
          <jdoc:include type="modules" name="bottom3" style="<?php echo $this->module_styles['bottom3']; ?>" modnum="<?php echo $this->API->modules('bottom3'); ?>" />
       </div>
    </section>
    <?php endif; ?>
   
    <?php if($this->API->modules('lang')) : ?>
    <section id="gkLang">
       <div class="gkPage">
            <jdoc:include type="modules" name="lang" style="<?php echo $this->module_styles['lang']; ?>" />
         </div>
    </section>
    <?php endif; ?>
   
    <?php $this->layout->loadBlock('footer'); ?>
      <?php $this->layout->loadBlock('social'); ?>
      <?php $this->layout->loadBlock('tools/cart'); ?>
      <?php $this->layout->loadBlock('tools/login'); ?>
         
   <jdoc:include type="modules" name="debug" />
</body>
</html>
*

shurakana

  • Давно я тут
  • 792
  • 50 / 6
Да, именно такой. <head> присутствует, пробуй.. если не получится (конфликты будут), попробуй добавить тот скрипт в файл head.php там есть место где скрипты и CSS подключается, надо чтобы скрипт был подключен после библиотеки jquery.
Эта подпись отображается внизу каждого Моего сообщения. Я также могу использовать BB код и смайлы.
*

makay

  • Осваиваюсь на форуме
  • 28
  • 0 / 0
Да, именно такой. <head> присутствует, пробуй.. если не получится (конфликты будут), попробуй добавить тот скрипт в файл head.php там есть место где скрипты и CSS подключается, надо чтобы скрипт был подключен после библиотеки jquery.
Теперь вернемся к нашим баранам:

Цитировать
<form id="идтвоейформы" >
   <script>$(function(){$('#идтвоейформы').attr({'action': 'здесь/обработчик/указываешь'});});</script>
</form>
Такую штуку мне нужно впихнуть в head. Вроде так и не разобрались с id формы и Обработчик. Что это за фрукты? Есть предложения
*

shurakana

  • Давно я тут
  • 792
  • 50 / 6
Пройди беплатный курс Евгения Попова по HTML, хотя бы теорию знать будешь и термины. Так нельзя делать сайт. Это ведь не гвозди тебе забивать.
Эта подпись отображается внизу каждого Моего сообщения. Я также могу использовать BB код и смайлы.
*

makay

  • Осваиваюсь на форуме
  • 28
  • 0 / 0
Пройди беплатный курс Евгения Попова по HTML, хотя бы теорию знать будешь и термины. Так нельзя делать сайт. Это ведь не гвозди тебе забивать.
Пока я вникаю в верстку советуешь плагин с капчей поставить?
*

shurakana

  • Давно я тут
  • 792
  • 50 / 6
Другого варианта я не вижу..
Эта подпись отображается внизу каждого Моего сообщения. Я также могу использовать BB код и смайлы.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Не открываются файлы после загрузки на сайт

Автор GeniusUd

Ответов: 1
Просмотров: 853
Последний ответ 01.02.2021, 17:19:38
от voland
Форма комментариев для разных групп пользователей

Автор recived

Ответов: 1
Просмотров: 879
Последний ответ 21.02.2018, 18:00:21
от recived
как добавить ссылку в вк на сайт

Автор Рашид

Ответов: 1
Просмотров: 1128
Последний ответ 01.11.2017, 13:50:04
от Akeksandr
k2 модуль комментариев

Автор Acme

Ответов: 1
Просмотров: 1274
Последний ответ 21.03.2017, 17:16:52
от darkghost
Перенос материалов К2 на другой сайт

Автор Ctrogo

Ответов: 11
Просмотров: 5018
Последний ответ 18.03.2017, 01:18:32
от spas