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

Vlad1

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

Подскажите, пожалуйста, по следующему вопросу.

Есть список материалов, в каждом из которых имеется Дополнительное поле, например, с id=5.
Есть модуль в Сайдбаре, который отображается только на странице материала (не в списке материалов, но это не важно).
Задача, чтобы в модуле в сайдбаре отображалось значение Дополнительного поля для каждого конкретного материала.

Пробовал так:
<?php echo($this->item->jcfields[5]->value); ?>

Результат - белый экран.

В идеале задача шире: пытаюсь внедрить API парсер курсов. Хотел, чтобы бралось значение конкретного поля в текущем материале и подставлялся в запрос к массиву из API.
*

sivers

  • Завсегдатай
  • 1987
  • 271 / 0
Задача, чтобы в модуле в сайдбаре отображалось значение Дополнительного поля для каждого конкретного материала.
Предложу пару вариантов как делал бы сам:
1. В модуле читать ИД материала ($app->input->getInt('id');) и по нему из БД вытаскивать значение доп.поля (оно там как раз к ИД материала + ИД поля привязано).
2. Если не боитесь глобальных переменных, то в макете материала объявляете глобальную переменную и вписываете в нее весь материал или только ваше доп.поле. В модуле обращаетесь к этой глобальной переменной и читаете ее. Кто не любит глобальные переменные - можно использовать константу. В любом случае сперва желательно проверять существование константы (или гл.переменной), а потом уже к ней обращаться.

Кстати, не так давно (1-2 мес. назад) точно такой вопрос уже задавали и ответ был получен - поищите.
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

Vlad1

  • Захожу иногда
  • 79
  • 0 / 0
Предложу пару вариантов как делал бы сам:
1. В модуле читать ИД материала ($app->input->getInt('id');) и по нему из БД вытаскивать значение доп.поля (оно там как раз к ИД материала + ИД поля привязано).

sivers, благодарю! Первую часть по Вашей наводке сделал и понял, куда копать.
Вторую часть (вывод поля по известному ID материала) нашел на англоязычном форуме Joomla!, где решение предложил effrit.

В итоге сделал так:
Код
<?php

// Получаем ID материала
$app  = JFactory::getApplication();
$id_article = $app->input->getInt('id');
echo $id_article;

// Получаем конкретное поле из этого материала
$db = JFactory::getDbo();
$query = 'select * from #__fields_values where item_id = "'.$id_article.'"';
$db->setQuery($query);
$fields = $db->loadObjectList();

foreach ($fields as $field) {
if ($field->field_id == 5) { // 5 - ID поля
echo $field->value;
}
}

?>

У меня работает. Не знаю, правда, насколько рационален код.
« Последнее редактирование: 01.06.2021, 00:18:16 от Vlad1 »
*

sivers

  • Завсегдатай
  • 1987
  • 271 / 0
У меня работает. Не знаю, правда, насколько рационален код.
Этот способ хорош тем, что не зависит от страницы (если только у вас есть ИД материала). Если же использовать передачу через глобальные переменные (или константы), то можно обойтись бэз запроса к БД. Хотя и запрос там не особо тяжелый, особенно если материалов не много.

Кстати, запрос, который вы нашли, читает все поля материала. Если в модуле надо выводить только одно поле (с ИД = 5), то лучше и тянуть из БД только его:
Код
$query = 'select value from #__fields_values where field_id = 5 AND item_id = "'.$id_article.'"';
$db->setQuery($query);
$fieldValue = $db->loadResult();
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

Vlad1

  • Захожу иногда
  • 79
  • 0 / 0

Кстати, запрос, который вы нашли, читает все поля материала. Если в модуле надо выводить только одно поле (с ИД = 5), то лучше и тянуть из БД только его:
Код
$query = 'select value from #__fields_values where field_id = 5 AND item_id = "'.$id_article.'"';
$db->setQuery($query);
$fieldValue = $db->loadResult();

Принято к сведению, исправил, спасибо!
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться