Новости Joomla

Совет по Joomla: $db->getQuery(true) стал устаревшим

Совет по Joomla: $db->getQuery(true) стал устаревшим

👩‍💻 Совет по Joomla: $db->getQuery(true) стал устаревшим.Раньше при создании запросов в базу данных мы всегда получали объект запроса с помощью метода

getQuery(). Если передавался параметр
$new =
true, то получали новый запрос. Если без - последний.

use Joomla\CMS\Factory;$db = Factory::getContainer()->get('DatabaseDriver');$query = $db->getQuery(new: true);// и строим запрос
Под капот Joomla 4 вошёл Joomla Framework (PHP фреймворк а-ля Laravel, Yii и т.д.), а для Joomla 5 он обновился - версия 3.4.1 вышла 6 октября 2023г. В методе фреймворка есть примечание о том, что параметр
$new, который передавался в метод
getQuery() помечен как устаревший и будет удалён в версии фреймворка 4.0.
The parameter $new is deprecated and will be removed in 4.0, use %s::createQuery() instead.В Joomla 4 версия Joomla Framework была 2.x., в Joomla 5 - 3.x. Поэтому есть предположение, что с выходом Joomla 6 обновится и версия фреймворка - станет 4.0. Поэтому для получения объекта для новых запросов следует использовать метод
createQuery(). Он уже представлен в ядре и широко используется. При этом метод
getQuery() останется, но, скорее всего, будет выполнять функцию только геттера - получения текущего запроса.
@joomlafeed#joomla #php #разработка

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

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
Всем доброго дня. Наткнулся на грабли...

Реализовываю (все еще) фильтрацию товара по свойствам. Для этого есть вид компонента, который читает входящие параметры jinput или принимает из меню id-набора предварительных настроек и после обработки выводит листинг товара.

Загвоздка встала в pagination. На любой странице отличной от 1 набор настроек фильтра не учитывается. Т.е. данные из формы модуля не попадают в обработку. Почему так мне понятно.

Вопрос такой как правильно это решить?

Варианты:
  • Обработку всех входящих параметров прогонять не через State, а через userState по приходу jinput limit и limitstart не производить обработку, а брать ее из userState
  • Как-то закинуть данные формы при нажатии на кнопку страницы

Первый вариант мне видится более удобным. Скажите ваше мнение.

А еще посоветуйте что-то почитать про обычный State, с ним у меня бывают непонятки. Например, почему в populateState конструкция $this->getState('aaa'); не работает?
*

mardok

  • Новичок
  • 5
  • 0 / 0
Добрый день.
Столкнулся с такой же проблемой. Как правильно настроить фильтр по заданному набору параметров? Возможно ли настроить для всех страниц одинаково или нужно делать для каждой страницы отдельно? Если возможно, подскажите как это прописать?
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
Добрый день.
Столкнулся с такой же проблемой. Как правильно настроить фильтр по заданному набору параметров? Возможно ли настроить для всех страниц одинаково или нужно делать для каждой страницы отдельно? Если возможно, подскажите как это прописать?
Не могу сказать, что именно у вас... Я пишу свой фильтр. И сейчас решение с UserState мне помогло.
А именно, я проверяю пришли ли параметры limitstart и если пришли, то все читаю параметры из сессии, которые были установлены ранее (на предыдущей странице). Осталось решить вопрос захода сразу на не первую страницу. Если что-то конкретное спросите, скажу как это у меня.
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
почему в populateState конструкция $this->getState('aaa'); не работает?
Потому что неправильно делать разную фигню в populateState, я вам об этом уже говорил. Вы еще рискуете попасть в бесконечный цикл, если populateState еще не был вызван. Задача populateState - заполнять параметры значениями. В нем можно делать getUserState или getUserStateFromRequest (кстати, очень полезная вещь), но никак не getState.
Возможно ли настроить для всех страниц одинаково или нужно делать для каждой страницы отдельно?
Это уж как вы сами решите. UserState - на уровне сессии, оно доступно везде. State - на уровне модели, в нем вы храните всю фигню только для данной модели, в т.ч. limit и start.

P.S. Используйте еще getStoreId в паре с setState/populateState.
« Последнее редактирование: 28.01.2020, 17:38:30 от robert »
Не будь паразитом, сделай что-нибудь самостоятельно!
*

mardok

  • Новичок
  • 5
  • 0 / 0
Спасибо. С UserState все получилось. Действительно, если его использовать, то фильтр работает. Буду разбираться дальше.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Счётчик полей в админке модуля

Автор zeus07

Ответов: 9
Просмотров: 854
Последний ответ 28.06.2021, 13:40:31
от zeus07
Создание компонента для табеля рабочего времени

Автор sashahz

Ответов: 7
Просмотров: 701
Последний ответ 12.04.2021, 11:12:11
от sashahz
Вызов формы компонента в pop-up, при клике по ссылке из любого места

Автор SkyAn

Ответов: 1
Просмотров: 601
Последний ответ 01.03.2021, 04:08:48
от gartes
Документация по разработки компонента для Joomla 3.x

Автор Aspik

Ответов: 9
Просмотров: 3186
Последний ответ 23.01.2021, 07:55:56
от hmr
Сборка инсталятора компонента файлами из разных папок с привлечением github

Автор borro

Ответов: 1
Просмотров: 614
Последний ответ 25.12.2020, 21:21:30
от platonische