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

Dimir

  • Захожу иногда
  • 426
  • 13 / 1
Покупка товара
« : 08.02.2014, 02:29:47 »
Помогите допилить, если не так трудно. Опишу коротко, если человек не зарегистрирован на сайте то при клике оформить заказ перекидвает на страничку с тремя предложениями, авторизоваться, регистрация, покупка без регистрации.
Я сделал методом вывода табов эти три вещи, вот итог http://floomby.ru/s2/24kdae . Но на втором шаге проблема с регистрацией.Она не срабатывает по нажатию на кнопку Регистрация. Код я вытащил полностью из файла register.php.получилось так
Код
<?php defined( '_JEXEC' ) or die(); ?>
 <div align="center">
   <h1><strong>Вы не авторизованы на сайте</strong></h1>
 </div><br/<hr/>
 <div class="login">
    {tab Авторизоваться}<div class="login_block">
              <span class="small_header"><?php echo _JSHOP_HAVE_ACCOUNT ?>.</span>
              <span><?php echo _JSHOP_PL_LOGIN ?></span>
              <form method = "post" action = "<?php print SEFLink('index.php?option=com_jshopping&controller=user&task=loginsave', 0,0, $this->config->use_ssl)?>" name = "jlogin">
                <div id="username">
                    <label><?php echo _JSHOP_USERNAME ?>: </label>
                    <span><input type = "text" name = "username" value = "" class = "inputbox" /></span>
                </div>
                <div id="password">
                    <label><?php echo _JSHOP_PASSWORT ?>: </label>
                    <span><input type = "password" name = "passwd" value = "" class = "inputbox" /></span>
                </div>
                <div id="lost_password">
                <label for="remember_me"><?php echo _JSHOP_REMEMBER_ME ?></label><input type="checkbox" name="remember" id="remember_me" value="yes" /><br />
                    <input type="submit" class="button" value="<?php echo _JSHOP_LOGIN ?>" /><br />                       
                    <a href = "<?php print $this->href_lost_pass ?>"><?php echo _JSHOP_LOST_PASSWORD ?></a>
                </div>
                <input type = "hidden" name = "return" value = "<?php print $this->return ?>" />
                <?php echo JHtml::_('form.token');?>
              </form>   
        </div>
       
        {tab Зарегестрироваться}
<?php defined( '_JEXEC' ) or die(); ?>
<?php
$config_fields=$this->config_fields;
include(dirname(__FILE__)."/register.js.php");
?>
<div class="jshop">
    <form action="<?php print SEFLink('index.php?option=com_jshopping&controller=user&task=registersave',1,0, $this->config->use_ssl)?>" method="post" name="loginForm" onsubmit="return validateRegistrationForm('<?php print $this->urlcheckdata ?>', this.name)" autocomplete="off">
    <?php echo $this->_tmpl_register_html_1?>
    <div class="jshop_register user_info">

<fieldset>

    <?php if ($config_fields['title']['display']){?>
<div>
<label class="name">
<?php echo _JSHOP_REG_TITLE; ?><?php if ($config_fields['title']['require']){?><span>*</span><?php } ?>
</label>
<span class="input">
<?php print $this->select_titles ?>
</span>
</div>
  <?php } ?>
        <?php if ($config_fields['u_name']['display']){?>
        <div>
          <label class="name">
            <?php echo _JSHOP_USERNAME ?> <?php if ($config_fields['u_name']['require']){?><span>*</span><?php } ?>
          </label>
          <span class="input">
            <input type="text" name="u_name" id="u_name" value="" class="inputbox" />
        </span>
            <span class="requiredtext">* <?php echo _JSHOP_REQUIRED; ?></span></div>
        <?php } ?>
 
    <?php if ($config_fields['f_name']['display']){?>
<div>
<label class="name">
<?php echo _JSHOP_F_NAME; ?> <?php if ($config_fields['f_name']['require']){?><span>*</span><?php } ?>
</label>
<span class="input">
<input type="text" name="f_name" id="f_name" value="" class="inputbox" />
</span>
    <span class="requiredtext">* <?php echo _JSHOP_REQUIRED; ?></span></div>
  <?php } ?>  
 
    <?php if ($config_fields['l_name']['display']){?>
<div>
<label class="name">
<?php echo _JSHOP_L_NAME; ?> <?php if ($config_fields['l_name']['require']){?><span>*</span><?php } ?>
</label>
<span class="input">
<input type="text" name="l_name" id="l_name" value="" class="inputbox" />
</span>
    <span class="requiredtext">* <?php echo _JSHOP_REQUIRED; ?></span></div>
  <?php } ?>  

