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

Snick

  • Осваиваюсь на форуме
  • 18
  • 1 / 0
  • Who knows, dear Watson?
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #330 : 01.07.2010, 16:16:42 »
У кого проблема с нерабочей кнопкой "версия для печати" в просмотре заказа, нашел решение в топике про sh404SEF, решение помогло:
Открываем файл administrator\components\com_virtuemart\classes\htmlTools.class.php
Находим строку 1001
Комментируем 2 строки
// $query_string = str_replace( 'only_page=1', 'only_page=0', vmAmpReplace(vmGet($_SERVER,'QUERY_STRING')) );
// $link = 'index2.php?'.$query_string.'&pop=1'.(vmIsJoomla('1.5')? '&tmpl=component' : '');

и вставляем после них:
$query_string = ""; /* sh404SEF FIX */
foreach($_GET as $opt=>$val) {
   $query_string .= $opt."=".$val."&";
}
$query_string = str_replace( 'only_page=1', 'only_page=0',$query_string);
$link = $mosConfig_live_site.'/index2.php?pop=1&'.$query_string; /* sh404SEF FIX */
*

NRG

  • Новичок
  • 7
  • 0 / 0
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #331 : 09.07.2010, 12:28:47 »
Люди добрые добавьте все полезные советы в шапку, а то сложно искать, перечитывать и многие не ставят цитирование.
Вопрос, как убрать "category/18/"
из такой ссылки "/katalog/category/18/angliyskiy-yazik/audioknigi.html"
« Последнее редактирование: 10.07.2010, 21:43:16 от NRG »
*

oppo

  • Захожу иногда
  • 365
  • 82 / 8
  • ΨΨΨ я - УКРАЇНЕЦЬ
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #332 : 22.07.2010, 16:54:05 »
VirtueMart 1.1.4 / Joomla 1.5.20 / Включить SEO -да/Использовать mod_rewrite-нет/Добавить суффикс к URL нет
не работает стандартная навигация Joomla (mod_breadcrumbs) В ШАБЛОНЕ
1)Имею навигацию Главная = Магазин = Телефоны б/у = Nokia = HP All In One Printer
2)Нажимаю на  = Nokia = ее ссылка  (http://localhost/mobile/hp-all-in-one-printer?page=shop.browse&category_id=10&option=com_virtuemart&Itemid=80)
3)РЕЗУЛЬТАТ - пустая страница =Не удается найти веб-страницу==  HTTP 404
*

NRG

  • Новичок
  • 7
  • 0 / 0
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #333 : 22.07.2010, 18:23:19 »
Использовать mod_rewrite-нет/Добавить суффикс к URL нет
А если включить? И на хостинге в PHP включить mod_rewrite?
*

straj

  • Осваиваюсь на форуме
  • 10
  • 0 / 0
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #334 : 26.07.2010, 15:48:11 »
Отличный роутер. Спасибо.

Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #335 : 02.08.2010, 11:14:13 »
Добрый день!
 Установил роутер в указанную папку.
Роутер работает, но есть глюки.
Помогите с такой проблемой:
 Если нажать на "Расширенный поиск по характеристикам " выводит на http://www.test.hermes-r.ru/katalog.html
помогите исправить, пожалуйста.
P.s.  при нажатии на "расширенный поиск по характеристикам" должно открываться именно это окно а не "каталог", и при неправильном написании адреса страниц в карточке товара (после catalog/ ) должно выводить на "ОШИБКА 404".
топик прочитал, но как исправить свою проблему не понял. заранее благодарю за помощь
А это ссылка на каталог.
 Также если, например пройти по ссылке:
http://www.test.hermes-r.ru/katalog/details/3/2/koganie-fleshki/usb-flash-nakopitel.html
Если ввести любые символы в конце адреса (там где прописывается карточка товара,) то ничего не произойдет
http://www.test.hermes-r.ru/katalog/details/3/2/koganie-fleshki/usb-flash-nasfsdfdfkopitel.html
*

fixerr

  • Новичок
  • 3
  • 0 / 0
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #336 : 18.08.2010, 11:04:32 »
не справлюсь без Вшаей помощи!  у меня сейчас ссылка в виде    component/virtuemart/shop.browse/14.html
как убрать или заменить слова component и virtuemart
Очень нужно
*

schel4ok

  • Захожу иногда
  • 219
  • 4 / 1
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #337 : 18.08.2010, 11:06:35 »
сделай alias пункта меню вместо VirtueMart например shop
*

fixerr

  • Новичок
  • 3
  • 0 / 0
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #338 : 18.08.2010, 11:10:58 »
сделай alias пункта меню вместо VirtueMart например shop
у меня на VirtueMart нету ссылки из меню, для перехода к VirtueMart с сайта расположенны текстовые ссылки которые направляют сразу на категории
*

