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

IvanTopor

  • Новичок
  • 7
  • 0 / 0
Пара вопросов, не могу найти адекватных ответов в Google.

1. Как по-умному стоит получать шаблон для использования со sprintf?

  Я получаю по-идиотски:
    $SpoilerTemplate = file_get_contents('./plugins/content/bootstrap_spoilers/template.php');

2. Как умные люди передают переменные в функцию? Мне нужно подтянуть шаблон в переменную и объявить инкрементируемое $id нулем.

  У меня вот такой код, который работает на голом php:

      $text = preg_replace_callback(
         '#\{spoiler=([^\}]+)\}(.+?)\{/spoiler\}#m',
         function ($matches){
            global $id;
            global $SpoilerTemplate;
            ++$id;
            $Spoiler = sprintf($SpoilerTemplate, 'spoiler'.$id, $matches[1], 'spoiler'.$id, $matches[2]);
            return $Spoiler;
         },
         $text);

global $var; работало в голом php, здесь нет. Это моветон, да?

Спасибо за внимание. :)
« Последнее редактирование: 26.02.2016, 13:58:53 от IvanTopor »
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Не уверен, что точно понимаю ваши вопросы, но могу посоветовать использовать буфер и сессию.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

IvanTopor

  • Новичок
  • 7
  • 0 / 0
Я подтягивал global'ом в функцию, которая вызывается callback'ом переменные, необходимые для работы функции (шаблон HTML блока, инкрементирующийся id для создания уникального ID).

В Joomla видимо использование global'а для получения переменной считается моветоном.

Вот я и сижу думаю, как мне не в каждой итерации (preg_replace_callback вызывает функцию каждый раз, когда находит то что я попросил) догружать шаблон из соседнего php файла в переменную для последующей работы с ней с помощью sprintf (заполнения плейсхолдеров заголовком, телом и ID).

Пока не получается передать эти переменные аргументом при запуске функции.

И пока еще не удается понять, почему в Joomla другие функции запускаются подобным образом:

  $this->function(),

Посмотрел буфер и сессию, это скорее не то, чем то. Но тоже интересный материал. Спасибо.
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
И пока еще не удается понять, почему в Joomla другие функции запускаются подобным образом:
  $this->function(),
Так вы не знакомы с ООП?
Не будь паразитом, сделай что-нибудь самостоятельно!
*

IvanTopor

  • Новичок
  • 7
  • 0 / 0
В общем не знаю, корректно или нет, решил использовать вот так:

Будет в каждой итерации (при нахождении каждого спойлера) брать шаблон из файла. crazy!
Ужс. Но как нормально передать переменную в эту функцию колбэка я не выяснил.

   protected function makeSpoiler(&$text, &$params)
   {   
      $text = preg_replace_callback(
         '#\{spoiler=([^\}]+)\}(.+?)\{/spoiler\}#m',
         function ($matches){
            $SpoilerTemplate = file_get_contents('./plugins/content/bootstrap_spoilers/template.php');
            ++$id;
            $Spoiler = sprintf($SpoilerTemplate, 'spoiler'.$id, $matches[1], 'spoiler'.$id, $matches[2]);
            return $Spoiler;
         },
         $text);
      
      return true;
      
   }


Так вы не знакомы с ООП?

Детально нет, очень смутно - да.
« Последнее редактирование: 26.02.2016, 15:37:32 от IvanTopor »
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Спойлер
[свернуть]
Подправил.
« Последнее редактирование: 26.02.2016, 19:24:08 от robert »
Не будь паразитом, сделай что-нибудь самостоятельно!
*

IvanTopor

  • Новичок
  • 7
  • 0 / 0
Т.е. такой подход (использование буфера сессии для использования переменной в другой функции) рекомендован при создании простых плагинов обрабокти контента для Joomla?

Эхх. Еще немного непонятных действий с абстрактными объектами.

Буду изучать наверное, спасибо.
*

b2z

  • Глобальный модератор
  • 7284
  • 778 / 0
  • Разраблю понемногу
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Вывод отладочной информации системного плагина

Автор effrit

Ответов: 23
Просмотров: 1339
Последний ответ 02.10.2018, 10:24:46
от effrit
Объясните как работает MVC Override с помощью плагина Joomla!

Автор kens1n

Ответов: 8
Просмотров: 1860
Последний ответ 09.10.2016, 11:00:25
от robert
Нужна помощь в написании плагина

Автор makslm

Ответов: 16
Просмотров: 1265
Последний ответ 06.10.2016, 15:48:06
от makslm
[Решено] Создание контент плагина

Автор IvanTopor

Ответов: 4
Просмотров: 1599
Последний ответ 26.02.2016, 13:10:37
от IvanTopor
Настройка удобного окружения для разработки расширений Joomla

Автор zaboich

Ответов: 7
Просмотров: 2334
Последний ответ 14.08.2015, 16:45:14
от zomby6888