Новости 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 Гость просматривают эту тему.
  • 15 Ответов
  • 5265 Просмотров
*

makarseo

  • Новичок
  • 8
  • 0 / 0
Не пинайте, реально Google уже 3й день. На форуме тоже искал.

Проблема следующая:
На сайте включен стандартный SEF, без всяких там sef404.

Мне необходимы ссылки со слэшем в конце. Вида: http://domen.com.ua/zhalyuzi/vertikalnye-tkanevye/
И настроен редирект в штасс.
Но вот в самом меню они отображаются без / в виде: http://domen.com.ua/zhalyuzi/vertikalnye-tkanevye

Как добавить в меню эти слэши?

1. Штасс - не вариант он делает только редирект. Это уже настроено.
2. Добавлять слеш руками, меню их убирает.
3. Использовать sef404 не хочу, он мне побьет ссылки все. Над проектом ведется оптимизация и продвижение, черевато паданием трафика.

Может можно как то в код засунуть, что все урлы в меню должны заканчиваться на /?
*

kik84

  • Завсегдатай
  • 1350
  • 64 / 4
Re: Добавление /(слэш) в url в меню
« Ответ #1 : 13.03.2015, 09:37:55 »
А для слеш-то в конце нужен?
*

Ragivort

  • Завсегдатай
  • 1154
  • 58 / 2
  • Такая Life
Re: Добавление /(слэш) в url в меню
« Ответ #2 : 13.03.2015, 09:45:17 »
Ну да, вопрос такой же, для чего в конце слеш?
Дозволь мне свершить то добро, которое я способен свершить, теперь, ибо я могу более не вернуться сюда.
*

makarseo

  • Новичок
  • 8
  • 0 / 0
Re: Добавление /(слэш) в url в меню
« Ответ #3 : 13.03.2015, 11:22:04 »
А для слеш-то в конце нужен?
Ну да, вопрос такой же, для чего в конце слеш?

Для SEO оптимизации.
Сейчас вопрос стоит как его сделать в конце URL, в самом меню отображение.
*

Ragivort

  • Завсегдатай
  • 1154
  • 58 / 2
  • Такая Life
Re: Добавление /(слэш) в url в меню
« Ответ #4 : 13.03.2015, 11:25:20 »
Для SEO оптимизации слеш в конце как раз плохо
Дозволь мне свершить то добро, которое я способен свершить, теперь, ибо я могу более не вернуться сюда.
*

SeBun

  • BanMaster
  • 4030
  • 259 / 5
  • @SeBun48
Re: Добавление /(слэш) в url в меню
« Ответ #5 : 13.03.2015, 12:08:23 »
А для слеш-то в конце нужен?
Если идёт обработка REQUEST_URI через PHP, то там может иметь огромное значение наличие или отсутствия слэша в конце URL. И очень важно привести весь сайт к единому стандарту, чтобы было либо со слэшем на конце, либо без. Для поисковиков со слешем и без - это разные адреса, если от наличия слэша контент не меняется, то поисковик склеит это дело и не важно даже как ссылки ставить при продвижении. И это не есть хорошо. Те сайты, которые уличены в такой, казалось бы мелочи, начинают падать в самый низ поисковых рейтингов. Для вас важно добиться того, что бы все страницы сайта имели только один адрес.
 
Оказываю услуги по Joomla | Миграция/Обновление | Сопровождение | IT-аутсорсинг | Недорогие домены и хостинг
*

makarseo

  • Новичок
  • 8
  • 0 / 0
Re: Добавление /(слэш) в url в меню
« Ответ #6 : 13.03.2015, 12:52:33 »
Если идёт обработка REQUEST_URI через PHP, то там может иметь огромное значение наличие или отсутствия слэша в конце URL. И очень важно привести весь сайт к единому стандарту, чтобы было либо со слэшем на конце, либо без. Для поисковиков со слешем и без - это разные адреса, если от наличия слэша контент не меняется, то поисковик склеит это дело и не важно даже как ссылки ставить при продвижении. И это не есть хорошо. Те сайты, которые уличены в такой, казалось бы мелочи, начинают падать в самый низ поисковых рейтингов. Для вас важно добиться того, что бы все страницы сайта имели только один адрес.
 