schel4ok

  • Захожу иногда
  • 219
  • 4 / 1
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #339 : 18.08.2010, 11:16:56 »
ну значит создай ссылку в меню. если тебе пункт меню не нужен можешь его скрыть
*

fixerr

  • Новичок
  • 3
  • 0 / 0
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #340 : 18.08.2010, 11:18:01 »
ну значит создай ссылку в меню. если тебе пункт меню не нужен можешь его скрыть

Вот получилось! Спасибо огромное
*

sasha_ua

  • Осваиваюсь на форуме
  • 18
  • 0 / 0
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #341 : 19.08.2010, 14:34:13 »
не работает постраничная навигация:

Есть категория Ноутбуки - Acer:

http://mysite/sh/category/3/noutbuki-i-pk/noutbuki/acer

Есть ссылки на страницы
1,2,3,4,5

Нажимаю на 2
http://mysite/sh/category/3/noutbuki-i-pk/noutbuki/acer&limit=20&limitstart=20

Но все еще нахожусь на первой странице,  и так далее..
Отключаю SEF, mod_rewrite все нормально но ссылки естественно корявые.

И еще заметил когда выбираешь из выпадающего списка кол-во страниц для отображения появляется такая ссылка:

http://mysite/index.php?orderby=product_price&DescOrderBy=ASC&Itemid=2&option=com_virtuemart&page=shop.browse&category_id=3&manufacturer_id=0&keyword=&keyword1=&keyword2=&limit=10&limitstart=0

Кто-то сталкивался с такой проблемой?
« Последнее редактирование: 21.08.2010, 12:23:41 от sasha_ua »

Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #342 : 29.08.2010, 19:02:31 »
Поставил роутер, ссылки приняли вид shop/details/266/34/stoyki/stoyki-vk108.html
но при просмотре внутренней страницы, не отображается ни одна картинка. Если просмотреть код страницы, где ищется картинка видно, зпрашивает
shop/details/266/34/stoyki/components/com_virtuemart/shop_image/product/b_studding_1_img_6.jpg
когда все изображения лежат на components/com_virtuemart/shop_image/product/b_studding_1_img_6.jpg, подскажите как убрать /shop/details/266/34/stoyki/ в пути картинки в описании товара ??
*

zelax2001

  • Новичок
  • 7
  • 0 / 0
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #343 : 31.08.2010, 21:05:17 »
Все.
И каково решение проблемы?
*

secretlive

  • Захожу иногда
  • 52
  • 0 / 0
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #344 : 03.09.2010, 20:14:16 »
а кто подскажет, что за беда, поставил роутер, категории нормально работают, а вот ссылка на товар выходит такая:
Код
http://sr/sr?page=shop.product_details&flypage=f_podarok.tpl&product_id=236&category_id=10&option=com_virtuemart&Itemid=71

то есть дублируется домен сайта, да и ссылка идет в никуда.
*

secretlive

  • Захожу иногда
  • 52
  • 0 / 0
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #345 : 03.09.2010, 20:28:38 »
а кто подскажет, что за беда, поставил роутер, категории нормально работают, а вот ссылка на товар выходит такая:
Код
http://sr/sr?page=shop.product_details&flypage=f_podarok.tpl&product_id=236&category_id=10&option=com_virtuemart&Itemid=71

то есть дублируется домен сайта, да и ссылка идет в никуда.


Извиняюсь, проблемы была не в роуте.

но вот когда нажимаю на "оформить заказ" идет редирект на список категорий, в чем проблема может быть?
*

secretlive

  • Захожу иногда
  • 52
  • 0 / 0
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #346 : 03.09.2010, 20:31:50 »
Кто-то сталкивался с такой проблемой?

странно, у меня работает постраничная навигация, но не работает оформление заказа
*

Starfighter

  • Новичок
  • 7
  • 0 / 0
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #347 : 09.09.2010, 00:50:45 »
Никаково. Роутер хорош, но не доработан.

Так что же делать? Может у кого есть какие идеи? У меня категории есть по сотне товаров... Грустно без постраничной навигации...
*

mrhuge

  • Захожу иногда
  • 222
  • 7 / 0
  • http://muzalliance.ru/
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #348 : 15.09.2010, 10:23:40 »
Beagler, по поводу этого:
Цитировать
при обычных ссылках карточка товара также доступна по 2 адресам.
Цитировать
В первом варианте сразу на товар, во втором с учетом категории. Без роутера такая же песня.

как ты думаешь, стоит ли для поисковой оптимизации, чтобы поисковики не видели дубли ссылок на товары, через robots.txt запретить:
Цитировать
Disallow: /products/details/
*

mrhuge

  • Захожу иногда
  • 222
  • 7 / 0
  • http://muzalliance.ru/
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #350 : 15.09.2010, 13:23:31 »
Beagler, вот тут парни на joomla-support.ru обсуждают эту же ситуацию: http://joomla-support.ru/thread17862-4.html

