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

timofe

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


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


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

ShopES

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

timofe

  • Захожу иногда
  • 148
  • 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

  • Живу я здесь
  • 2464
  • 335 / 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

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

beliyadm

  • Легенда
  • 9758
  • 1664 / 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 »
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

effrit

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

Mitriy

  • Захожу иногда
  • 86
  • 0 / 0
Код
$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 выводимым объектам добавить пару доп полей каждого материала - лезть в ядро хелпера для добавления в приходящий объект? Плохо и может убится при обновлении. А так мы шаблон модуля вытащили в шаблон сайта, добавили (согласен, вложенный цикл плохо, но и движок так и делает) нужные поля в нужные места и забыли про это безобразие
А можно как то отсортировать материалы по доп полю?
Например, есть поле - Рейтинг, там просто цифры от 0 до 5
Так вот в настройках модуля указать - показывать первыми материалы с рейтингом 5
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Вывод даты материала в списке тегов

Автор androv77

Ответов: 2
Просмотров: 896
Последний ответ 09.11.2023, 16:33:08
от denxio
Как сделать отображение времени создания материала?

Автор Pzhigalov

Ответов: 0
Просмотров: 326
Последний ответ 27.09.2023, 22:45:29
от Pzhigalov
[Решено] Получить список тегов каждого материала в блоге категории

Автор goga_pgasovav

Ответов: 1
Просмотров: 402
Последний ответ 02.03.2023, 14:20:21
от goga_pgasovav
ajax загрузка компонента на странице материала К2

Автор Divn

Ответов: 0
Просмотров: 524
Последний ответ 13.01.2023, 15:05:52
от Divn
Как создать ссылку на категорию в картинке материала?

Автор Mnojitell

Ответов: 0
Просмотров: 534
Последний ответ 12.01.2023, 14:14:11
от Mnojitell