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

Ncorvenius

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

beliyadm

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

effrit

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

beliyadm

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

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


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

effrit

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

beliyadm

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

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

effrit

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

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

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

beliyadm

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

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

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

effrit

  • Легенда
  • 8860
  • 976 / 9
  • effrit.com
*

AlekVolsk

  • Гуру
  • 6540
  • 380 / 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

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

effrit

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

Как вывести дополнительные поля пользователя в материал?

Автор Igor1

Ответов: 34
Просмотров: 1868
Последний ответ 27.10.2018, 19:46:26
от NewUsers
Поля field types - Вывод материала

Автор Шмайсер

Ответов: 11
Просмотров: 203
Последний ответ 25.10.2018, 12:51:54
от NewUsers
lft rgt - что за зверь поля?

Автор pavelrer

Ответов: 4
Просмотров: 158
Последний ответ 19.10.2018, 13:37:15
от passer
Поменять местами поля в форме регистрации

Автор sesil

Ответов: 5
Просмотров: 108
Последний ответ 26.09.2018, 10:19:16
от sesil
Отсутствуют настраиваемые поля для материалов

Автор kik84

Ответов: 11
Просмотров: 135
Последний ответ 21.09.2018, 11:58:51
от NewUsers