Вообще получается сколько страниц проиндексируют поисковики: 2 статичные через роутер
http://781330.ru/products/labels-and-patches/details/24/7/shevroni-i-etiketki/etiketki-na-atlasnoy-lente.html
http://781330.ru/products/details/24/etiketki-na-atlasnoy-lente.html
и еще 2 обычные на этот же товар:
http://781330.ru/index.php?option=com_virtuemart&page=shop.product_details&flypage=flypage.tpl&product_id=24&Itemid=28
http://781330.ru/index.php?page=shop.product_details&flypage=flypage.tpl&product_id=24&category_id=7&option=com_virtuemart&Itemid=65

Или страницы без роутера вообще индексироваться не будут?

Короче дублей получается завались в VirtueMart.

И кстати в первом посте в этой теме http://joomla-support.ru/post79685-1.html есть рекомендации по вычищению мусора из ps_session.php Это надо делать как ты считаешь?
*

kodagen

  • Новичок
  • 1
  • 0 / 0
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #351 : 16.09.2010, 21:26:44 »
мля, да ни хрена не работает, че гоните,
*

sasha_ua

  • Осваиваюсь на форуме
  • 18
  • 0 / 0
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #352 : 16.09.2010, 23:44:51 »
После общения с автором роутера, я так понял им больше заниматься никто не будет.. всем учить php :)
*

AM0P

  • Осваиваюсь на форуме
  • 17
  • 0 / 0
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #353 : 17.09.2010, 20:15:19 »
Сори если пропустил пост, но работает ли этот компонент на VM 1.1.5?
*

mrhuge

  • Захожу иногда
  • 222
  • 7 / 0
  • http://muzalliance.ru/
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #354 : 18.09.2010, 15:09:26 »
Beagler,
Цитировать
модуль с полным отображением всех категорий и подкатегорий аккордеоном с использованием SEF router от Dutch - http://joomlaforum.ru/index.php/topic,50193.0.html не генерирует ни одного запроса к базе данных! Стандартный модуль категорий в стиле Link list генерирует целых 9 и это без показа всех подкатегорий.

Но если включить SEF router от Beagler с транслитом - вот тут начинается цирк ))) Твой модуль начинает генерировать свыше 130 запросов к базе данных, но это всё равно меньше чем все стандартные модули - там вообще какойто дает аж 300 запросов )))

Как я понимаю своим модулем ты ничего не можешь сделать с SEF-ом. Получается прийдется отказывается от SEF от Beaglerа, а юзать SEF от Dutch, который генерит только id товаров в url-е без названий. Как я понимаю количество запросов к БД на любой странице сайта не должно превышать 50-60 при хорошем раскладе.
Цитировать
SEF router от Beagler с транслитом генерит по 2 запроса на ссылку (на категорию). Почему два а не один это надо еще выяснить.
Цыфры печальные - на 50 категорий 100 запросов...

это отсюда http://joomlaforum.ru/index.php/topic,109669.msg711121.html#msg711121

Можешь разобраться почему твой роутер генерит 2 запроса на ссылку? и вообще как с его помощью достичь не более 50-60 запросов в БД?
*

beagler

  • Moderator
  • 3276
  • 392 / 4
  • https://alorisman.ru/
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #355 : 18.09.2010, 16:04:47 »
Посмотрите какие запросы.
Человек все правильно написал - хотите в ссылке названия категорий и товаров - будут запросы. Надо же их как-то вытаскивать по id
*

mrhuge

  • Захожу иногда
  • 222
  • 7 / 0
  • http://muzalliance.ru/
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #356 : 18.09.2010, 18:51:18 »
Огромное количество вот таких запросов:
Цитировать
#
WHERE category_id IN (2,3)
#
SELECT t1.category_child_id AS lev1, t2.category_child_id AS lev2, t3.category_child_id AS lev3
                       
  FROM  jos_vm_category_xref AS t1
                       
  LEFT JOIN jos_vm_category_xref AS t2
  ON t2.category_child_id = t1.category_parent_id
                       
  LEFT JOIN jos_vm_category_xref AS t3
  ON t3.category_child_id = t2.category_parent_id
                       
  WHERE t1.category_child_id= 4
#
SELECT GROUP_CONCAT( category_name
                        SEPARATOR  '/' )
                       
  FROM jos_vm_category
                       
  WHERE category_id IN (2,4)
#
SELECT t1.category_child_id AS lev1, t2.category_child_id AS lev2, t3.category_child_id AS lev3
                       
  FROM  jos_vm_category_xref AS t1
                       
  LEFT JOIN jos_vm_category_xref AS t2
  ON t2.category_child_id = t1.category_parent_id
                       
  LEFT JOIN jos_vm_category_xref AS t3
  ON t3.category_child_id = t2.category_parent_id
                       
  WHERE t1.category_child_id= 5
