Новости Joomla

👩‍💻 События плагинов и порядок их срабатывания при работе с пользовательскими полями Joomla и использовании FieldsHelper.

👩‍💻 События плагинов и порядок их срабатывания при работе с пользовательскими полями Joomla и использовании FieldsHelper.

В процессе работы с Joomla бывает необходимо работать с пользовательским интерфейсом более тонко, чем обычно. Все формы Joomla состоят из стандартных полей, содержанием, стилем отображения, состоянием (включено/выключено, доступно для редактирования или нет и т.д.) можно управлять с помощью плагинов. Да и для нестандартных проектов хорошей практикой является создание одного системного или нескольких плагинов групп "под проект", в которых храниться весь "нестандарт".

В этой статье описаны все триггеры, которые вызываются через Event Dispatcher из administrator/components/com_fields/src/Helper/FieldsHelper.php, с привязкой к жизненному циклу (порядку этапов работы запроса), аргументам, изменяемым данным и дальнейшему распространению по Joomla. Это поможет вам работать с Joomla свободнее и не опасаясь при этом потерять изменения при очередном обновлении движка.

Подходы, описанные в статье, полезны в тех случаях, когда вы работаете с данными в com_fields - механизме создания и редактирования пользовательских полей ядра Joomla и при использовании FieldsHelper. Многие сторонние компоненты не используют эту возможность, поэтому данная статья будет полезна лишь частично.

🏆 Открыто голосование за Joomla в премии CMS Critic People’s Choice Awards 2025

🏆 Открыто голосование за Joomla в  премии CMS Critic People’s Choice Awards 2025

🗓 Голосование продлится до 27 февраля 2026 года.

👩‍💻 Проголосовать! 👩‍💻

Номинации, в которых можно проголосовать за Joomla:
⭐️ Best Free CMS
⭐️ Best Open Source CMS
⭐️ Best Enterprise CMS

Также в номинации Best e-Commerce Solution участвуют компоненты интернет-магазинов для Joomla:
⭐️ HikaShop
⭐️ Virtuemart

В номинации Best Website Builder оказались:
⭐️ YooTheme
⭐️ SP Page Builder

Что такое CMS Critic Awards?
С 2012 года премия CMS Critic Awards занимает особое место в сообществе систем управления контентом (CMS). Это единственный в своем роде сайт, который составляет рейтинг системы управления контентом и связанных с ними решений на рынке — от малого до крупного и подчеркивает их инновации и услуги.

Каждый год награда CMS Critic Awards присуждается одному победителю в различных отраслевых категориях, таких как: «Лучшая облачная CMS», «Лучший DXP», «Лучшая Headless CMS и других. Затем результаты оглашаются через СМИ вместе с выбором редакции CMS Critic.
В этом году премия вернулась к своим традициям и только TOP-5 движков по количеству номинаций попали в 2-й этап - голосование.

@joomlafeed

0 Пользователей и 1 Гость просматривают эту тему.
  • 33 Ответов
  • 9328 Просмотров
*

d0ublezer0

  • Захожу иногда
  • 356
  • 31 / 0
  • Javaхарлал Неру
Почему так?
Из-за этого в меню категорий не отобраается активная выбранная категория.
По идее, перемещаясь между товарами одной группы, id должен присутствовать.

За формирование этих ссылок отвечает файл shop.product_details.php, но я пока не разобрался, как в ссылки зацепить текущую категорию?
Может кто сталкивался уже?
Я помог вам? Ткните в карму.
*

m.smetannikov

  • Захожу иногда
  • 69
  • 0 / 0
*

d0ublezer0

  • Захожу иногда
  • 356
  • 31 / 0
  • Javaхарлал Неру
Я разобрался. Но проект уже давно сдан, сейчас копаться в коде, искать где что менял - времени нет.
Я помог вам? Ткните в карму.
*

m.smetannikov

  • Захожу иногда
  • 69
  • 0 / 0
d0ublezer0, если есть возможность выложи, пожалуйста shop.product_details.php.
*

d0ublezer0

  • Захожу иногда
  • 356
  • 31 / 0
  • Javaхарлал Неру
ссылка-то формируется не в нем.
надо искать
Я помог вам? Ткните в карму.
*

m.smetannikov

  • Захожу иногда
  • 69
  • 0 / 0
