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

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Почему нет? все переделать можно.
*

text

  • Захожу иногда
  • 93
  • 0 / 0
Arkadiy, спасибо за компонент поиска.

На всех страницах сайта (кроме страниц вывода результата поиска через Ваш компонент поиска)
в поле категории стоит первая категория списка,
а выбор "Выбрать категорию" и "Все категрии" ОТсутствует.

Если произвести поиск, то на странице результата поиска выбор "Выбрать категорию" и "Все категрии" ПРИсутствует.

Подскажите, пожалуйста, как можно исправить, чтобы
выбор "Выбрать категорию" и "Все категрии" присутствовал везде.


РЕШЕНИЕ:
опции "Выбрать категорию" и "Все категрии" - везде на сайте

www\modules
файл - mod_vm_ext_search.php  

строки
--------

      if ($product_id and !$category_id) {
         $q = "SELECT category_id from #__{vm}_product_category_xref WHERE product_id='$product_id'";
         $db->setQuery($q);   $db->query();
         $db->next_record();
         if (!$db->f("category_id")) {
            echo "<option value=\"\">Выбрать категорию</option>\n";
            echo "<option value=\"-1\">Все категории</option>\n";
         }
         list_tree($db->f("category_id"));
      }
      elseif ($category_id) {
         echo "<option value=\"\">Выбрать категорию</option>\n";
            echo "<option value=\"-1\">Все категории</option>\n";
         list_tree($category_id);
      }
      else {
         echo "<option value=\"\">Выбрать категорию</option>\n";
            echo "<option value=\"-1\">Все категории</option>\n";
         list_tree();
      }

      echo "</select>\n";

--------

заменить на :
--------
            
echo "<option value=\"\">Выбрать категорию</option>\n";
echo "<option value=\"-1\">Все категории</option>\n";
list_tree();
echo "</select>\n";
--------

РЕШЕНИЕ:
Сортировка вывода результата по цене:

строку  
$q .= "ORDER BY #__{vm}_product.product_id DESC ";

заменить на
------
$q .= "ORDER BY #__{vm}_product_price.product_price ";
« Последнее редактирование: 14.06.2011, 21:04:57 от text »
*

FED

  • Осваиваюсь на форуме
  • 16
  • 0 / 0
Скажите пожалуйста, как изменить текст ("Выбрать тип товара") в выпадающем списке, (на начальном этапе я изменил, отредактировав ru-RU.mod_vm_universal_search.ini, но при выборе (категории или производителя), текст снова меняется на "Выбрать тип товара". Нужно чтобы не изменялся обратно на "Выбрать тип товара".
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
В языковом файле компонента сделать то-же самое.
*

FED

  • Осваиваюсь на форуме
  • 16
  • 0 / 0
В каком компоненте? VirtueMart? Не подскажете где его найти?
Нашел. Дело было не в языковом файле. А в хелпере /administrator/components/com_vm_ext_search/helper.php
Он был жестко прописан.
Код
  <select class="inpbox" name="product_type_id" id="vmdTypSel" onchange="getTypeSelec()">
        <option value="">Выбрать тип товара</option>
Arkadiy Спасибо за компонент и оперативную поддержку.
*

anonim2008

  • Новичок
  • 2
  • 0 / 0
Добрый день, извините если уже обсуждалось, но так и не понял Почему "выбрать категорию" и "Все категории" выводятся все имеющиеся характеристики, т.е по логики не чего выводить там не нужно
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Платная версия запоминает выбранные параметры, сделать это не просто.
*

podar61

  • Новичок
  • 2
  • 0 / 0
Выделение категорий:
Совет автора http://joomlaforum.ru/index.php?topic=69962.90

components/com_vm_ext_search_free/files/unisearch.php
заменить if ($level == 1) $style = "style='font-weight:bold;'";
          else  $style = "";

на   switch ($level)
    {
        case 1:
            $style = "style='font-weight: bold;color:#2445A3;font-size:14px;'";
            break;
        case 2:
            $style = "style='font-weight: bold;font-size:12px;'";
            break;
case 3:
            $style = "style='margin-left: 20px;'";
            break;
       
        default:
            $style = "";
            break;
    }

Настроены 3 уровня. Разобраться легко.
*

chendger

  • Осваиваюсь на форуме
  • 48
  • 0 / 0
Если это действительно #mod_typ_div, то присвой ему нулевую высоту в стилях или вообще скрой.

Почти помогло - поставил высоту 0, но теперь вылазит походу еще что-то))
Если есть времечко глянь пожалуйста: http://santehnika-vanna.ru/
Слева внизу, когда щелкаешь на производителя например.
*

ladan

  • Осваиваюсь на форуме
  • 29
  • 0 / 0