#
SELECT GROUP_CONCAT( category_name
                        SEPARATOR  '/' )
                       
  FROM jos_vm_category
                       
  WHERE category_id IN (2,5)
#
SELECT t1.category_child_id AS lev1, t2.category_child_id AS lev2, t3.category_child_id AS lev3
                       
  FROM  jos_vm_category_xref AS t1
                       
  LEFT JOIN jos_vm_category_xref AS t2
  ON t2.category_child_id = t1.category_parent_id
                       
  LEFT JOIN jos_vm_category_xref AS t3
  ON t3.category_child_id = t2.category_parent_id
                       
  WHERE t1.category_child_id= 6
#
SELECT GROUP_CONCAT( category_name
                        SEPARATOR  '/' )
                       
  FROM jos_vm_category
                       
  WHERE category_id IN (2,6)
#
SELECT t1.category_child_id AS lev1, t2.category_child_id AS lev2, t3.category_child_id AS lev3
                       
  FROM  jos_vm_category_xref AS t1
                       
  LEFT JOIN jos_vm_category_xref AS t2
  ON t2.category_child_id = t1.category_parent_id
                       
  LEFT JOIN jos_vm_category_xref AS t3
  ON t3.category_child_id = t2.category_parent_id
                       
  WHERE t1.category_child_id= 7
#
SELECT GROUP_CONCAT( category_name
                        SEPARATOR  '/' )
                       
  FROM jos_vm_category
                       
  WHERE category_id IN (2,7)
#
SELECT t1.category_child_id AS lev1, t2.category_child_id AS lev2, t3.category_child_id AS lev3
                       
  FROM  jos_vm_category_xref AS t1
                       
  LEFT JOIN jos_vm_category_xref AS t2
  ON t2.category_child_id = t1.category_parent_id
                       
  LEFT JOIN jos_vm_category_xref AS t3
  ON t3.category_child_id = t2.category_parent_id
                       
  WHERE t1.category_child_id= 8
#
SELECT GROUP_CONCAT( category_name
                        SEPARATOR  '/' )
                       
  FROM jos_vm_category
                       
*

beagler

  • Moderator
  • 3276
  • 392 / 4
  • https://alorisman.ru/
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #357 : 18.09.2010, 19:37:19 »
Да, это запросы роутера. Они появляются при формировании ссылки на каждую категорию. Смысл следующий - строится иерархия категорий до 3 уровня. То есть в ссылке будут имена трёх категорий - уровень1/уровень2/уровень3 (если это третий уровень)
Поэтому два запроса  - первым выдергиваем id текущей категории и двух родительских, если они есть, вторым запросом получаем их имена.
Если не нужна иерархия, а только имя текущей категории - обойдемся одним запросом. Замените в роутере getCategoryTitle на
Код
function getCategoryTitle($id){
$db = & JFactory::getDBO();
$query = "SELECT category_name
FROM #__vm_category
WHERE category_id= ".$id;;
$db->setQuery($query);
$category_alias = $db->loadResult();
$special_chars = array('!','@','#','$','%','*','(',')');
foreach($special_chars as $char){
$category_alias = str_replace($char,'', $category_alias);
}

$category_alias = str_replace(' ','-', $category_alias);
$category_alias = vm_translate(str_replace('  ','-', $category_alias));
return $category_alias;
}
*

mrhuge

  • Захожу иногда
  • 222
  • 7 / 0
  • http://muzalliance.ru/
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #358 : 18.09.2010, 20:15:40 »
Заменил старую function getCategoryTitle($id) на данную тобой -
количество запросов на главной странице упало с 196 до 114 без видимых ухудшений. Конечно лучше, но когда я ставлю модуль от Dutch - количество запросов становится 20. ЧПУ дорого стоит )))
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Перенос с 1.5 на 3.5 + VirtueMart

Автор andrey488

Ответов: 4
Просмотров: 4016
Последний ответ 07.03.2017, 01:19:33
от SeBun
Проблема с установкой VirtueMart 1.1.4

Автор Tell

Ответов: 10
Просмотров: 8433
Последний ответ 02.01.2017, 17:28:01
от pomogu_chem_smogu
Проблемы с установкой VirtueMart

Автор inka

Ответов: 14
Просмотров: 9188
Последний ответ 03.09.2015, 01:44:49
от Amigos
mod VirtueMart latestprod способствовал появлению белого экрана

Автор smogrom

Ответов: 21
Просмотров: 4667
Последний ответ 15.01.2015, 11:50:23
от Schumaker
Русификация VirtueMart. Как ее сделать?

Автор Koriolan

Ответов: 52
Просмотров: 56487
Последний ответ 05.11.2014, 15:37:43
от Jiggy