Новости Joomla

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

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

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

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

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

Читать статью на Хабре.

@joomlafeed

🏆 Открыто голосование за 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 Гость просматривают эту тему.
  • 27 Ответов
  • 9933 Просмотров
*

Saber

  • Осваиваюсь на форуме
  • 49
  • 1 / 0
И так есть у меня joomla 1.5 есть самая свежая версия jcomments
пишу свой компонент со всякими ajax функциями и прочего...
открыл инструкцию

Цитировать
Как показать комментарии для заданного объекта

Для этого необходимо подключить посредством функции include/require основной файл JComments и вызвать статический метод JComments::showComments. Этот метод поддерживает три обязательных параметра: ID объекта, имя компонента, и имя объекта.

  $comments = $mosConfig_absolute_path . '/components/com_jcomments/jcomments.php';
  if (file_exists($comments)) {
    require_once($comments);
    echo JComments::showComments($id, 'com_mycomp', $title);
  }

Где $id — это идентификатор комментируемого, com_mycomp — имя компонента и $title — имя объекта.
вставил в свой код данный кусок
заменив ($id, 'com_mycomp', $title)
на свои значения
Код
 $comments = $mosConfig_absolute_path . '/components/com_jcomments/jcomments.php';

эту строку пришлось заменить на
Код
 $comments = '/var/www/develop/j15/components/com_jcomments/jcomments.php';

В итоге результат такой

http://develop.vzletka.net/j15/index.php?option=com_makeup&task=show&id_product=1

Попытка оставить комментарий не проходит, комменты к новостям при этом работают на ура. не могу понять в чём косяк :(


*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Код комментариев вставляется в код страницы статично или посредством AJAX-запроса?
*

Saber

  • Осваиваюсь на форуме
  • 49
  • 1 / 0
статично, но у меня подозрения что ajax между собой пересекается
*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Да не думаю, дело в том, что выглядит это все так, как будто не инициализируется ни объект редактора комментариев, и не подключается файл стилей...
*

Saber

  • Осваиваюсь на форуме
  • 49
  • 1 / 0
Кажется проблема решилась...
в другой див запихал код комментариев
*

skrap

  • Осваиваюсь на форуме
  • 38
  • 0 / 0
А каким образом сделать так, чтобы ссылка на комментарии и их количество отображалась только в случае, если комментарии для данной статьи не запрещены (например, отключено комментирование вообще, или для неавторизованных)? 
*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Ну можно добавить вот такую проверку:

Код: php
require_once($mainframe->getCfg('absolute_path') . '/components/com_jcomments/jcomments.php');
$acl = & JCommentsFactory::getACL();
if ($acl->canComment()) {
// у пользователя есть право на комментирование
}
*

skrap

  • Осваиваюсь на форуме
  • 38
  • 0 / 0
Спасибо :) Все получилось
*

Saber

  • Осваиваюсь на форуме
  • 49
  • 1 / 0
smart
хочу поле хомепейдж заменить на выпадающий список с заранее введёными значениями. грубо говоря посетители сайта могу выбрать хомепейдж себе из 3х предложенных.
это так понимаю всё в tpl_comment.php надо переделать в классы jcoomment лесть не надо?
*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Т.е. грубо говоря ты хочешь использовать поле homepage для каких-то других целей. Допустим там город или еще что-то? И чтобы пользователи просто выбирали значение из списка - так?

Если ты в это поле хочешь сохранять именно ссылки на сайты, то можно изменить только в шаблоне, в самом компоненте можно ничего не менять - значение этого поля по-прежнему будет сохраняться в базу и считываться с него. А вот если нужно сохранять текстовые данные - в компоненте надо убрать проверку на корректность ссылки. Замени в файле jcomments.ajax.php строчку:

Код: php
$comment->homepage = JCommentsText::url($values['homepage']);
на
Код: php
$comment->homepage = trim(strip_tags($values['homepage']));
*

skrap

  • Осваиваюсь на форуме
  • 38
  • 0 / 0
Ну можно добавить вот такую проверку:

А как проверить, разрешено ли комментирование этой статьи? Например, не стоит ли там {jcomments off} или комментарии этого раздела или категории не запрещены в настройках?
*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Ну на самом деле, на такой вопрос, вы легко могли бы найти ответ самостоятельно, изучив jcomments.content.php. Но раз уж вопрос задан... Есть вот вспомогательный класс JCommentsContentPluginHelper (/com_jcomments/helpers/contentplugin.php), у него есть несколько методов:

  • isEnabled
  • isDisabled
  • isLocked
  • checkCategory