<?php if ($config_fields['m_name']['display']){?>
        <div>
<label class="name">
<?php print _JSHOP_M_NAME ?> <?php if ($config_fields['m_name']['require']){?><span>*</span><?php } ?>
</label>
<span class="input">
<input type = "text" name = "m_name" id = "m_name" value = "" class = "inputbox" />
</span>
    <span class="requiredtext">* <?php echo _JSHOP_REQUIRED; ?></span></div>
        <?php } ?>

        <?php if ($config_fields['firma_name']['display']){?>
<div>
<label class="name">
            <?php echo _JSHOP_FIRMA_NAME;  ?> <?php if ($config_fields['firma_name']['require']){?><span>*</span><?php } ?>
</label>
<span class="input">
            <input type="text" name="firma_name" id="firma_name" value="" class="inputbox" />
</span>
    <span class="requiredtext">* <?php echo _JSHOP_REQUIRED; ?></span></div>
        <?php } ?>

        <?php if ($config_fields['client_type']['display']){?>
<div>
<label class="name">
            <?php echo _JSHOP_CLIENT_TYPE; ?> <?php if ($config_fields['client_type']['require']){?><span>*</span><?php } ?>
</label>
<span class="input">
            <?php print $this->select_client_types;?>
</span>
</div>
        <?php } ?>

        <?php if ($config_fields['firma_code']['display']){?>
        <div id='tr_field_firma_code' <?php if ($config_fields['client_type']['display']){?>style="display:none;"<?php }?>>
        <label class="name">
            <?php echo _JSHOP_FIRMA_CODE; ?> <?php if ($config_fields['firma_code']['require']){?><span>*</span><?php } ?>
        </label>
        <span class="input">
            <input type="text" name="firma_code" id="firma_code" value="" class="inputbox" />
        </span>
            <span class="requiredtext">* <?php echo _JSHOP_REQUIRED; ?></span></div>

        <?php } ?>

        <?php if ($config_fields['tax_number']['display']){?>
        <div id='tr_field_tax_number' <?php if ($config_fields['client_type']['display']){?>style="display:none;"<?php }?>>
        <label class="name">
            <?php echo _JSHOP_VAT_NUMBER; ?> <?php if ($config_fields['tax_number']['require']){?><span>*</span><?php } ?>
        </label>
        <span class="input">
            <input type="text" name="tax_number" id="tax_number" value="" class="inputbox" />
        </span>
            <span class="requiredtext">* <?php echo _JSHOP_REQUIRED; ?></span></div>
        <?php } ?>

        <?php if ($config_fields['email']['display']){?>
        <div>
        <label class="name">
            <?php echo _JSHOP_EMAIL; ?> <?php if ($config_fields['email']['require']){?><span>*</span><?php } ?>
        </label>
          <span class="input">
            <input type="text" name="email" id="email" value="" class="inputbox" />
          </span>
            <span class="requiredtext">* <?php echo _JSHOP_REQUIRED; ?></span></div>
        <?php } ?>

        <?php if ($config_fields['email2']['display']){?>
        <div>
          <label class="name">
            <?php echo _JSHOP_EMAIL2; ?> <?php if ($config_fields['email2']['require']){?><span>*</span><?php } ?>
          </label>
          <span class="input">
            <input type="text" name="email2" id="email2" value="" class="inputbox" />
          </span>
          <span class="requiredtext">* <?php echo _JSHOP_REQUIRED; ?></span></div>
        <?php } ?>
<?php if ($config_fields['birthday']['display']){?>
        <div>
<label class="name">
<?php print _JSHOP_BIRTHDAY?> <?php if ($config_fields['birthday']['require']){?><span>*</span><?php } ?>
</label>
<span class="input">           
<?php echo JHTML::_('calendar', '', 'birthday', 'birthday', $this->config->field_birthday_format, array('class'=>'inputbox', 'size'=>'25', 'maxlength'=>'19'));?>
</span>
        </div>
        <?php } ?>
       
      </fieldset>
    </div>

    <?php echo $this->_tmpl_register_html_2?>


