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

Ncorvenius

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

beliyadm

  • Легенда
  • 9514
  • 1649 / 65
  • Севастополь == Россия
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 материала
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Записки нетрезвого кодера
Skype: beliyadm_pb
*

effrit

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

beliyadm

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

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


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

effrit

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

beliyadm

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

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

effrit

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

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

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

beliyadm

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

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

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

effrit

  • Легенда
  • 9803
  • 1080 / 13
  • effrit.com
*

AlekVolsk

  • Гуру
  • 6906
  • 407 / 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

  • Легенда
  • 9514
  • 1649 / 65
  • Севастополь == Россия
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;
    }
}
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Записки нетрезвого кодера
Skype: beliyadm_pb
*

effrit

  • Легенда
  • 9803
  • 1080 / 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

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

beliyadm

  • Легенда
  • 9514
  • 1649 / 65
  • Севастополь == Россия
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;
}
}
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Записки нетрезвого кодера
Skype: beliyadm_pb
*

voland

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

voland

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

Таблицы с поля именно в БД

Автор Vdmit

Ответов: 1
Просмотров: 97
Последний ответ 04.08.2020, 15:52:31
от xpank
Как отобразить кастомные поля в com_search?

Автор R31rus

Ответов: 0
Просмотров: 113
Последний ответ 27.06.2020, 20:26:05
от R31rus
Как вывести доп.поля материалов в список материалов метки?

Автор aniangeless

Ответов: 25
Просмотров: 473
Последний ответ 22.06.2020, 17:18:52
от aniangeless
Как добавлять динамически новые поля в настройках модуля?

Автор Damarkuzz

Ответов: 2
Просмотров: 164
Последний ответ 19.06.2020, 09:41:34
от NewUsers
Получить значение дополнительного поля

Автор fireman

Ответов: 2
Просмотров: 104
Последний ответ 03.05.2020, 16:32:18
от fireman