Все методы данного класса прокомментированы, параметры описаны. Так что посмотрите, и, я думаю, все станет понятно. Обращаю ваше внимание, что большинство функций и классов имеют описание в комментариях.
*

skrap

  • Осваиваюсь на форуме
  • 38
  • 0 / 0
Smart,
Спасибо за ответ :)

Дело в том, что я последний раз активно занимался программированием еще тогда, когда ООП было чем-то новым, а c PHP последний раз плотно сталкивался, когда появилась 3 версия...
Никак у меня не получается сделать, чтобы ссылка на комментарии появлялась, только если комментирование конкретной статьи возможно и пользователь имеет право комментировать.
Буду разбираться :) 
*

Saber

  • Осваиваюсь на форуме
  • 49
  • 1 / 0
у меня проблема вот такая:
Интеграцию делал по вашему руководсву
но в результате получил вот такое

Хотя в вызове подставляю и ид и имя материала.

далее используемый код и результат его работы
Цитировать
<?php

$comments = '/www/makeupli/www/htdocs/components/com_jcomments/jcomments.php';
  if (file_exists($comments)) {
      require_once($comments);
echo $this->data->id_pro.'com_makeup'.$this->data->name;
          echo JComments::showComments($this->data->id_pro,'com_makeup',$this->data->name);
       }
?>


нужно оно мне в выборке последних комментариев

чтоб они были кликабельны, в настройках указал чтоб выводились заголовки материала
*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Вот, и тут мы дошли до самого главного в интеграции - до плагина. Пока для данного компонента не будет плагина - не будет ни заголовков, ни корректных ссылок. Почитайте внимательно вот тут: Создание плагина для JComments.
*

Saber

  • Осваиваюсь на форуме
  • 49
  • 1 / 0
а жесть а я ползаю по структуре БД пытаюсь найти таблицу соответвсия где мой ИД соотносится с ИД коммента и от этой связки выдирается имя обьекта. :)
*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Учитывая тот факт, что названия объектов могут меняться (впрочем как и ссылки на них - например установили новый SEF или пункт меню добавили), я посчитал неэффективным хранение статичной информации об этом в комментариях и возложил функцию получения данной информации на плагины.
*

Saber

  • Осваиваюсь на форуме
  • 49
  • 1 / 0
smart
только я немного логику потерял :(

вот есть код

Код
function getObjectOwner( $id ) {
   
    $db = & JCommentsFactory::getDBO();
    $db->setQuery( "SELECT created_by FROM #__mycomp WHERE id='$id'");
    return $db->loadResult();
  }

Возвращается ид овнера.
Вопрос в том "чей овнер"
я предположил, что
овнер коммента. но логично его брать из таблицы комментов по ид коммента
овер основого сообщения, а нужен ли он?
я хочу чтоб модуль последних комментов выводил часть коммента со ссылкой на обьект, и кто отправил коммент.

или я чего-то не правильно понимаю?
*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Вопрос в том "чей овнер"
я предположил, что овнер коммента. но логично его брать из таблицы комментов по ид коммента овер основого сообщения, а нужен ли он?
Ну если метод называется getObjectOwner, то можно предположить, что он возвращает владельца объекта. А для каких объектов существует тот или иной плагин? Ну конечно для комментируемых...

Если бы он возвращал идентификатор автора комментария, то метод бы назывался getCommentOwner... но в таком случае, зачем его засовывать в плагин?

Еще раз, в документации по созданию плагинов написано:

Цитировать
Плагины используются компонентом для получения информации о комментируемом объекте (имя объекта или прямая ссылка). Это необходимо потому, что сам компонент комментариев ничего не знает о комментируемых объектах и о их структуре данных. Поэтому, такие задачи, как построение ссылки на объект и получение его названия возлагаются на разработчика расширения.

А следовательно, данные плагины работают с комментируемыми объектами, а не с комментариями.

овер основого сообщения, а нужен ли он?
Не сообщения, а комментируемого объекта (статьи, файла, картинки в галерее). Данная функция позволяет определить кто автор комментируемого объекта. Зачем? Ну например, чтобы автоматически его подписать на комментарии. Или чтобы в списке комментариев к материалу комментарии автора выделялись цветов. Вариантов использования может быть множество.
*

Saber

  • Осваиваюсь на форуме
  • 49
  • 1 / 0
Цитировать
Если бы он возвращал идентификатор автора комментария, то метод бы назывался getCommentOwner... но в таком случае, зачем его засовывать в плагин?
Это меня и натолкнуло что ("овнера обьекта"= овенера материала) (не точно выразился)= владелец коментируемого объекта.
но если владелец у меня всегда админ, и вообще не важно пользователю знать кто овнер объекта. ну это в моем варианте.

могу либо задать постоянного овнера, либо не вызывать данную функцию вообще?
*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
но если владелец у меня всегда админ, и вообще не важно пользователю знать кто овнер объекта. ну это в моем варианте.
если в вашем компоненте владелец всех комментируемых объектов всегда один пользователь (администратор) вы можете просто не реализовывать данную функцию в плагине. Так как любой плагин является наследником от JCommentsPlugin где присутствует базовая реализация данного метода, возвращающая по умолчанию -1.
*

Saber

  • Осваиваюсь на форуме
  • 49
  • 1 / 0
ага сработало :) как расплатятся на пиво переведу вам :)

