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

platonische

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

реализую AJAX запрос из модуля в модуль. Создал метод getCountAjax() в хелпере модуля

Код
public static function getCountAjax(){
        try
        {
            $input = JFactory::getApplication()->input;
            $p = $input->get('p');
            $array['msg'] = $p;
            $answer = new JResponseJson($array);
            echo $answer;
        }
        catch(Exception $e)
        {
            echo new JResponseJson($e);
        }
}

Даю в браузере
  • option=com_ajax&module=hzfilter&method=getCount&p=qqq&format=raw
    получаю ответ: {"success":true,"message":null,"messages":null,"data":{"msg":"qqq"}}
  • option=com_ajax&module=hzfilter&method=getCount&p=qqq&format=json
    Получаю две строки: {"success":true,"message":null,"messages":null,"data":{"msg":"qqq"}}{"success":true,"message":null,"messages":null,"data":null}

Разве это правильно? Видимо com_ajax еще сам чего-то генерит... Может надо куда-то передать в com_ajax данные?
*

sivers

  • Живу я здесь
  • 2587
  • 359 / 0
Попробуйте в конце вашей функции добавить return $array;
Либо echo $answer; замените на exit($answer);
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

Septdir

  • Живу я здесь
  • 3370
  • 168 / 4
@platonische
Если в try то так
Код
try
{
// Выполняем код

// если ошибка делаем выброс в catch

throw new Exception($e->getMessage(), 404);
}
catch(Exception $e)
{
throw new Exception($e->getMessage(), 404);
}

// возвращаем резульдат который пойдет в data
return object/array/string

Но вприципе в com_ajax не нужен try просто делаете выброс (throw) и он его поймает

Фактически com_ajax сделан так. ловим ошибки и выводим return в нужном формате.
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
CodersRank | Контакты | Мой GitHub | Workshop
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
exit($answer);
Вот это заработало. Вопрос конечно почему без этого не работает? Читал статьи cmscafe об AJAX и JResponseJson - все вроде оно же.

Вопрос впрочем закрыт, просто хотелось показать поведение такого решения.
Но вприципе в com_ajax не нужен try просто делаете выброс (throw) и он его поймает
Фактически com_ajax сделан так. ловим ошибки и выводим return в нужном формате.
Спасибо!
*

sivers

  • Живу я здесь
  • 2587
  • 359 / 0
Вот это заработало. Вопрос конечно почему без этого не работает? Читал статьи cmscafe об AJAX и JResponseJson - все вроде оно же.

Проверьте вариант с return. Возможно, в случае format=json в качестве результата для json используется используется результат работы функции. Вы же ничего не возвращаете, поэтому он пустой. А задваивалось, потому что сперва отрабатывало echo. Сейчас exit выбрасывает вручную сформированный жсон и прерывает дальнейшее выполнение. Поэтому задвоения никакого не происходит.
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
Проверьте вариант с return. Возможно, в случае format=json в качестве результата для json используется используется результат работы функции. Вы же ничего не возвращаете, поэтому он пустой. А задваивалось, потому что сперва отрабатывало echo. Сейчас exit выбрасывает вручную сформированный жсон и прерывает дальнейшее выполнение. Поэтому задвоения никакого не происходит.
Да return делает нечто лучшее, но не рабочее на 100%. Приведу вывод (он немного уже изменен, но думаю будет понятен)
Код
{"success":true,"message":null,"messages":null,"data":{"success":true,"message":null,"messages":null,"data":2947}}
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
ТС, смотрите код com_ajax - вы же свой компонент пишете, значит, умеете код читать.
Вы вызываете JResponseJson дважды, а в начале - еще и echo, тоже 2 раза.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

sivers

  • Живу я здесь
  • 2587
  • 359 / 0
А вы делаете return $array; или return $answer; ? )
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
А вы делаете return $array; или return $answer; ? )
Да оно!
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

com_ajax использование модуля

Автор Wertos

Ответов: 32
Просмотров: 5319
Последний ответ 24.11.2019, 18:33:57
от CB9T
Странное поведение после подключения JHTML::_('behavior.modal')

Автор borro

Ответов: 7
Просмотров: 1119
Последний ответ 05.10.2017, 15:07:14
от dmitry_stas
com_ajax передача данных из формы POST

Автор ChervonStudio

Ответов: 27
Просмотров: 4024
Последний ответ 12.06.2017, 18:09:24
от ProtectYourSite
Режутся некоторые символы при передаче через com_ajax в er. Как передать в него JSON или email?

Автор smokepeng

Ответов: 8
Просмотров: 1658
Последний ответ 01.02.2015, 23:08:16
от Fedor Vlasenko