Спасибо.

Но может кто то напишет уже конкретное решение?
Сейчас все страницы без слеша в конца, их склейка идет 301 через штасс.
*

ELLE

  • Глобальный модератор
  • 4505
  • 893 / 0
Re: Добавление /(слэш) в url в меню
« Ответ #7 : 13.03.2015, 14:55:58 »
ковыряйте шаблон меню mod_menu
templates/yourtemplate/html/mod_menu/*
*

kik84

  • Завсегдатай
  • 1350
  • 64 / 4
Re: Добавление /(слэш) в url в меню
« Ответ #8 : 13.03.2015, 16:14:33 »
Если идёт обработка REQUEST_URI через PHP, то там может иметь огромное значение наличие или отсутствия слэша в конце URL. И очень важно привести весь сайт к единому стандарту, чтобы было либо со слэшем на конце, либо без. Для поисковиков со слешем и без - это разные адреса, если от наличия слэша контент не меняется, то поисковик склеит это дело и не важно даже как ссылки ставить при продвижении. И это не есть хорошо. Те сайты, которые уличены в такой, казалось бы мелочи, начинают падать в самый низ поисковых рейтингов. Для вас важно добиться того, что бы все страницы сайта имели только один адрес.
 

У меня нигде нет слеша в конце URL у внутренних. Он убран так:
$uri = preg_replace("/\?.*/i",'', $_SERVER['REQUEST_URI']);
 
if ((!strpos($uri, 'administrator'))  && (strlen($uri)>1)) {
  if (rtrim($uri,'/')!=$uri) {
    header("HTTP/1.1 301 Moved Permanently");
    header('Location: http://'.$_SERVER['SERVER_NAME'].str_replace($uri, rtrim($uri,'/'), $_SERVER['REQUEST_URI']));
    exit();   
  }
}

Через htaccess не работает стандартный способ т.к. тогда циклическая в админке.

Для ТС, вот попробуй тоже через index.php http://avolberg.ru/www/seo/dubli-stranic-slash-url
*

SeBun

  • BanMaster
  • 4030
  • 259 / 5
  • @SeBun48
Re: Добавление /(слэш) в url в меню
« Ответ #9 : 13.03.2015, 16:57:44 »
Для ТС, вот попробуй тоже через index.php
До первого обновления, ибо все правки ядра после обновления слетят.
Оказываю услуги по Joomla | Миграция/Обновление | Сопровождение | IT-аутсорсинг | Недорогие домены и хостинг
*

kik84

  • Завсегдатай
  • 1350
  • 64 / 4
Re: Добавление /(слэш) в url в меню
« Ответ #10 : 13.03.2015, 17:37:28 »
До первого обновления, ибо все правки ядра после обновления слетят.
) ну тогда
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ /$1 [R=301,L]
*

makarseo

  • Новичок
  • 8
  • 0 / 0
Re: Добавление /(слэш) в url в меню
« Ответ #11 : 13.03.2015, 18:14:58 »
Нет не одного дельного поста.

Прочитайте пожалуйста пост. Мне не нужно редиректы и тому прочее.
Необходимо только отображать слеш в ссылке в меню и не более того!
*

makarseo

  • Новичок
  • 8
  • 0 / 0
Re: Добавление /(слэш) в url в меню
« Ответ #12 : 13.03.2015, 18:26:13 »
ковыряйте шаблон меню mod_menu
templates/yourtemplate/html/mod_menu/*

Спасибо. Поковырялся, настроил именно в этих файлах.
*

makarseo

  • Новичок
  • 8
  • 0 / 0
Re: Добавление /(слэш) в url в меню
« Ответ #13 : 15.03.2015, 14:56:53 »
Не все получилось как хотелось.

Вот код из файла отвечающее за меню:
Код
<?php
/**
 * @package Joomla.Site
 * @subpackage mod_menu
 * @copyright Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved.
 * @license GNU General Public License version 2 or later; see LICENSE.txt
 */