у меня такая ошибка вылазиет в админке после установки компонента

 как быть? модуль включаю и сайт не работает :(
*

NightDzzzR

  • Новичок
  • 1
  • 0 / 0
Вот что происходит после установки
*

anester

  • Осваиваюсь на форуме
  • 45
  • 1 / 0
В платной версии можно сделать выпадающий список (как, например, тут: http://adf.ly/282518/banner/http://code.google.com/p/dropdown-check-list/  )?
*

rk3dnp

  • Захожу иногда
  • 320
  • 5 / 0
Подскажите пожалуйста, строка <?php $uniSearch->list_manufacturer($manufacturers, $mf_id, $conf['viev_man'], 'mod_'); выводит выпадающее меню с производителями а как так же сделать для типов товаров. Удобней будет сделать шаблон поиска.
*

ladan

  • Осваиваюсь на форуме
  • 29
  • 0 / 0
Аркадий, не посоветуешь как от этой ошибки избавиться?
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Подскажите пожалуйста, строка <?php $uniSearch->list_manufacturer($manufacturers, $mf_id, $conf['viev_man'], 'mod_'); выводит выпадающее меню с производителями а как так же сделать для типов товаров. Удобней будет сделать шаблон поиска.
посмотри по порядку следования.
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Вот что происходит после установки
Про это уже было.
*

dimma111

  • Захожу иногда
  • 83
  • 0 / 0
Здравствуйте! У меня VirtueMart 1.1.8. После установки модуля , сделал все по инструкции, но тудакуда я вставляю текст <jdoc:include type="component" />  выводится VirtueMart еще раз, а не результат поиска((. В чем дело? Знаю где-то наверное я тупанул;) шаблон Milkyway (joomlовский).
*

Infosakh

  • Завсегдатай
  • 1257
  • 67 / 0
надо не вставлять а заменить эту строчку тем что в теме написано  ^-^
*

Infosakh

  • Завсегдатай
  • 1257
  • 67 / 0
Поставил компонент, модуль, все настроил под себя, Аркадий молодец, плюс однозначно  ^-^ Заинтересовала меня пагинация, прочитал специально всю тему все ответы и никто почему то на это не обратил внимание, впервые увидел пагинацию реализованную на ajax'е, сейчас вот сижу разбираюсь как эту пагинацию внедрить на сайт и в хак с переходом из категорий тоже на аджаксе  ^-^
*

dimma111

  • Захожу иногда
  • 83
  • 0 / 0
ура! заработоло! супер! спасибо! хД
*

baza

  • Осваиваюсь на форуме
  • 18
  • 1 / 0
Аркадий,

Хороший компонент и модуль, только у меня почему-то не работает кнопка "Поиск"

Вставил Ваш код:

Код
<div id="main_search">
         <jdoc:include type="component" />
</div>

Однако не работает. Может шаблон у меня такой хитрый: в index.php нету тегов HTML, а в файле шаблона component.php уже стоял код:

Код
<jdoc:include type="component" />

Можете помочь?

Спасибо
*

Infosakh

  • Завсегдатай
  • 1257
  • 67 / 0
сюда выложите код индекс.пхп, куда там вставили
<div id="main_search">
         <jdoc:include type="component" />
</div>
*

baza

  • Осваиваюсь на форуме
  • 18
  • 1 / 0
Вставлял только в component.php, в тег body. Шаблон на фрэймворке Т3 -http://wiki.joomlart.com/wiki/JA_Template_Framework/Overview
« Последнее редактирование: 20.08.2011, 04:29:48 от baza »
*

Infosakh

  • Завсегдатай
  • 1257
  • 67 / 0
В теме прекрасно все расписано куда вставлять этот код, причем тут конфигурэйшен.пхп??
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Правило простое. Где-бы там ни было заменяем
Код
<jdoc:include type="component" />
на
Код
<div id="main_search">
         <jdoc:include type="component" />
</div>
и все.
*

Infosakh

  • Завсегдатай
  • 1257
  • 67 / 0
Правило простое. Где-бы там ни было заменяем
Код
<jdoc:include type="component" />
на
Код
<div id="main_search">
         <jdoc:include type="component" />
</div>
и все.
позволю себе поспорить, специально у себя сделал ситуацию, в конфигурэйшен.пхп запихал код
<div id="main_search">
         <jdoc:include type="component" />
</div>
в индекс.пхп оставил <jdoc:include type="component" /> и удалял вообще эту строчку ничего не происходило по клику на поиск.
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Одну минуточку, я-же по-моему ясно написал, что заменяем там, где оно есть, а не пишем куда попало. А места могут быть разные, шаблоны сейчас сложные.
*

Infosakh

  • Завсегдатай
  • 1257
  • 67 / 0
у меня и в индексе и в конфигурэйшене есть эта строчка. Замена только в индексе делает модуль работоспособным. Ну а про шаблон я уже сказал, код из индекса нужен, раз человек делает замену в конфигурэйшене..пхп и модуль не работает.
*

baza

  • Осваиваюсь на форуме
  • 18
  • 1 / 0
Правило простое. Где-бы там ни было заменяем
Код
<jdoc:include type="component" />
на
Код
<div id="main_search">
         <jdoc:include type="component" />
</div>
и все.

Спасибо за ответы. Так я тоже пробовал, но кнопка "Поиск" по прежнему не работает.

Высылаю код своего index.php

Код
<?php



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

include_once (dirname(__FILE__).DS.'libs'.DS.'gk.template.helper.php');

$tmpl = GKTemplateHelper::getInstance($this, array('ui', GK_TOOL_SCREEN, GK_TOOL_MENU, 'main_layout', 'direction'));

//Calculate the width of template
$tmplWidth = '';
$tmplWrapMin = '100%';
switch ($tmpl->getParam(GK_TOOL_SCREEN)){
case 'auto':
$tmplWidth = '97%';
break;
case 'fluid':
$tmplWidth = intval($tmpl->getParam('gk_screen-fluid-fix-gk_screen_width'));
$tmplWidth = $tmplWidth ? $tmplWidth.'%' : '90%';
break;
case 'fix':
$tmplWidth = intval($tmpl->getParam('gk_screen-fluid-fix-gk_screen_width'));
$tmplWrapMin = $tmplWidth ? ($tmplWidth+1).'px' : '771px';
$tmplWidth = $tmplWidth ? $tmplWidth.'px' : '770px';
break;
default:
$tmplWidth = intval($tmpl->getParam(GK_TOOL_SCREEN));
$tmplWrapMin = $tmplWidth ? ($tmplWidth+1).'px' : '983px';
$tmplWidth = $tmplWidth ? $tmplWidth.'px' : '982px';
break;
}

$tmpl->setParam ('tmplWidth', $tmplWidth);
$tmpl->setParam ('tmplWrapMin', $tmplWrapMin);

//Main navigation
$gk_menutype = $tmpl->getMenuType();
$gkmenu = null;
if ($gk_menutype && $gk_menutype != 'none') {
$gkparams = new JParameter('');
$gkparams->set('menutype', $tmpl->getParam('menutype', 'mainmenu') );
$gkparams->set('menu_images_align', 'left' );
$gkparams->set('menupath', $tmpl->templateurl().'/gk_menus');
$gkparams->set('menu_images', 1); //0: not show image, 1: show image which set in menu item
$gkparams->set('menu_background', 1); //0: image, 1: background
$gkparams->set('mega-colwidth', 200); //Megamenu only: Default column width
$gkparams->set('mega-style', 1); //Megamenu only: Menu style.
$gkparams->set('rtl',($tmpl->getParam('direction')=='rtl' || $tmpl->direction == 'rtl'));
$gkmenu = $tmpl->loadMenu($gkparams, $gk_menutype);
}
//End for main navigation

$layout = $tmpl->getLayout ();

if ($layout) {
$tmpl->display($layout);
}

function gkCSSReplace(){
    $buf = JResponse::getBody();
   
    preg_match_all('/\<link.*href=".*(modules|components).*\/\>/', $buf, $matches);
    for($i = 0; $i < count($matches[0]); $i++){
        $buf = str_replace($matches[0][$i], '', $buf);       
    }
   
    $startpoint = strpos($buf, '</title>');
    $startpoint += 8;
    $buf_start = substr($buf, 0, $startpoint);
    $buf_end = substr($buf, $startpoint);
    $buf_links = '';
    for($i = 0; $i < count($matches[0]); $i++) {
        $link_to_add = $matches[0][$i];
        if(preg_match('/styleIE6/', $matches[0][$i])) { $link_to_add = '<!--[if IE 6]>' . $link_to_add . '<![endif]-->'; }
        if(preg_match('/styleIE7/', $matches[0][$i])) { $link_to_add = '<!--[if IE 7.0]>' . $link_to_add . '<![endif]-->'; }
        $buf_links .= $link_to_add;
    }
    $buf = $buf_start . $buf_links . $buf_end;
    JResponse::setBody($buf);
}

$dispatcher = &JDispatcher::getInstance();
$dispatcher->register('onAfterRender', 'gkCSSReplace');
*

baza

  • Осваиваюсь на форуме
  • 18
  • 1 / 0
Может проблема в несовместимости версий библиотек JavaScript? Ссылка на сайт: http://www.officecenter.md/ru/2011-03-07-15-17-52
« Последнее редактирование: 21.08.2011, 00:57:27 от baza »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

VirtueMart - SMS уведомления о сделаном заказе.

Автор bork

Ответов: 42
Просмотров: 23289
Последний ответ 26.07.2021, 22:11:25
от Oleg91
Отчеты и статистика для VirtueMart

Автор 4kict

Ответов: 25
Просмотров: 10376
Последний ответ 14.01.2021, 00:09:53
от gartes
IceVmCart - новый бесплатный модуль корзины для VirtueMart

Автор Grig2009

Ответов: 105
Просмотров: 53908
Последний ответ 05.02.2017, 11:44:02
от Super_Panda
Модуль недавно просмотренные товары для VirtueMart 1.1.X

Автор aleks_yug

Ответов: 97
Просмотров: 28011
Последний ответ 25.10.2016, 15:03:07
от Igoritaly
Поиск для магазина автозапчастей как на Exist.ru!

Автор zzaj

Ответов: 21
Просмотров: 8831
Последний ответ 11.05.2016, 13:50:02
от Pahom72