<?php if ($config_fields['home']['display'] or $config_fields['apartment']['display'] or $config_fields['street']['display'] or $config_fields['zip']['display'] or $config_fields['city']['display'] or $config_fields['state']['display'] or $config_fields['country']['display']) {?>
    <div class="jshop_register user_address">

  <fieldset>
 
        <?php if ($config_fields['home']['display']){?>
        <div>
          <label class="name">
            <?php echo _JSHOP_HOME; ?> <?php if ($config_fields['home']['require']){?><span>*</span><?php } ?>
          </label>
          <span class="input">
            <input type="text" name="home" id="home" value="" class="inputbox" />
        </span>
            <span class="requiredtext">* <?php echo _JSHOP_REQUIRED; ?></span></div>
        <?php } ?>
<?php if ($config_fields['zip']['display']){?>
        <div>
          <label class="name">
            <?php echo _JSHOP_ZIP ?> <?php if ($config_fields['zip']['require']){?><span>*</span><?php } ?>
          </label>
          <span class="input">
            <input type="text" name="zip" id="zip" value="" class="inputbox" />
        </span>
            <span class="requiredtext">* <?php echo _JSHOP_REQUIRED; ?></span></div>
        <?php } ?>

        <?php if ($config_fields['city']['display']){?>
        <div>
          <label class="name">
            <?php echo _JSHOP_CITY ?> <?php if ($config_fields['city']['require']){?><span>*</span><?php } ?>
          </label>
          <span class="input">
            <input type="text" name="city" id="city" value="" class="inputbox" />
        </span>
            <span class="requiredtext">* <?php echo _JSHOP_REQUIRED; ?></span></div>
        <?php } ?>
        <?php if ($config_fields['street']['display']){?>
        <div>
          <label class="name">
            <?php echo _JSHOP_STREET_NR; ?> <?php if ($config_fields['street']['require']){?><span>*</span><?php } ?>
          </label>
          <span class="input">
            <input type="text" name="street" id="street" value="" class="inputbox" />
        </span>
            <span class="requiredtext">* <?php echo _JSHOP_REQUIRED; ?></span></div>
        <?php } ?>
        <?php if ($config_fields['apartment']['display']){?>
        <div>
          <label class="name">
            <?php echo _JSHOP_APARTMENT; ?> <?php if ($config_fields['apartment']['require']){?><span>*</span><?php } ?>
          </label>
          <span class="input">
            <input type="text" name="apartment" id="apartment" value="" class="inputbox" />
        </span>
            <span class="requiredtext">* <?php echo _JSHOP_REQUIRED; ?></span></div>
        <?php } ?>
        <?php if ($config_fields['mobil_phone']['display']){?>
        <div>
          <label class="name">
            <?php echo _JSHOP_MOBIL_PHONE ?> <?php if ($config_fields['mobil_phone']['require']){?><span>*</span><?php } ?>
          </label>
          <span class="input">
            <input type="text" name="mobil_phone" id="mobil_phone" value="" class="inputbox" />
        </span>
            <span class="requiredtext">* <?php echo _JSHOP_REQUIRED; ?></span></div>
        <?php } ?>

        <?php if ($config_fields['state']['display']){?>
        <div>
          <label class="name">
            <?php echo _JSHOP_STATE ?> <?php if ($config_fields['state']['require']){?><span>*</span><?php } ?>
          </label>
          <span class="input">
            <input type="text" name="state" id="state" value="" class="inputbox" />
        </span>
            <span class="requiredtext">* <?php echo _JSHOP_REQUIRED; ?></span></div>
        <?php } ?>

        <?php if ($config_fields['country']['display']){?>
        <div>
          <label class="name">
            <?php echo _JSHOP_COUNTRY ?> <?php if ($config_fields['country']['require']){?><span>*</span><?php } ?>
          </label>
          <span class="input">
            <?php print $this->select_countries ?>
        </span>
        </div>
        <?php } ?>
       
      </fieldset>
 
    </div>
<?php } ?>
    <?php echo $this->_tmpl_register_html_3?>
     <?php echo $this->_tmpl_register_html_4?>


    <div class="jshop_register user_login">
     
  <fieldset>
  <?php if ($config_fields['password']['display']){?>
        <div>
          <label class="name">
            <?php echo _JSHOP_PASSWORD ?> <?php if ($config_fields['password']['require']){?><span>*</span><?php } ?>
          </label>
          <span class="input">
            <input type="password" name="password" id="password" value="" class="inputbox" />
        </span>
            <span class="requiredtext">* <?php echo _JSHOP_REQUIRED; ?></span></div>
        <?php } ?>

        <?php if ($config_fields['password_2']['display']){?>
        <div>
          <label class="name">
            <?php echo _JSHOP_PASSWORD_2 ?> <?php if ($config_fields['password_2']['require']){?><span>*</span><?php } ?>
          </label>
          <span class="input">
            <input type="password" name="password_2" id="password_2" value="" class="inputbox" />
        </span>
            <span class="requiredtext">* <?php echo _JSHOP_REQUIRED; ?></span></div>
        <?php } ?>
        <?php if ($config_fields['privacy_statement']['display']){?>
        <div>
          <label class="name">
            <a class="privacy_statement" href="#" onclick="window.open('<?php print SEFLink('index.php?option=com_jshopping&controller=content&task=view&page=privacy_statement&tmpl=component', 1);?>','window','width=800, height=600, scrollbars=yes, status=no, toolbar=no, menubar=no, resizable=yes, location=no');return false;">
            <?php echo _JSHOP_PRIVACY_STATEMENT?> <?php if ($config_fields['privacy_statement']['require']){?><span>*</span><?php } ?>
            </a>           
          </label>
          <span>
            <input type="checkbox" name="privacy_statement" id="privacy_statement" value="1" />
          </span>
        </div>
        <?php } ?>             

      </fieldset>
 
    </div>

    <?php echo $this->_tmpl_register_html_5?><div align="center"><?php echo $this->_tmpl_register_html_6?>
     
      <?php echo JHtml::_('form.token');?>
      <input type="submit" value="<?php echo _JSHOP_SEND_REGISTRATION; ?>" class="button" />
     
    </div>
  </form>
