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

Ncorvenius

  • Новичок
  • 2
  • 0 / 0
Кастомные поля
« : 20.01.2018, 06:09:30 »
Здравствуйте. У меня материалы выводятся через модуль. Я бы хотел чтоб в каждом материале выводилось значение кастомного поля. Другими словами: мне в цикле нужно вывести значение поля, ну точнее записать ее в переменную, как это реализовать? Помогите пожалуйста!
*

beliyadm

  • Легенда
  • 9758
  • 1664 / 66
  • Севастополь, Россия
Re: Кастомные поля
« Ответ #1 : 22.01.2018, 18:12:53 »
К сожалению тоже не нашел штатной опции работы с кастомными полями. Это в стандартных моделях контента они автоматом подтягиваются в общем запросе, а если свой модуль\скрипт приходится руками добывать.
Потому делал костыль, на уровне своего модуля запросом из базы получаем:
Код
        
$db = JFactory::getDbo();
$query = 'select * from #__fields_values where item_id = "'.$id.'"';
$db->setQuery($query);
$fields = $db->loadObjectList();

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

То есть у материала есть два дополнительных поля: цена и площадь, соответственно field_id=1 отвечает за цену, field_id=2 за площадь. Ну и так далее, в зависимости от количества доп. полей.
$id в запросе - это ID материала
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
Re: Кастомные поля
« Ответ #2 : 11.03.2018, 21:58:30 »
чет по ходу и из стандартных модулей выпилили их. что-то не могу вывести.
кто-нить подтвердите или опровергните, пожалуйста  ^-^
*

beliyadm

  • Легенда
  • 9758
  • 1664 / 66
  • Севастополь, Россия
Re: Кастомные поля
« Ответ #3 : 11.03.2018, 23:42:45 »
кто-нить подтвердите или опровергните, пожалуйста  ^-^

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


Расковырял таки (чего то раньше не интересовался), каждое поле (тип поля) это плагин группы fields и естественно срабатывать он будет на прописанные триггеры лишь в компонентах, но не в модулях.
Если в стандартных модулях материалов это раньше и было - то опять же на эмуляции вызова либо по триггеру либо дописанный запрос. Хотя кажется мне - не было их там никогда ))
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
Re: Кастомные поля
« Ответ #4 : 12.03.2018, 05:52:55 »
ок, спасибо.
не, они были точно. я в стандартных модулях их выводил без всяких танцев с базой.
да и вопрос возник из-за того, что на орг-овском форуме перестал работать пример с ними.
что-то колбасит разработчиков, короче. наверно, из-за производительности вырезали их.
*

beliyadm

  • Легенда
  • 9758
  • 1664 / 66
  • Севастополь, Россия
Re: Кастомные поля
« Ответ #5 : 12.03.2018, 10:35:29 »
не, они были точно. я в стандартных модулях их выводил без всяких танцев с базой.
А покажи код как выводил и на какой версии движка, раньше не разбирал как они устроены были изначально, хоть посмотрю.
Вчера в стандартных последних новостях вывел принтом весь массив объекта в шаблоне - ни единого упоминания про кастомные поля.

P.S. возможно у движка раньше было (и сейчас есть но я не нашел) какое-то стандартное апи, чтобы по id объекта подтягивать поля - ну так по сути это и будет отдельный запрос, только сделанный в ядре.
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
Re: Кастомные поля
« Ответ #6 : 12.03.2018, 10:41:12 »
да я так же из объекта итема их брал, когда делал специфический вывод при отключенном в настройках поля отображении.

Код
echo $item->jcfields[1]->rawvalue;

а так они по умолчанию выводились сами в стандартных модулях. я еще подумал, что это не всегда полезно может быть. видимо, разработчики также подумали  ;D
*

beliyadm

  • Легенда
  • 9758
  • 1664 / 66
  • Севастополь, Россия
Re: Кастомные поля
« Ответ #7 : 12.03.2018, 10:46:42 »
а так они по умолчанию выводились сами в стандартных модулях. я еще подумал, что это не всегда полезно может быть. видимо, разработчики также подумали  ;D
Согласен, нужны редко а нагрузка идет всегда.
Вообще мне кажется, структура не очень правильная. Нужно в таблице контента делать метку, есть ли у него кастомное поле и только по этому условию при формировании всего массива в запрос добавлять JOIN #__fields_values (и опять же по условию в настройках самого модуля).
Видимо посчитали ненужным усложнением и выпили.