// No direct access.
defined('_JEXEC') or die;

$subtitle = '';
if($item->note != '') {
 $subtitle = '<span class="subtitle">'.$item->note.'</span>';
}

// Note. It is important to remove spaces between elements.
$class = $item->anchor_css ? 'class="'.$item->anchor_css.'" ' : '';
$title = $item->anchor_title ? 'title="'.$item->anchor_title.'" ' : '';
if ($item->menu_image) {
$item->params->get('menu_text', 1 )?
$linktype = '<img src="'.$item->menu_image.'" alt="'.$item->title.'" /><span class="image-title">'.$item->title.'</span> ' :
$linktype = '<img src="'.$item->menu_image.'" alt="'.$item->title.'" />';
}
else { $linktype = $item->title;
}

if($item->level == 1) { $class .= ' class="main" '; }

switch ($item->browserNav) :
default:
case 0:
?><a <?php echo $class; ?>href="<?php echo $item->flink; ?>/" <?php echo $title; ?>><?php echo $linktype; ?><?php echo $subtitle; ?></a><?php
break;
case 1:
// _blank
?><a <?php echo $class; ?>href="<?php echo $item->flink; ?>/" target="_blank" <?php echo $title; ?>><?php echo $linktype; ?><?php echo $subtitle; ?></a><?php
break;
case 2:
// window.open
?><a <?php echo $class; ?>href="<?php echo $item->flink; ?>/" onclick="window.open(this.href,'targetWindow','toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes');return false;" <?php echo $title; ?>><?php echo $linktype; ?><?php echo $subtitle; ?></a>
<?php
break;
endswitch;
?>

Конкретно нужная строчка:
Код
<a <?php echo $class; ?>href="<?php echo $item->flink; ?>/" <?php echo $title; ?>><?php echo $linktype; ?><?php echo $subtitle; ?></a><?php
break;
case 1:
// _blank
?>

При добавлении слеша, все стает на свои место. Но перестает правильно выводить ссылку на главную страницу.
Как добавить ей исключение или сделать для всех других пунктов меню?
*

SeBun

  • BanMaster
  • 4030
  • 259 / 5
  • @SeBun48
Re: Добавление /(слэш) в url в меню
« Ответ #14 : 16.03.2015, 10:21:52 »
Возможно, поставить проверку $item->flink. Например, если после последнего слеша в строке есть точка, закрывающий слеш не ставится (это ссылка на конкретный файл). Если в слове нет точки, добавляем к $item->flink закрывающий слеш. Примерно так.
« Последнее редактирование: 16.03.2015, 10:26:04 от sebun »
Оказываю услуги по Joomla | Миграция/Обновление | Сопровождение | IT-аутсорсинг | Недорогие домены и хостинг
*

ELLE

  • Глобальный модератор
  • 4505
  • 893 / 0
Re: Добавление /(слэш) в url в меню
« Ответ #15 : 16.03.2015, 11:27:12 »
makarseo, главный пункт меню создайте в скрытом меню, в своем меню используйте псевдоним пункта меню или тип ссылка
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Joomla! 3.9.21 Невозможно создать пункт меню

Автор edvalitto

Ответов: 1
Просмотров: 1236
Последний ответ 26.03.2025, 19:26:30
от azm1n
Разные меню для мобильной и для ПК версии сайта

Автор jimka

Ответов: 7
Просмотров: 1462
Последний ответ 24.03.2025, 20:03:01
от R31rus
Проблема с меню

Автор denis_4

Ответов: 6
Просмотров: 1632
Последний ответ 07.08.2024, 14:00:43
от denis_4
Непонятная проблема с меню

Автор THE KILLERS

Ответов: 2
Просмотров: 7161
Последний ответ 25.07.2024, 16:07:39
от THE KILLERS
Один пункт меню думает что он главный

Автор DamaVbubi

Ответов: 4
Просмотров: 1160
Последний ответ 13.02.2024, 19:49:10
от DamaVbubi