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

ELLE

  • Глобальный модератор
  • 4505
  • 893 / 0
Подскажите какие файлы править - не могу разобраться, и поиск не помог.
« Последнее редактирование: 30.08.2011, 23:59:22 от Katerina01 »
*

ELLE

  • Глобальный модератор
  • 4505
  • 893 / 0
Ребят, никто не знает как поменять местами описание и товары на странице производителя?
Нужно чтобы сначала шли товары а потом описание.
*

fsv

  • Moderator
  • 2787
  • 413 / 2
Ребят, никто не знает как поменять местами описание и товары на странице производителя?
Нужно чтобы сначала шли товары а потом описание.

Сначала уточню, правильно ли я понял.
Вы хотите на странице всех товаров конкретного производителя типа
/index.php?option=com_virtuemart&page=shop.browse&manufacturer_id=1&Itemid=2  ,
на которую можно попасть, используя модуль mod_virtuemart_manufacturers ,
оставить вверху название производителя, а описание производителя переместить вниз под товары?
Если да, то:

\administrator\components\com_virtuemart\html\shop.browse.php
вывод в хедере названия и описания (с картинкой, если есть) производителя примерно в стр.128-138
elseif( $manufacturer_id) {
      $db->query( "SELECT manufacturer_id, mf_name, mf_desc FROM #__{vm}_manufacturer WHERE manufacturer_id='$manufacturer_id'");
      $db->next_record();
      $mainframe->setPageTitle( $db->f("mf_name") );

      $browsepage_lbl = shopMakeHtmlSafe( $db->f("mf_name") );
      $tpl->set( 'browsepage_lbl', $browsepage_lbl );
      $browsepage_lbltext = $db->f("mf_desc");
      $tpl->set( 'browsepage_lbltext', $browsepage_lbltext );
      $browsepage_header = $tpl->fetch( 'browse/includes/browse_header_manufacturer.tpl.php' );
   }

Если вверху надо убрать описание производителя, а его название оставить, закомментируйте стр.
$tpl->set( 'browsepage_lbltext', $browsepage_lbltext );
Если и название также убрать, то закомментируйте стр.
$tpl->set( 'browsepage_lbl', $browsepage_lbl );

Вверху убрали. Внизу можно вставить над пагинацией. Для этого

после примерно стр.476,477
$tpl->set( 'products', $products );
$tpl->set( 'search_string', $search_string );
вставьте

if( $manufacturer_id) {
      $db->query( "SELECT manufacturer_id, mf_name, mf_desc FROM #__{vm}_manufacturer WHERE manufacturer_id='$manufacturer_id'");
      $db->next_record();
      $mainframe->setPageTitle( $db->f("mf_name") );
      $browsepage_lbl = shopMakeHtmlSafe( $db->f("mf_name") );
      $tpl->set( 'browsepage_lbl', $browsepage_lbl );
      $browsepage_lbltext = $db->f("mf_desc");
      $tpl->set( 'browsepage_lbltext', $browsepage_lbltext );
      $browsepage_header = $tpl->fetch( 'browse/includes/ browse_pagenav.tpl.php' );
   }



а также в
\components\com_virtuemart\themes\default\templates\browse\includes\browse_pagenav.tpl.php
после проверки Direct Access (и до <?php if(!@is_object( $pagenav)) return;  ?>) в стр.3
вставить
<h3><?php echo $browsepage_lbl ?></h3>
<div class="browseDesc"><?php echo $browsepage_lbltext ?></div>





Веб-разработка: заказ. Только новая разработка.
*

ELLE

  • Глобальный модератор
  • 4505
  • 893 / 0
И снова fsv спешит на помощь! Еще +1 от меня  :D