</div>   
</div>
<div class="nvg_clear"></div>
</div>
<div>
{tab <a href="<?php print SEFLink('index.php?option=com_jshopping&controller=checkout&task=step2',1,0, $this->config->use_ssl);?>">Купить без регистрации</a>}
{/tabs}   
Что не так, почему не срабатывает регистрация?
-==Dimir==-
*

Dimir

  • Захожу иногда
  • 426
  • 13 / 1
Re: Покупка товара
« Ответ #1 : 08.02.2014, 21:55:04 »
Может кто пнет в правильном направлении ?
-==Dimir==-
*

nevigen

  • Moderator
  • 10452
  • 863 / 25
  • http://n*****n.com
Re: Покупка товара
« Ответ #2 : 08.02.2014, 21:58:40 »
ошибки ?
Профессиональные / Бесплатные решения для JoomShopping
Не лечи бесплатно, ибо тот, кто лечится бесплатно, рано или поздно перестает ценить свое здоровье,
а тот, кто лечит бесплатно, рано или поздно перестает ценить результаты своего труда/ (с) Гиппократ?
Не ищите ответов, ищите решение !
*

Dimir

  • Захожу иногда
  • 426
  • 13 / 1
Re: Покупка товара
« Ответ #3 : 08.02.2014, 22:23:14 »
ошибки ?

В отладке нет ничего вроде.Кнопка просто не срабатывает и все.
-==Dimir==-
*

nevigen

  • Moderator
  • 10452
  • 863 / 25
  • http://n*****n.com
Re: Покупка товара
« Ответ #4 : 08.02.2014, 22:45:14 »
не отладка.
включите показ ошибок
http://prntscr.com/2qokkb

и если старый ДИВный шаблон, посотрите в цсс скрытие полей в блоке адреса..
была проблема давно.. возможна она же и у Вас.
« Последнее редактирование: 08.02.2014, 22:48:45 от nevigen »
Профессиональные / Бесплатные решения для JoomShopping
Не лечи бесплатно, ибо тот, кто лечится бесплатно, рано или поздно перестает ценить свое здоровье,
а тот, кто лечит бесплатно, рано или поздно перестает ценить результаты своего труда/ (с) Гиппократ?
Не ищите ответов, ищите решение !
*

Dimir

  • Захожу иногда
  • 426
  • 13 / 1
Re: Покупка товара
« Ответ #5 : 08.02.2014, 22:50:26 »
Включил.Чет пипец тут ))
Шаблон новый
-==Dimir==-
*

nevigen

  • Moderator
  • 10452
  • 863 / 25
  • http://n*****n.com