Так, а где она формируется? Хотя-бы примерно скажите, вы же ведь уже делали это. Вы то знаете где копать))
*

SorokinS

  • Захожу иногда
  • 165
  • 12 / 1
Joomla 1.5.22 VirtueMart 1.1.7

Заметил следующие баги:

1. в подробном описании товара ссылки Предыдущий / Следующий имеют не верный вид, у меня например с категорией 0:(
Код
?page=shop.product_details&flypage=flypage.tpl&product_id=92&category_id=0
2. в "Недавно просмотренные файлы" Порядок построения ссылки на товар ваще не понятный, хоть и работает:):
Код
?page=shop.product_details&product_id=92&category_id=21&flypage=flypage.tpl

Получается дублирование одинаковых страниц, Яндекс этого не любит.

Чиним так:

1.  в файле /administrator/components/com_virtuemart/html/shop.product_details.php
Для следующей:
179
Было:
Код
$url_parameters = 'page=shop.product_details&product_id='.$next_product['product_id'].'&flypage='.$ps_product->get_flypage($next_product['product_id']).'&pop='.$pop;
Стало:
Код
$url_parameters = 'page=shop.product_details&flypage='.$ps_product->get_flypage($next_product['product_id']).'&category_id='.$category_id;
  
для предыдущейкнопки (193 строка)
Было:
Код
$url_parameters = 'page=shop.product_details&product_id='.$previous_product['product_id'].'&flypage='.$ps_product->get_flypage($previous_product['product_id']).'&pop='.$pop;
Стало:
Код
$url_parameters = 'page=shop.product_details&flypage='.$ps_product->get_flypage($next_product['product_id']).'&product_id='.$next_product['product_id'].'&category_id='.$category_id;
   
2. в файле /administrator/components/com_virtuemart/classes/ps_product.php (у меня VM 1.1.7 строка 2865)
Было :
Код
$recent[$k]['product_url'] = $sess->url("page=shop.product_details&product_id=$prod_id&category_id=$category_id&flypage=$flypage");

Стало:
Код
$recent[$k]['product_url'] = $sess->url("page=shop.product_details&flypage=$flypage&product_id=$prod_id&category_id=$category_id");
            
« Последнее редактирование: 13.04.2011, 21:47:14 от SorokinS »
*

SorokinS

  • Захожу иногда
  • 165
  • 12 / 1
*

m.smetannikov

  • Захожу иногда
  • 69
  • 0 / 0
