Новости Joomla

Перевод и публикация интервью на греческом портале Joomla Утро, просматриваешь входящие письма и...

Перевод и публикация интервью на греческом портале Joomla 🇬🇷Утро, просматриваешь входящие письма и изучаешь новости и внезапно обнаруживаешь, что инициатива, которую ты начал, подхватывается другими людьми. 🎉Недавно я взял интервью у Билла (Василиса) Коциаса - руководителя студии, читающего лекции в университете и популяризатора Joomla в Греции.Это интервью из журнала NorrNext, в оригинале на английском, теперь доступно на греческом языке и опубликовано на портале joomla.gr. 🎉До чего же приятно… 😇😊 Работа замечена и с ней посчитали необходимым ознакомить аудиторию страны, в которой Билл читает лекции. И это солнечная Греция - страна, страна, с которой Россию многое связывает. 🇬🇷🇷🇺🕊Смотрю на греческий алфавит и тут же рисуются картины белоснежных зданий в окружении винограда и амфор, красивых женщин в сандалиях и мужественных воинов, охраняющих покой полисов, в которых ученые мужи работают над трудами, позже вошедшими в века. Красиво! 😇Но вернемся к интервью. Из него вы узнаете, что в Греции доля Joomla среди CMS занимает порядка 30-40%. По моему мнению это - самый высокий показатель во всем мире. Также чтение лекций о Joomla в университетах позволит привести новых пользователей и к тому же молодое поколение. Ну и огромное кол-во сертификтатов Билла на стене (смотрим фото в статье) свидетельствует о том, что Joomla может применяться как профессиональный инструмент. 🇬🇷 Интервью на греческом портале (joomla.gr)🌐 Оригинальное интервью (на английском)Что насчет перевода на русский? Увы, времени всего 24 часа в сутках. Я продолжаю готовить новые интервью. Возможно, после завершения выпуска журнала, рассмотрю перевод некоторых интервью на русский. Но я об этом не говорил. 😊 В блоге @eugenius_blog публикую анонсы интересных событий из мира 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

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

Wertos

  • Захожу иногда
  • 489
  • 22 / 0
И опять запрос... (~3с)
« : 27.12.2015, 20:20:39 »

Обнаружил вот такой запрос  :o

Стек вызовов
Код
JROOT/libraries/legacy/categories/categories.php:292
JROOT/libraries/legacy/categories/categories.php:184
JROOT/components/com_content/models/categories.php:147
JROOT/libraries/legacy/view/legacy.php:401
JROOT/components/com_content/views/categories/view.html.php:36
JROOT/libraries/legacy/controller/legacy.php:690
JROOT/components/com_content/controller.php:106
JROOT/libraries/legacy/controller/legacy.php:728
JROOT/components/com_content/content.php:38
JROOT/libraries/cms/component/helper.php:392
JROOT/libraries/cms/component/helper.php:372
JROOT/libraries/cms/application/site.php:192
JROOT/libraries/cms/application/site.php:231
JROOT/libraries/cms/application/cms.php:252
JROOT/index.php:46

План SQL-запросов (Explain)
Код: sql
SELECT c.id, c.asset_id, c.access, c.alias, c.checked_out, c.checked_out_time, c.created_time, c.created_user_id, c.description, c.extension, c.hits, c.language, c.level, c.lft, c.metadata, c.metadesc, c.metakey, c.modified_time, c.note, c.params, c.parent_id, c.path, c.published, c.rgt, c.title, c.modified_user_id, c.version, CASE WHEN CHAR_LENGTH(c.alias)!= 0 THEN CONCAT_WS(':', c.id, c.alias) ELSE c.id END as slug,COUNT(i.`id`) AS numitems FROM j_categories as c LEFT JOIN j_categories AS s ON (s.lft <= c.lft AND s.rgt >= c.rgt) OR (s.lft > c.lft AND s.rgt < c.rgt) LEFT JOIN (SELECT cat.id as id FROM j_categories AS cat JOIN j_categories AS parent ON cat.lft BETWEEN parent.lft AND parent.rgt WHERE parent.extension = 'com_content' AND parent.published != 1 GROUP BY cat.id) AS badcats ON badcats.id = c.id LEFT JOIN `j_content` AS i ON i.`catid` = c.id AND i.state = 1 WHERE (c.extension='com_content' OR c.extension='system') AND c.access IN (1,1,2,3,6) AND c.published = 1 AND s.id=18 AND badcats.id is null GROUP BY c.id, c.asset_id, c.access, c.alias, c.checked_out, c.checked_out_time, c.created_time, c.created_user_id, c.description, c.extension, c.hits, c.language, c.level, c.lft, c.metadata, c.metadesc, c.metakey, c.modified_time, c.note, c.params, c.parent_id, c.path, c.published, c.rgt, c.title, c.modified_user_id, c.version ORDER BY c.lft

Ссылка в меню "Список категорий", плагины отключал все, модули тоже, результат уменьшается примерно на 0.3с
Это так и должно быть ?

PS
Сервер 4ядра, 12Гб памяти, SSD 100Гб
*

voland

  • Легенда
  • 11026
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
Re: И опять запрос... (~3с)
« Ответ #1 : 27.12.2015, 21:03:07 »
Надо смотреть..
Сколько категорий итп, настраивать.
Можно очень ускорить
*