Re: Покупка товара
« Ответ #6 : 08.02.2014, 22:53:13 »
ага
увидел и убежал...
фронт работ виден стал ?
Ж3 и шаб на Ж 1.7 ? крутовато

shnodoubles - сразу фтопку.

остальное как уберете может можно будет что то найти...
на стандартном виде работает ном ?
только после табов стало глючить ?
Профессиональные / Бесплатные решения для JoomShopping
Не лечи бесплатно, ибо тот, кто лечится бесплатно, рано или поздно перестает ценить свое здоровье,
а тот, кто лечит бесплатно, рано или поздно перестает ценить результаты своего труда/ (с) Гиппократ?
Не ищите ответов, ищите решение !
*

Dimir

  • Захожу иногда
  • 426
  • 13 / 1
Re: Покупка товара
« Ответ #7 : 08.02.2014, 22:54:47 »
как это все лечить?
Все работает нормально, кроме этой фишки.
В нормальном виде все работает,не обрабатывает в табе
-==Dimir==-
*

nevigen

  • Moderator
  • 10452
  • 863 / 25
  • http://n*****n.com
Re: Покупка товара
« Ответ #8 : 08.02.2014, 23:00:41 »
Все работает нормально, кроме этой фишки.
т.е. вот то все что не видно... это нормально ?
значит надо смотреть таб...

а логин где ?
пароль для ввода есть а логин ?

П.С. http://prntscr.com/2qor71
Профессиональные / Бесплатные решения для JoomShopping
Не лечи бесплатно, ибо тот, кто лечится бесплатно, рано или поздно перестает ценить свое здоровье,
а тот, кто лечит бесплатно, рано или поздно перестает ценить результаты своего труда/ (с) Гиппократ?
Не ищите ответов, ищите решение !
*

Dimir

  • Захожу иногда
  • 426
  • 13 / 1
Re: Покупка товара
« Ответ #9 : 08.02.2014, 23:07:46 »
т.е. вот то все что не видно... это нормально ?
значит надо смотреть таб...

а логин где ?
Все работает отлично, без ошибок и так далее.Логин в самом верху, карточку переделал
пароль для ввода есть а логин ?

П.С. http://prntscr.com/2qor71
Логин в самом верху,карточка переделана,а так все норм работает.Ошибки конечно я все буду исправлять,это не хорошо что я увидел )
-==Dimir==-
*

nevigen

  • Moderator
  • 10452
  • 863 / 25
  • http://n*****n.com
Re: Покупка товара
« Ответ #10 : 08.02.2014, 23:12:42 »
вам шаблон надо менять.
взять Йошный но на Варп7, а не архаичный Варп5.5.
Профессиональные / Бесплатные решения для JoomShopping
Не лечи бесплатно, ибо тот, кто лечится бесплатно, рано или поздно перестает ценить свое здоровье,
а тот, кто лечит бесплатно, рано или поздно перестает ценить результаты своего труда/ (с) Гиппократ?
Не ищите ответов, ищите решение !
*

Dimir

  • Захожу иногда
  • 426
  • 13 / 1
Re: Покупка товара
« Ответ #11 : 08.02.2014, 23:14:36 »
вам шаблон надо менять.
взять Йошный но на Варп7, а не архаичный Варп5.5.

Ладно, щас просто Линк сделаю на страничку регистрации, а так задумка не плохая.Хотел реализовать подобие в личном кабинете.
-==Dimir==-
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

В списке товаров вывести названия категорий каждого товара

Автор shop-user

Ответов: 5
Просмотров: 2867
Последний ответ 25.01.2022, 06:05:12
от kit2m2
Плагин - Инфоблок товара в списке товаров [Скачать]

Автор kit2m2

Ответов: 13
Просмотров: 3131
Последний ответ 20.10.2021, 14:51:08
от kit2m2
Автоматическая генерация кода товара (плагин)

Автор maslybs

Ответов: 8
Просмотров: 3559
Последний ответ 30.08.2021, 20:21:25
от nevigen
Таблица размеров (и т.п.) Плагин модульных позиций для атрибутов на странице товара [Скачать]

Автор kit2m2

Ответов: 39
Просмотров: 7991
Последний ответ 16.05.2021, 18:16:50
от kit2m2
AJAX пагинация товара

Автор ExJTMaster

Ответов: 10
Просмотров: 4079
Последний ответ 12.10.2020, 16:20:18
от sivers