Был вирт 1.1.6, специально обновился до 1.1.7. После проведения указанных изменений при нажатии на кнопку сл. товара вирт выкидывает на страницу просмотра всех товаров, и пишет что товар не найден. Вот url, который формируется при этом в адресной строке: /index.php?keyword=&category_id=&limitstart=&page=shop.browse&option=com_virtuemart&Itemid=178.
Не помогает!(
*

SorokinS

  • Захожу иногда
  • 165
  • 12 / 1
Был вирт 1.1.6, специально обновился до 1.1.7. После проведения указанных изменений при нажатии на кнопку сл. товара вирт выкидывает на страницу просмотра всех товаров, и пишет что товар не найден. Вот url, который формируется при этом в адресной строке: /index.php?keyword=&category_id=&limitstart=&page=shop.browse&option=com_virtuemart&Itemid=178.
Не помогает!(

Ссылка явно построена не верно.

Покажите отрезок кода с ссылкой след. товара.

Попробуйте включить стандартный SEF.
*

SorokinS

  • Захожу иногда
  • 165
  • 12 / 1
Попробуйте включить стандартный SEF.

SEF тут не причем, проверил у себя.
*

m.smetannikov

  • Захожу иногда
  • 69
  • 0 / 0
Ну да у меня тоже не помогло. Вот такая ссылка со стандартным sef:
3rd-party-extensions/virtuemart.html?keyword=&category_id=&limitstart=&page=shop.browse
Может быть это из за VirtueMart переделанного, просто ставил вирт в комплекте с шаблоном, так называемый quick start.
Сейчас код наковыряю...
*

SorokinS

  • Захожу иногда
  • 165
  • 12 / 1
Ну да у меня тоже не помогло. Вот такая ссылка со стандартным sef:
3rd-party-extensions/virtuemart.html?keyword=&category_id=&limitstart=&page=shop.browse
Может быть это из за VirtueMart переделанного, просто ставил вирт в комплекте с шаблоном, так называемый quick start.
Сейчас код наковыряю...

Покажите ваш код. Или вложите файл. Погляжу
*

m.smetannikov

  • Захожу иногда
  • 69
  • 0 / 0
Код
// Get the neighbor Products to allow navigation on product level
$neighbors = $ps_product->get_neighbor_products( !empty( $product_parent_id )? $product_parent_id : $product_id );
$next_product = $neighbors['next'];
$previous_product = $neighbors['previous'];
$next_product_url = $previous_product_url = '';
if( !empty($next_product) ) {
$url_parameters = 'page=shop.product_details&flypage='.$ps_product->get_flypage($next_product['product_id']).'&category_id='.$category_id;
    if( $manufacturer_id ) {
    $url_parameters .= "&manufacturer_id=" . $manufacturer_id;
    }
    if( $keyword != '') {
    $url_parameters .= "&keyword=".urlencode($keyword);
    }
if( $pop == 1 ) {
$next_product_url = $sess->url( $_SERVER['PHP_SELF'].'?'.$url_parameters );
} else {
$next_product_url = str_replace("index2","index",$sess->url( $url_parameters ));
}
}
if( !empty($previous_product) ) {
$url_parameters = 'page=shop.product_details&flypage='.$ps_product->get_flypage($next_product['product_id']).'&product_id='.$next_product['product_id'].'&category_id='.$category_id;
    if( $manufacturer_id ) {
    $url_parameters .= "&manufacturer_id=" . $manufacturer_id;
    }
    if( $keyword != '') {
    $url_parameters .= "&keyword=".urlencode($keyword);
    }
if( $pop == 1 ) {
$previous_product_url = $sess->url( $_SERVER['PHP_SELF'].'?'.$url_parameters );
} else {
$previous_product_url = str_replace("index2","index",$sess->url( $url_parameters ));
}
}

$tpl->set( 'next_product', $next_product );
$tpl->set( 'next_product_url', $next_product_url );
$tpl->set( 'previous_product', $previous_product );
$tpl->set( 'previous_product_url', $previous_product_url );

$parent_id_link = $db_product->f("product_parent_id");
$return_link = "";
if ($parent_id_link <> 0 ) {
$q = "SELECT product_name FROM #__{vm}_product WHERE product_id = '$product_parent_id' LIMIT 0,1";
$db->query( $q );
$db->next_record();
$product_parent_name = $db->f("product_name");
$return_link = "&nbsp;<a class=\"pathway\" href=\"";
$return_link .= $sess->url($_SERVER['PHP_SELF'] . "?page=shop.product_details&product_id=$parent_id_link");
$return_link .= "\">";
$return_link .= $product_parent_name;
$return_link .= "</a>";
$return_link .= " ".vmCommonHTML::pathway_separator()." ";
}
$tpl->set( 'return_link', $return_link );

// Create the pathway for our template
$navigation_pathway = $tpl->fetch( 'common/pathway.tpl.php');

if ($ps_product_category->has_childs($category_id) ) {
$category_childs = $ps_product_category->get_child_list($category_id);
$tpl->set( 'categories', $category_childs );
$navigation_childlist = $tpl->fetch( 'common/categoryChildlist.tpl.php');
}
Кстати, "предыдущий" товар работает!  Все так как надо! надо только "следующий" поправить. Так что мы движемся в правильном направлении!
*

SorokinS

  • Захожу иногда
  • 165
  • 12 / 1
Странно, код верный.

А до этих изменений, какие ссылки были?
*

m.smetannikov

  • Захожу иногда
  • 69
  • 0 / 0
Пардон, не совсем работает ссылка на "предыдущий" товар. Например название "предыдущего" товара "Nespresso Citiz", а при нажатии на него открывается товар с названием "Saeco XSmall" (хорошо еще что все в рамках одной категории).
*

SorokinS

  • Захожу иногда
  • 165
  • 12 / 1
Нашел в нашем файле следующее:

// Get the product info from the database
$q = "SELECT * FROM `#__{vm}_product` WHERE ";
if( !empty($product_id)) {
   $q .= "`product_id`=$product_id";
}
elseif( !empty($product_sku )) {
   $q .= "`product_sku`='$product_sku'";
}
else {
   vmRedirect( $sess->url( $_SERVER['PHP_SELF']."?keyword=".urlencode($keyword)."&category_id={$_SESSION['session_userstate']['category_id']}&limitstart={$_SESSION['limitstart']}&page=shop.browse", false, false ), $VM_LANG->_('PHPSHOP_PRODUCT_NOT_FOUND') );
}

в else как раз есть то, что у вас вылезает.

Пока не пойму, что за условие.
*

SorokinS

  • Захожу иногда
  • 165
  • 12 / 1
Пардон, не совсем работает ссылка на "предыдущий" товар. Например название "предыдущего" товара "Nespresso Citiz", а при нажатии на него открывается товар с названием "Saeco XSmall" (хорошо еще что все в рамках одной категории).

Может она как "следующий" работает?
*

m.smetannikov

  • Захожу иногда
  • 69
  • 0 / 0
У меня роуер от danik.html стоит.
Вот ссылки до изменений:
заход на страницу товара через категорию
-http://site.ru/3rd-party-extensions/catalog/category/product/1-coffee-machines/5-nespresso-citiz.html
заход через "предыдущий" товар
-http://site.ru/3rd-party-extensions/catalog/product/5-nespresso-citiz.html
Как видно, без категории....

Вот теперь:
заход на страницу товара через категорию
-http://site.ru/3rd-party-extensions/catalog/category/product/1-coffee-machines/5-nespresso-citiz.html
заход через "предыдущий" товар
-http://site.ru/3rd-party-extensions/catalog/category/product/1-coffee-machines/5-nespresso-citiz.html
Почти можно радоваться, осталось "доточить" чтоб при нажатии на название "предыдущего" товара открывался товар с этим названием ну и сделать ссылку "следующего"!
Цитировать
в else как раз есть то, что у вас вылезает
Может быть это в шаблоне какой нибудь хак стоит, который отвечает за keyword? Я ж там говорил что VirtueMart сразу с шаблоном ставился. Давайте Вам на почту шаблон сброшу? Я просто не сильно в коде соображаю.
*

m.smetannikov

  • Захожу иногда
  • 69
  • 0 / 0
Цитировать
Может она как "следующий" работает?

ТОЧНО!
*

SorokinS

  • Захожу иногда
  • 165
  • 12 / 1
тогда меняем местами.

В моем примере сначала next правится, потом previous:(
*

m.smetannikov

  • Захожу иногда
  • 69
  • 0 / 0
Все заработало! :D Спасибо огромное!
beagler, взываю к тебе! Тему в FAQ! Обязательно!!
*

m.smetannikov

  • Захожу иногда
  • 69
  • 0 / 0
*

elnine

  • Новичок
  • 6
  • 1 / 0
Добрый день, уважаемые коллеги.

Неожиданно возникла следующая проблема.
На связке J1.5 VM 1.1.5.
При попытке "задать вопрос" на странице с товаром, появляется как всегда форма, заполняется, отправляется.. и вуаля..
выкидывает на страницу с магазином и ошибкой "Товар не найден". Хотя товар есть, опубликован. Соответственно никаких писем не приходит.

Пробовал обновить, обновился до 1.1.8 не помогло.
Перечитал пол интернета, в поисках решения (и зарубежного и нашего). Ничего толкового найти не смог.
Одна надежда только на вас.

Не могу понять в чем дело. Раньше работало, обновлений вроде никаких не ставили.
Пробовал и с включенным и с выключенным SEF. SEF стоит стандартный Jooml-овский. Кэши чистил.
Почта работает. 

Дополнение: ссылка на товар вида "prodnm?page=shop.product_details&flypage=flypage.tpl&product_id=33&category_id=13"
после кидает на "/prodnm?keyword=&category_id=&limitstart=&page=shop.browse"
« Последнее редактирование: 12.05.2011, 16:31:26 от elnine »
*

SorokinS

  • Захожу иногда
  • 165
  • 12 / 1
Добрый день, уважаемые коллеги.

Неожиданно возникла следующая проблема.
На связке J1.5 VM 1.1.5.
При попытке "задать вопрос" на странице с товаром, появляется как всегда форма, заполняется, отправляется.. и вуаля..
выкидывает на страницу с магазином и ошибкой "Товар не найден". Хотя товар есть, опубликован. Соответственно никаких писем не приходит.

Пробовал обновить, обновился до 1.1.8 не помогло.
Перечитал пол интернета, в поисках решения (и зарубежного и нашего). Ничего толкового найти не смог.
Одна надежда только на вас.

Не могу понять в чем дело. Раньше работало, обновлений вроде никаких не ставили.
Пробовал и с включенным и с выключенным SEF. SEF стоит стандартный Jooml-овский. Кэши чистил.
Почта работает.  

Дополнение: ссылка на товар вида "prodnm?page=shop.product_details&flypage=flypage.tpl&product_id=33&category_id=13"
после кидает на "/prodnm?keyword=&category_id=&limitstart=&page=shop.browse"


Конечно, не совмем по теме, но проблема похожая с нашей.

У меня VM 1.1.8: вылетает благодарность и ниже ссылка "Вернуться к товару", ссылка имеет не совсем правильный вид: http://site.ru/catalog?page=shop.product_details&flypage=flypage.tpl&product_id=512&category_id=0

А так вот помощь: http://joomlaforum.ru/index.php/topic,80081.msg465593.html#msg465593

Мне хватило подставить
Код
<input type="hidden" name="category_id" value="<?php echo  $category_id  ?>" />

в файле shop.ask.tpl.php
« Последнее редактирование: 12.05.2011, 17:05:04 от SorokinS »
*

SorokinS

  • Захожу иногда
  • 165
  • 12 / 1
Еще заметил ссылка не верная у ссылки в письме-подтверждении :

Код
Спасибо за Ваше обращение к поставщику АНОНИМ касательно:
Название товара: Поло
Артикул: 166
Ссылка: http://site.ru/index.php?option=com_virtuemart&page=shop.product_details&flypage=flypage.tpl&product_id=512&Itemid=14

Щас починим.
*

SorokinS

  • Захожу иногда
  • 165
  • 12 / 1
Дополнение: ссылка на товар вида "prodnm?page=shop.product_details&flypage=flypage.tpl&product_id=33&category_id=13"
после кидает на "/prodnm?keyword=&category_id=&limitstart=&page=shop.browse"


Кстати, такая ссылка у меня вылезала при отсутствии product_id! Возможно он не доходит до формы после отправления. Погляди код формы до отправления, есть ли там <input type="hidden" name="product_id" value="ЦИФРА" />
*

elnine

  • Новичок
  • 6
  • 1 / 0
Да есть <input type="hidden" name="product_id" value="33" />
*

SorokinS

  • Захожу иногда
  • 165
  • 12 / 1
Ссылка в письме - подтверждении правится так:

1. В файле administrator/com_virtuemart/classes/ps_communication.php после 143 строки, т.е после
Код
$Itemid = $sess->getShopItemid();
вставляем
Код
$category_id = vmRequest::getInt('category_id');

2. Правим ссылку :
$product_url = $mosConfig_live_site."/catalog?page=shop.product_details&flypage=".urlencode($flypage)."&product_id=$product_id&category_id=$category_id";

Внимание у меня в ссылке catalog! У вас возможно что-то другое? если используете стандартный SEF.

Если не используете стандартный SEF лучше оставить так:


$product_url = $mosConfig_live_site."/index.php?option=com_virtuemart&page=shop.product_details&flypage=".urlencode($flypage)."&product_id=$product_id&category_id=$category_id";
      
*

elnine

  • Новичок
  • 6
  • 1 / 0
Поменял все, из вышеописанных... но до письма дело не доходит,
все равно выкидывает на "товар не найден".
Может хостинг не держит сессию?
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Описание категории опустить под товары

Автор angelo4ek-001

Ответов: 5
Просмотров: 3193
Последний ответ 12.11.2015, 01:53:39
от fsv
Как сделать отображение атрибутов товара в категории ?

Автор Timer

Ответов: 0
Просмотров: 2492
Последний ответ 21.01.2015, 23:43:33
от Timer
VirtueMart -как убрать слово "КАТЕГОРИИ" на первой странице магазина

Автор stalker828

Ответов: 12
Просмотров: 10377
Последний ответ 30.07.2014, 11:51:16
от ZAIRA
Как перенести кнопку редактирования товара с fly-страницы на страницу категории?

Автор longestall

Ответов: 5
Просмотров: 2974
Последний ответ 09.07.2014, 17:40:59
от talentas
Не заполняется "Описание категории"

Автор atlantavto2011

Ответов: 0
Просмотров: 1634
Последний ответ 07.07.2014, 18:21:48
от atlantavto2011