Приходится в цикле делать подзапросы и творить ***код :) (можно, конечно, до foreach пройтись по объекту, вытащить его id, сформировать отдельно массив полей и объединить их, но .... лениво )

У меня лично доп поля крайне редко используются, только в магазинах\каталогах на стандартном контенте, но там обычно весь вывод что блога что разных модулей товаров переписан в отдельную функцию, чтоб не плодить сущности и необходимости в таком нет
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Re: Кастомные поля
« Ответ #9 : 12.03.2018, 11:37:53 »
гайд:

в переопределенном шаблоне модуля ваяем (в частности модуль mod_articles_latest)

Код
<?php
/**
 * @package     Joomla.Site
 * @subpackage  mod_articles_latest
 *
 * [member=126442]copyright[/member]   Copyright (C) 2005 - 2018 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

defined('_JEXEC') or die;

// подключаем движок полей
JLoader::register('FieldsHelper', JPATH_ADMINISTRATOR . '/components/com_fields/helpers/fields.php');

?>
<ul class="latestnews<?php echo $moduleclass_sfx; ?>">
<?php
    foreach ($list as $item)
    {
        // получаем сами поля для конкретного материала
        $item->jcfields = FieldsHelper::getFields('com_content.article', $item, true);
        $fields = [];
        foreach($item->jcfields as $jcfield)
        {
            $fields[$jcfield->name] = $jcfield;
        }

        // теперь у нас в $fields находятся все поля конкретного материала
        // до конкретного значения конкретного поля можно достучаться так:
        // $field_value = $fields['field_name']->rawvalue;
?>

    <li itemscope itemtype="https://schema.org/Article">
        <a href="<?php echo $item->link; ?>" itemprop="url">
            <span itemprop="name">
                <?php echo $item->title; ?>
            </span>
        </a>
    </li>
<?php } ?>
</ul>


лайки-шмайки в карму приветствуются  ;)
« Последнее редактирование: 12.03.2018, 11:42:01 от AlekVolsk »
*

beliyadm

  • Легенда
  • 9758
  • 1664 / 66
  • Севастополь, Россия
Re: Кастомные поля
« Ответ #10 : 12.03.2018, 11:51:15 »
Спасибо, был же уверен что есть в апи это FieldsHelper::getFields :)
Но по сути этот тот же самый отдельный запрос в базу внутри цикла. Только что не нативным запросом а через ядро движка.
В любом случае спасибо ))

Вспомнил еще, у меня на уровне материала так еще получилось (когда надо было расставить в разных местах), через render а не через getFields
Код
JLoader::register('FieldsHelper', JPATH_ADMINISTRATOR . '/components/com_fields/helpers/fields.php');
foreach ($this->item->jcfields as $field) {
//echo FieldsHelper::render($field->context, 'field.render', array('field' => $field));
if ($field->name == "iframeurl") {
        $frameurl = $field->value;
    }
}
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
Re: Кастомные поля
« Ответ #11 : 12.03.2018, 14:35:22 »
лайки-шмайки в карму приветствуются  ;)
да лайка-то не жалко, только это так себе метода. изящнее собрать в кучу все ID и запрос в базу сделать, что толку от компактности и использования API, если это дергание базы в цикле?
*

yarovidze

  • Новичок
  • 7
  • 0 / 0
Re: Кастомные поля
« Ответ #12 : 28.05.2019, 15:15:11 »
Здравствуйте, помогите пожалуйста вывести доп поле в модуле JUX MashUp. На пиво с меня
*

fireman

  • Захожу иногда
  • 338
  • 10 / 0
  • в цель...
Re: Кастомные поля
« Ответ #13 : 23.05.2020, 10:51:46 »
Здравствуйте! Модуль mod_articles_category выводит превью материалов, есть необходимость вывести в превью значения доп. полей.
Но ни один из двух способов у меня не работает.
Что то изменилось с возможностью вывода полей в модуле? Сам модуль mod_articles_category требует другого подхода?  Или руки у меня кривые и все должно работать?
*

beliyadm

  • Легенда
  • 9758
  • 1664 / 66
  • Севастополь, Россия
Re: Кастомные поля
« Ответ #14 : 23.05.2020, 15:05:49 »
Вариант с запросом в базу работает всегда и везде ($id только заменить в запросе на нужную переменную и все, для mod_articles_category это по идее $item->id). Нативные варианты тоже делают свои запросы в базу, так что в плане нагрузки это идентично
Код
$db = JFactory::getDbo();
$query = 'select * from #__fields_values where item_id = "'.$id.'"';
$db->setQuery($query);
$fields = $db->loadObjectList();

foreach ($fields as $field) {
if ($field->field_id == 1) {
$p_price = $field->value;
} else if ($field->field_id == 2) {
$p_area = $field->value;
}
}
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

voland

  • Легенда
  • 11030
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
Re: Кастомные поля
« Ответ #15 : 23.05.2020, 15:13:27 »
@AlexVolsk плагин писал, поищите в чате в телеграме
*

voland

  • Легенда
  • 11030
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
Re: Кастомные поля
« Ответ #16 : 23.05.2020, 15:14:23 »
Здравствуйте! Модуль mod_articles_category выводит превью материалов, есть необходимость вывести в превью значения доп. полей.
Но ни один из двух способов у меня не работает.
Что то изменилось с возможностью вывода полей в модуле? Сам модуль mod_articles_category требует другого подхода?  Или руки у меня кривые и все должно работать?
Ответ выше был дан ТС, это вообще о другом тема
*

valcoray

  • Осваиваюсь на форуме
  • 26
  • 0 / 0
Re: Кастомные поля
« Ответ #17 : 27.12.2020, 22:33:57 »
Попробовал все варианты в данной теме, к сожалению, ни один не сработал(

К сожалению тоже не нашел штатной опции работы с кастомными полями. Это в стандартных моделях контента они автоматом подтягиваются в общем запросе, а если свой модуль\скрипт приходится руками добывать.
Потому делал костыль, на уровне своего модуля запросом из базы получаем:
Код
        
$db = JFactory::getDbo();
$query = 'select * from #__fields_values where item_id = "'.$id.'"';
$db->setQuery($query);
$fields = $db->loadObjectList();

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


То есть у материала есть два дополнительных поля: цена и площадь, соответственно field_id=1 отвечает за цену, field_id=2 за площадь. Ну и так далее, в зависимости от количества доп. полей.
$id в запросе - это ID материала

*

valcoray

  • Осваиваюсь на форуме
  • 26
  • 0 / 0
Re: Кастомные поля
« Ответ #18 : 27.12.2020, 23:32:09 »
Если у кого то получилось вывести дополнительные поля в модуле mod_articles_category буду весьма благодарен за инфу ^-^
*

Alines

  • Новичок
  • 8
  • 1 / 0
Re: Кастомные поля
« Ответ #19 : 01.07.2021, 21:30:45 »
Если у кого то получилось вывести дополнительные поля в модуле mod_articles_category буду весьма благодарен за инфу ^-^

Привет из будущего. Пол дня потратил чтобы разобраться как это сделать. В итоге нашел здесь почти рабочее решение. Чуть его допилил и вуаля. Напомню, это для шаблона mod_articles_category. Пользуйтесь.

Ставить можно в любое место шаблона. Хоть удалить там и все и вместо родного кода. Что я и сделал.
Код
//Сначала конструкция
<?php
    foreach ($list as $item)
    {
        $item->jcfields = FieldsHelper::getFields('com_content.article', $item, true);
        $fields = [];
        foreach($item->jcfields as $jcfield)
        {
            $item->jcfields[$jcfield->name] = $jcfield;
        }
   }
?>
//Выводим в любом месте
<?php echo $item->jcfields['field_name']->rawvalue; ?>
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Вывод дополнительного поля материала в модуле

Автор timofe

Ответов: 10
Просмотров: 1509
Последний ответ 06.10.2023, 14:02:24
от Mitriy
Вывести поля профиля Joomla

Автор romagromov

Ответов: 9
Просмотров: 596
Последний ответ 09.12.2022, 08:43:08
от sivers
Добавление поля в форму регистрации

Автор Robert24

Ответов: 3
Просмотров: 444
Последний ответ 10.10.2022, 23:35:04
от Robert24
Тип поля формы Select sql, как заполнить его через функцию php?

Автор GuDeVic

Ответов: 13
Просмотров: 984
Последний ответ 07.10.2022, 12:25:45
от fsv
Настраиваемые поля не отображаются в дочерней категории

Автор Dolphin4ik_1

Ответов: 0
Просмотров: 304
Последний ответ 13.07.2022, 16:05:02
от Dolphin4ik_1