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

timofe

  • Захожу иногда
  • 133
  • 0 / 0
  • alex tim.
Всем привет!


Есть задача - создать в материале дополнительное поле (например - dop_text), и вывести его в модуле "Последние новости".


Может кто сталкивался и есть решение?
*

ShopES

  • Захожу иногда
  • 426
  • 11 / 0
получить массив полей и вытащить по ID нужное. по аналогии с компонентом
*

timofe

  • Захожу иногда
  • 133
  • 0 / 0
  • alex tim.
Нашел решение...

Код
<?php
JLoader::register('FieldsHelper', JPATH_ADMINISTRATOR . '/components/com_fields/helpers/fields.php');
$item->jcfields = FieldsHelper::getFields('com_content.article', $item, true);
$fields = [];
foreach($item->jcfields as $jcfield) {
    $fields[$jcfield->name] = $jcfield;
}
echo $fields['Название_дополнительного_поля']->rawvalue;
?>
*

onniby

  • Осваиваюсь на форуме
  • 23
  • 0 / 0
Очень странный пост, как будто решил чем то похвастаться! Сам спросил, сам ответил, а что по чем не понятно. Вы бы хоть другим объяснили, куда вставлять этот код. Я тоже столкнулся с подобной проблемой, допполя не выводятся в модуль новостей. Может кто более доходчиво объяснить куда что вставить нужно? PHP не знаю, разбираюсь чисто интуитивно, куда что вставлять и что нужно удалить или переместить. Буду благодарен за конкретную помощь.
*

onniby

  • Осваиваюсь на форуме
  • 23
  • 0 / 0
Нашел решение...

Код
<?php
JLoader::register('FieldsHelper', JPATH_ADMINISTRATOR . '/components/com_fields/helpers/fields.php');
$item->jcfields = FieldsHelper::getFields('com_content.article', $item, true);
$fields = [];
foreach($item->jcfields as $jcfield) {
    $fields[$jcfield->name] = $jcfield;
}
echo $fields['Название_дополнительного_поля']->rawvalue;
?>

Нашел вывод новостей, вставил код, ничего не работает, эксперементировал, все равно ничего, так что могу предположить, что решение фуфло полное.
*

sivers

  • Живу я здесь
  • 2005
  • 272 / 0
Как раз понадобилось сейчас. Способ выше действительно устарел немного. Для Joomla 4 надо так:
Код
use Joomla\Component\Fields\Administrator\Helper\FieldsHelper;
...
$fields = FieldsHelper::getFields('com_content.article', $article, true);

Описание параметров:
Код
	 * @param   string      $context              The context of the content passed to the helper
* @param   null        $item                 The item being edited in the form
* @param   int|bool    $prepareValue         (if int is display event): 1 - AfterTitle, 2 - BeforeDisplay, 3 - AfterDisplay, 0 - OFF
* @param   array|null  $valuesToOverride     The values to override
* @param   bool        $includeSubformFields Should I include fields marked as Only Use In Subform?
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

onniby

  • Осваиваюсь на форуме
  • 23
  • 0 / 0
Как раз понадобилось сейчас. Способ выше действительно устарел немного. Для Joomla 4 надо так:
Код
use Joomla\Component\Fields\Administrator\Helper\FieldsHelper;
...
$fields = FieldsHelper::getFields('com_content.article', $article, true);

Описание параметров:
Код
	 * @param   string      $context              The context of the content passed to the helper
* @param   null        $item                 The item being edited in the form
* @param   int|bool    $prepareValue         (if int is display event): 1 - AfterTitle, 2 - BeforeDisplay, 3 - AfterDisplay, 0 - OFF
* @param   array|null  $valuesToOverride     The values to override
* @param   bool        $includeSubformFields Should I include fields marked as Only Use In Subform?

Вот это интересно.
А не подскажите, куда все это пихать? В _item.php ?
И что на выходе? В первом, видимо, одно название поля - одно поле выводит, а в вашем варианте?
И это только для четверки актуально?
*

sivers

  • Живу я здесь
  • 2005
  • 272 / 0
И это только для четверки актуально?
Проверено на 4-ке. На других версиях не тестил (да и не буду видимо). Использовал это в макете вывода контакта. Скорее всего в других макетах тоже будет работать. Но только там, где доступен объект материала (второй параметр), а точнее - объект контекста, переданного в первом параметре.
А не подскажите, куда все это пихать? В _item.php ?
Да, думаю, что здесь сработает. use надо писать в самом верху, а вторую строку в любом удобном месте макета.
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

beliyadm

  • Легенда
  • 9655
  • 1659 / 66
  • Севастополь == Россия
Код
$fields = FieldsHelper::getFields('com_content.article', $article, true);
Это если $article это объект с кучей параметров, которые тянут за собой кучу запросов.
А в модуле максимум что может быть это $article->id, который нужно методами цеплять к следующему классу вывода полей, опять же запросы.
Неужели не проще наглядней делать:
Код
$db = JFactory::getDbo();
$query = 'select * from #__fields_values where item_id = "'.$article_id.'"';
$db->setQuery($query);
$fields = $db->loadObjectList();

foreach ($fields as $field) {
if ($field->field_id == 1) {
$p_price = $field->value;
}
if ($field->field_id == 2) {
$p_someone = $field->value;
}
}

В результате имея только ID материала в любом месте мы вытаскиваем строго те доп. поля (по их ID) которые нам тут нужны, а не все скопом и из них выбирая нужные
Для вывода в модулях\разных переразмеченных блогах и прочих элементах самое простое и наглядное решение. Если одно поле - то конечно loadObjectList можно заменить на другой массив без цикла

P.S. конкретный пример. Модуль последних материалов, в шаблон приходят строго определенный массив (id\title\image\link\catid и тд). Нам нужно к 5 выводимым объектам добавить пару доп полей каждого материала - лезть в ядро хелпера для добавления в приходящий объект? Плохо и может убится при обновлении. А так мы шаблон модуля вытащили в шаблон сайта, добавили (согласен, вложенный цикл плохо, но и движок так и делает) нужные поля в нужные места и забыли про это безобразие
« Последнее редактирование: 04.05.2022, 01:23:36 от beliyadm »
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Записки нетрезвого кодера
Skype: beliyadm_pb
*

effrit

  • Легенда
  • 10129
  • 1114 / 13
  • effrit.com
пару лет назад всплывал вопрос.
в цикле вызывать родной метод, если записей под 30 - такое себе.
так что да - 1 или 2 запроса (первый - на сбор данных по статьям, второй - по таблице связанных полей).
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Как пользователю выбирать категорию при публикации материала?

Автор Scaltro

Ответов: 4
Просмотров: 151
Последний ответ 07.08.2022, 21:48:50
от Scaltro
Настраиваемые поля не отображаются в дочерней категории

Автор Dolphin4ik_1

Ответов: 0
Просмотров: 114
Последний ответ 13.07.2022, 16:05:02
от Dolphin4ik_1
CSS стиль для значения поля в списке материалов

Автор Vlad1

Ответов: 8
Просмотров: 304
Последний ответ 29.06.2022, 03:09:37
от Ciaoatutti
Плагин ContentMulticategories не работает на модуле

Автор mak200

Ответов: 1
Просмотров: 198
Последний ответ 04.06.2022, 22:02:38
от mak200
Вывод картинки, находящейся внутри нескольких блоков, на всю ширину экрана

Автор GuDeVic

Ответов: 10
Просмотров: 314
Последний ответ 26.05.2022, 17:42:59
от marksetter