и ещё ошибочка у вас на сайте

class jc_com_mycomp extends JCommentsPlugin {
 
  function getObjectTitle( $id ) {
   
    $db = & JCommentsFactory::getDBO();
    // Загрузка из базы данных имени по заданному id
    $db->setQuery( "SELECT title FROM #__mycomp WHERE id='$id'");
    return $database$db->loadResult();
  }
*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
и ещё ошибочка у вас на сайте
угу, спасибо, исправил
*

Saber

  • Осваиваюсь на форуме
  • 49
  • 1 / 0
блин насколько приятно использовать продукты, а не "поделки".
просто кайф. Спасибо большое ,человеческое за качественный продукт.
*

Saber

  • Осваиваюсь на форуме
  • 49
  • 1 / 0
ещё у меня вопрос, надо мне расширить набор полей комментируемого объекта.
как мне это красивее сделать.
тоесть добавить ещё пару полей не важного какого типа. хоть чекбокс хоть поле ввода.

второй вопрос.
хочу в модуле последних комментариев добавить ещё одно поле для вывода что присутствует в самописном компоненте.

Заранее спасибо :)

*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
ещё у меня вопрос, надо мне расширить набор полей комментируемого объекта.
комментируемый объект это то, что комментируется... Т.е. объекты вашего компонента - и тут компонент комментариев не при чем. Если вы имеете в виду "объект комментария", подразумевая под этим сам комментарий, то это совсем другая история - на форуме точно было описание, как добавить поле title.

хочу в модуле последних комментариев добавить ещё одно поле для вывода что присутствует в самописном компоненте.
добавляйте, кто ж запрещает-то? откорректируйте запросы к БД, которые выбирают комментарии и выберите дополнительную информацию из таблиц вашего компонента...
*

Saber

  • Осваиваюсь на форуме
  • 49
  • 1 / 0
Цитировать
комментируемый объект это то, что комментируется...
ну разумеется снова не правильно выразился..
спасибо попробую поискать.
*

Saber

  • Осваиваюсь на форуме
  • 49
  • 1 / 0
Пока наткнулся на одну тему
http://joomlaforum.ru/index.php/topic,39240.0.html
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Интеграция с Community Builder

Автор Opposite

Ответов: 77
Просмотров: 70350
Последний ответ 20.09.2022, 11:22:26
от Vlad1
Интеграция JComments с SP Page Builder

Автор Proaqua

Ответов: 5
Просмотров: 6817
Последний ответ 14.06.2020, 11:53:38
от xpank
Интеграция с SP LMS

Автор valensy

Ответов: 11
Просмотров: 4482
Последний ответ 02.03.2020, 12:50:40
от shamangor
Интеграция JComments в JoomShoping

Автор apelsin

Ответов: 20
Просмотров: 13111
Последний ответ 27.12.2019, 22:39:08
от dron
Интеграция JComments с K2

Автор Sulpher

Ответов: 276
Просмотров: 128248
Последний ответ 31.07.2019, 11:05:39
от wishlight