Wertos

  • Захожу иногда
  • 489
  • 22 / 0
Re: И опять запрос... (~3с)
« Ответ #2 : 27.12.2015, 21:29:12 »
Надо смотреть..
Сколько категорий итп, настраивать.
Можно очень ускорить

3 корневых
Новости, фото, видео.
В фото и видео примерно по 23 и 53 подкатегории, которые и выводятся по ссылке... т.е. в фото выводиться 23 и в видео 53.
Материалов примерно 30000. Но дело в том, что в фото материалов дай бог 50, а всё равно время одинаковое !
*

voland

  • Легенда
  • 11026
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
Re: И опять запрос... (~3с)
« Ответ #3 : 27.12.2015, 21:44:55 »
Ясно.
Могу оптимизировать, но платно.
Так не посоветовать быстро
*

Wertos

  • Захожу иногда
  • 489
  • 22 / 0
Re: И опять запрос... (~3с)
« Ответ #4 : 27.12.2015, 21:50:05 »
Ясно.
Могу оптимизировать, но платно.
Так не посоветовать быстро
загнать в кеш этот запрос я могу, мне интересно другое... Это такая "стандартная фича !J" ?
*

voland

  • Легенда
  • 11026
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
Re: И опять запрос... (~3с)
« Ответ #5 : 27.12.2015, 21:51:02 »
Я не про кэш, а про оптимизацию запроса.
Стандартно или нет - хз, надо смотреть.
*

voland

  • Легенда
  • 11026
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
Re: И опять запрос... (~3с)
« Ответ #6 : 27.12.2015, 21:51:41 »
Вчера вот ускорил меню в 800 раз, но тут другая ситуация вроде.
*

Wertos

  • Захожу иногда
  • 489
  • 22 / 0
Re: И опять запрос... (~3с)
« Ответ #7 : 27.12.2015, 21:58:19 »
Вчера вот ускорил меню в 800 раз, но тут другая ситуация вроде.

Код: php
		$cache = JFactory::getCache('categories', '');
if (!$results = $cache->get('categories_'.$id))
{
$db->setQuery($query);
$results = $db->loadObjectList('id');
 $cache->store($results, 'categories_'.$id);
}

Вот такая простая манипуляция избавляет от проблемы... Но я про "стандартную фичу !J" хотел бы услышать...
*

voland

  • Легенда
  • 11026
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
Re: И опять запрос... (~3с)
« Ответ #8 : 27.12.2015, 21:59:52 »
Предлагаете поднять тестовый сайт, сделать меню, 30000 материалов итп?
*

Wertos

  • Захожу иногда
  • 489
  • 22 / 0
Re: И опять запрос... (~3с)
« Ответ #9 : 27.12.2015, 22:04:55 »
Предлагаете поднять тестовый сайт, сделать меню, 30000 материалов итп?
Я ничего не предлагаю... Я предполагал что в курсе этого...

И кстати... А причём тут материалы, если это "Список всех категорий" ? Кол\во материалов у меня не подсчитываются при выводе...
*

voland

  • Легенда
  • 11026
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
Re: И опять запрос... (~3с)
« Ответ #10 : 27.12.2015, 22:12:55 »
Ну в запросе же LEFT JOIN j_content
*

voland

  • Легенда
  • 11026
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
Re: И опять запрос... (~3с)
« Ответ #11 : 27.12.2015, 22:32:55 »
Wertos, кинь в личку дамп БД, посмотрю (если там нет кучи левых расширений, изза которых не поднимется)
*

Wertos

  • Захожу иногда
  • 489
  • 22 / 0
Re: И опять запрос... (~3с)
« Ответ #12 : 27.12.2015, 22:37:12 »
Wertos, кинь в личку дамп БД, посмотрю (если там нет кучи левых расширений, изза которых не поднимется)
Весь или конкретные таблички ?
*

voland

  • Легенда
  • 11026
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
Re: И опять запрос... (~3с)
« Ответ #13 : 27.12.2015, 22:39:52 »
Весь или конкретные таблички ?
Мне проще весь - отдельную БД создам\удалю
*

Wertos

  • Захожу иногда
  • 489
  • 22 / 0
Re: И опять запрос... (~3с)
« Ответ #14 : 27.12.2015, 23:14:10 »
voland, а проблема вот в чём... В этой строке...

Код: php
$options['countItems'] = $params->get('show_cat_num_articles_cat', 1) || !$params->get('show_empty_categories_cat', 0);
Она всегда true !
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Привязка материала к метке через запрос к БД

Автор sk8work

Ответов: 4
Просмотров: 1069
Последний ответ 14.10.2022, 13:24:55
от sk8work
Цикличный SQL запрос, высокая нагрузка на mysqld

Автор tweenpix

Ответов: 4
Просмотров: 1045
Последний ответ 19.07.2022, 15:34:47
от tweenpix
Делаю запрос к базе к полю images, выдает пустые значения а они есть там

Автор Dolphin4ik_1

Ответов: 1
Просмотров: 683
Последний ответ 14.07.2022, 12:48:33
от sivers
Запрос персональных данных

Автор web3.0

Ответов: 2
Просмотров: 1079
Последний ответ 02.09.2021, 16:13:24
от web3.0
Запрос в бд

Автор ShopES

Ответов: 6
Просмотров: 1213
Последний ответ 01.09.2021, 08:54:03
от ShopES