Новости Joomla

Обработка HTTP ответа в Joomla 6+. Изменения по сравнению с Joomla 3 - Joomla 5

👩‍💻 Обработка HTTP ответа в Joomla 6+. Изменения по сравнению с Joomla 3 - Joomla 5.В Joomla для выполнения внешних запросов из PHP к сторонним API используется класс Joomla\Http\Http напрямую или же Joomla\Http\HttpFactory, который возвращает для работы преднастроенный по умолчанию класс Http. О работе с HTTP-запросами подробно рассказывалось в статье 2021 года Создание внешних запросов с использованием HttpFactory (Joomla). Некоторые изменения касаются работы с ответами на запросы. Например, наш запрос:
use Joomla\Http\HttpFactory;$http = (new HttpFactory)->getHttp($options, ['curl', 'stream']);$response = $http->get('https://any-url.ru/api/any/endpoint');
Раньше можно было получить код ответа или тело ответа как свойство $response - $response->code или $response->body. Однако, Joomla, начиная с Joomla 4 во многом переходит на стандарты PSR. В частности для работы с HTTP-ответами - на PSR-7. Также хорошая статья на Хабре о PSR-7: PSR-7 в примерах.
Прямое обращение к свойствам code, headers, body объявлено устаревшим в Joomla 6.0.0 и обещают удалить в Joomla 7.0.0.
Вместо этого нужно работать с HTTP-ответом по стандартам PSR-7. Код ответа.Было $response->code. Стало $response->getStatusCode().Заголовки ответа.Было $response->headers. Стало $response->getHeaders().Тело ответа.Было $response->body. Стало (string)$response->getContents().В тело ответа теперь приходит не строка, а поток - объект класса Laminas\Diactoros\Stream. Поэтому его нужно привести к строке (если это json, к примеру): (string)$response->getContents(). Чаще всего в коде Joomla встречается именно такой вариант. Однако, есть и вариант с перемещением указателя чтения на начало потока:
// Получили ответ в виде потока$stream = $response->getBody();// "перемотали" на начало$stream->rewind();// Получили строковый ответ$json = $stream->getContents();
В итоге результат одинаковый.@joomlafeed#joomla #разработка #php

Quantum Manager нужен сообществу, а автору нужна ваша поддержка!

Quantum Manager нужен сообществу, а автору нужна ваша поддержка!Файловый менеджер Quantum — одно...

Файловый менеджер Quantum — одно из самых популярных решений для Joomla, созданное разработчиком из сообщества Joomla, Дмитрием Цымбалом (@tsymbalmitia). Он делает Quantum удобным, безопасным и современным, обновляет его, исправляет уязвимости и отвечает пользователям — всё это в свободное от основной работы время.

Теперь настал момент для следующего шага: развитие проекта требует больше времени и ресурсов.

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

mr.relax

  • Осваиваюсь на форуме
  • 26
  • 0 / 0
Joomla!, 3.1.1.
предустановленый шаблон protostar
---
Для материала задаю свойства: 
"Изображение для вступительного текста материала" (маленький рисунок)
"Изображение полного текста материала" (большой рисунок)

При просмотре работает только "Изображение полного текста материала", т.е. когда открываешь статью и картинка и подпись под ней показываются.
Предпросмотр же материала, когда должно показываться маленькое изображение, которое указано в:"Изображение для вступительного текста материала" - не показывается.
В чем может быть проблема?
*

fbr

  • Завсегдатай
  • 1679
  • 209 / 7
это баг Joomla
нужно переопределять вывод блога у себя в шаблоне

причем на главной - все работает
поэтому вывод изображения нужно взять оттуда (default_item.php, 135 строка) и заменить не рабочий код вывода в блоге (blog_item.php, 35 строка)
*

mr.relax

  • Осваиваюсь на форуме
  • 26
  • 0 / 0
Спасибо за ответ. Все заменил, но все равно не работает.
*

fbr

  • Завсегдатай
  • 1679
  • 209 / 7
извиняюсь, забыл ..
в начале редактируемого файла добавьте переменную:
Код: php
$images = json_decode($this->item->images);
*

mr.relax

  • Осваиваюсь на форуме
  • 26
  • 0 / 0
Спасибо за участие в моей проблеме. Все заработало.

Что сделал:
взял из файла
www\joomla\components\com_content\views\featured\tmpl\default_item.php
код из строки 135
Код
<?php if (isset($images->image_intro) && !empty($images->image_intro)) : ?>
<?php $imgfloat = (empty($images->float_intro))? $params->get('float_intro') : $images->float_intro; ?>
<div class="pull-<?php echo htmlspecialchars($imgfloat); ?> item-image"> <img
<?php if ($images->image_intro_caption):
echo 'class="caption"'.' title="' .htmlspecialchars($images->image_intro_caption).'"';
endif; ?>
src="<?php echo htmlspecialchars($images->image_intro); ?>" alt="<?php echo htmlspecialchars($images->image_intro_alt); ?>"/> </div>
<?php endif; ?>
и заменил им в файле:
www\joomla\components\com_content\views\category\tmpl\blog_item.php
код в строке 35
Код
<?php if (isset($images->image_intro) && !empty($images->image_intro)) : ?>
так же в начало файла:
www\joomla\components\com_content\views\category\tmpl\blog_item.php
вставил определение переменной:
Код
$images = json_decode($this->item->images);

fbr, спасибо еще раз!
*

fbr

  • Завсегдатай
  • 1679
  • 209 / 7
Так, стоп!
попросту, вы хакнули ядро ...

Нужно не изменять компонент, а переопределять его!

Создайте в папке своего шаблона: имя_шаблона/html/com_content/category/blog_item.php (просто скопируйте из компонента)

И редактируйте его сколько угодно, макет будет браться оттуда и не слетит при обновлении
*

ilya_daddy

  • Осваиваюсь на форуме
  • 29
  • 0 / 0
Что-то не помогло. Не ужели столько обновлений вышло, а баг остался?
Сейчас в файле ( Joomla!, 3.2.3.) www\joomla\components\com_content\views\category\tmpl\blog_item.php в строке 35 прописано
Код
<?php echo JLayoutHelper::render('joomla.content.intro_image', $this->item); ?>
Все выше манипуляции мне не помогают. Выходит только "Изображение полного текста материала"  :(
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Не работает мобильная версия сайта

Автор jeans

Ответов: 4
Просмотров: 1382
Последний ответ 21.05.2025, 12:44:06
от jeans
Не работает менеджер материалов, ошибка 500 SSL certificate problem

Автор Екатерина М

Ответов: 5
Просмотров: 1955
Последний ответ 06.04.2025, 09:27:20
от wishlight
[Решено] Вывод значений из custom fields материала в модуле по имени поля

Автор goga_pgasovav

Ответов: 3
Просмотров: 1492
Последний ответ 30.12.2024, 13:22:11
от goga_pgasovav
Переход на страницу материала после его размещения пользователем

Автор stepan39

Ответов: 0
Просмотров: 849
Последний ответ 22.11.2024, 07:14:15
от stepan39
Не работает капча

Автор Leo1986

Ответов: 4
Просмотров: 1068
Последний ответ 16.09.2024, 09:15:28
от Leo1986