А теперь к делу.
Да Вы правильно меня поняли. Нужно название производителя оставить вверху, а само описание перенести вниз.
Решение, которое Вы указали работает, но при одном условии - если работает пагинация!
В shop.browse.php код относящийся к пагинации у меня закомментирован - соответственно нет пагинации и нет описания производителей(((.

Куда еще, кроме browse_pagenav.tpl.php, можно запихнуть вывод
<div class="browseDesc"><?php echo $browsepage_lbltext ?></div> ?
Последнее, что у меня выводится на странице производителей - "недавно просмотренные товары" (по-моему это browse_notables.tpl.php)



*

fsv

  • Moderator
  • 2787
  • 413 / 2
"Недавно просмотренные товары" - recent.tpl.php , который не в группе шаблонов browse (в папке common).
Если пагинация совсем не нужна, можно попробовать в browse_pagenav.tpl.php после вышеуказанной вставки все удалить. То есть шаблон пагинации будет для вывода "чего-хочу". А в shop.browse.php пагинацию можно тогда не комментировать.
Веб-разработка: заказ. Только новая разработка.
*

ELLE

  • Глобальный модератор
  • 4505
  • 893 / 0
Цитировать
...можно попробовать в browse_pagenav.tpl.php после вышеуказанной вставки все удалить. То есть шаблон пагинации будет для вывода "чего-хочу". А в shop.browse.php пагинацию можно тогда не комментировать.
Я пока так и сделала. Но у меня на счет пагинации есть задумка, о которой наверное лучше рассказать в отдельной теме))
И все же больше нет вариантов, кроме как browse_pagenav.tpl.php?
*

fsv

  • Moderator
  • 2787
  • 413 / 2
И все же больше нет вариантов, кроме как browse_pagenav.tpl.php?

Сходу в recent не получилось. Надо "колупать" дальше. Но сейчас уже сплю...
Веб-разработка: заказ. Только новая разработка.
*

ELLE

  • Глобальный модератор
  • 4505
  • 893 / 0
У меня еще такая идея есть:
Создаем browse_pagenav2.tpl.php в него пишем наш див.
Потом в shop.browse.php:
Код
$tpl->set( 'products', $products );
$tpl->set( 'search_string', $search_string );

if( $manufacturer_id) {
      $db->query( "SELECT manufacturer_id, mf_name, mf_desc FROM #__{vm}_manufacturer WHERE manufacturer_id='$manufacturer_id'");
      $db->next_record();
      $mainframe->setPageTitle( $db->f("mf_name") );
      $browsepage_lbl = shopMakeHtmlSafe( $db->f("mf_name") );
      $tpl->set( 'browsepage_lbl', $browsepage_lbl );
      $browsepage_lbltext = $db->f("mf_desc");
      $tpl->set( 'browsepage_lbltext', $browsepage_lbltext );
      $browsepage_header = $tpl->fetch( 'browse/includes/browse_pagenav2.tpl.php' );
   }
           if ( $num_rows > 1 ) {
$browsepage_footer = $tpl->fetch( 'browse/includes/browse_pagenav2.tpl.php' );
                 $tpl->set( 'browsepage_footer', $browsepage_footer );
           }

// if ( $num_rows > 1 ) {
// $browsepage_footer = $tpl->fetch( 'browse/includes/browse_pagenav.tpl.php' );
// $tpl->set( 'browsepage_footer', $browsepage_footer );
// } else {
// $tpl->set( 'browsepage_footer', '' );
// }


Как бы работает...
Но что бы сделать такое  :-* с этим if ( $num_rows > 1 ), чтобы когда понадобится разкомментировать пагинацию это все вместе работало?
Сейчас если это сделать,то будет показана только пагинация((
Надеюсь смысл понятен ;)
*

fsv

  • Moderator
  • 2787
  • 413 / 2
Смысл понятен. Но ваш вариант сходу затрудняюсь.
Другое не очень понятно. Зачем дальше править shop.browse.php.

Если пагинация совсем временно не нужна, можно попробовать в browse_pagenav.tpl.php после вышеуказанной вставки все удалить. ... А в shop.browse.php пагинацию можно тогда не комментировать.

Когда опять нужна станет пагинация, в browse_pagenav.tpl.php вернуть удаленные строки. И будет и описание производителя, и пагинация.
Или это вам не подходит из-за вашей "задумки с пагинацией"?

Веб-разработка: заказ. Только новая разработка.
*

fsv

  • Moderator
  • 2787
  • 413 / 2
Еще вариант. Кажется, лучше того, что предложил ранее. В смысле универсальнее для раздельной работы над шаблонами browse.

Вариант вывода информации в дополнительно созданном для этого шаблоне в футере browse над пагинацией.

1. Делаем копию browse_header_manufacturer.tpl.php и переименовываем ее в browse_footer_manufacturer.tpl.php. Ложим новый шаблон в ту же папку
\components\com_virtuemart\themes\default\templates\browse\includes\  .

2. Смотрим настройки темы VM -> Product List Style
если «Product Listing with a table (default)», то вы используете шаблон  browse_layouttable.tpl.php
если «Flat Product List (fixed to 1 product per row, using a table)», то вы используете шаблон  browse_listtable.tpl.php
если «Product List (no table, div-based)», то вы используете шаблон browse_notables.tpl.php
В папке \www\components\com_virtuemart\themes\default\templates\browse\includes\
открываете используемый шаблон.
Пусть это будет browse_notables.tpl.php.
перед
echo $browsepage_footer;
вставляете
echo $browsepage_footer_mf;

3. \administrator\components\com_virtuemart\html\shop.browse.php
после примерно стр.476,477
$tpl->set( 'products', $products );
$tpl->set( 'search_string', $search_string );
вставьте

Код
if( $manufacturer_id) {
$db->query( "SELECT manufacturer_id, mf_name, mf_desc FROM #__{vm}_manufacturer WHERE manufacturer_id='$manufacturer_id'");
$db->next_record();
$mainframe->setPageTitle( $db->f("mf_name") );
$browsepage_lbl = shopMakeHtmlSafe( $db->f("mf_name") );
$tpl->set( 'browsepage_lbl', $browsepage_lbl );
$browsepage_lbltext = $db->f("mf_desc");
$tpl->set( 'browsepage_lbltext', $browsepage_lbltext );
$browsepage_footer_mf = $tpl->fetch( 'browse/includes/browse_footer_manufacturer.tpl.php' );
$tpl->set( 'browsepage_footer_mf', $browsepage_footer_mf );
}


« Последнее редактирование: 01.09.2011, 13:38:15 от fsv »
Веб-разработка: заказ. Только новая разработка.
*

ELLE

  • Глобальный модератор
  • 4505
  • 893 / 0
 fsv, вот этот вариант идеален, думаю всем подойдет! :D
Теперь с описанием можно творить все что угодно!
Еще раз спасибо, fsv.
 
*

SolopoV

  • Давно я тут
  • 577
  • 16 / 0
  • зеленею...
У меня после такого хака, описания производителей "протянулись" по всем категориям товаров, а не только на "страницах производителей".

Что-то поковырял и получилось нормально, единственное, что не смог сделать, что бы описание, показывалось только на первой странице товаров производителя, а не на всех.

Содержимое browse_footer_manufacturer.tpl.php
Код
<div><?php echo $browsepage_lbltext ?></div>

Содержимое browse_header_manufacturer.tpl.php
Код
<div><h2>Тра-та-та от <span class="whites"><?php echo $browsepage_lbl ?></span></h2></div>

Блок "elseif( $manufacturer_id)" (ориентир. со строки 136) в shop.browse.php с title и desc... заменил на свой
Код
	elseif( $manufacturer_id) {
$db->query( "SELECT manufacturer_id, mf_name, mf_desc FROM #__{vm}_manufacturer WHERE manufacturer_id='$manufacturer_id'");
$db->next_record();
$mainframe->setPageTitle( $db->f("mf_name") );
$browsepage_lbl = shopMakeHtmlSafe( $db->f("mf_name") );
$tpl->set( 'browsepage_lbl', $browsepage_lbl );
$browsepage_lbltext = $db->f("mf_desc");
$tpl->set( 'browsepage_lbltext', $browsepage_lbltext );
$mainframe->prependMetaTag( "description", substr(strip_tags($browsepage_lbl.'. '.$browsepage_lbltext), 0, 220) );
$browsepage_header = $tpl->fetch( 'browse/includes/browse_header_manufacturer.tpl.php' );
$browsepage_footer_mf = $tpl->fetch( 'browse/includes/browse_footer_manufacturer.tpl.php' );
$tpl->set( 'browsepage_footer_mf', $browsepage_footer_mf );
}
Пункт третий из предыдущих постов не делал.
Если кто знает, как вывести описание только на первой странице, напишите пожалуйста.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

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

Автор angelo4ek-001

Ответов: 5
Просмотров: 3193
Последний ответ 12.11.2015, 01:53:39
от fsv
VirtueMart -как убрать слово "КАТЕГОРИИ" на первой странице магазина

Автор stalker828

Ответов: 12
Просмотров: 10377
Последний ответ 30.07.2014, 11:51:16
от ZAIRA
Не заполняется "Описание категории"

Автор atlantavto2011

Ответов: 0
Просмотров: 1634
Последний ответ 07.07.2014, 18:21:48
от atlantavto2011
Убрать авторизацию с сайта.

Автор Chebyrek

Ответов: 8
Просмотров: 10685
Последний ответ 31.05.2014, 11:25:44
от Andreiand
Как убрать границы у таблицы?

Автор mernata

Ответов: 2
Просмотров: 2653
Последний ответ 31.03.2014, 09:04:30
от mernata