Новости 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 Ответов
  • 910 Просмотров
*

Damarkuzz

  • Захожу иногда
  • 116
  • 1 / 0
Добрый день!

Тренируюсь делать модули и возникла следующая задача.
Требуется "просканировать" текст материала (вызывается $this->item->text;), выбрать из него заголовки и отобразить их в виде оглавления списком (<ul><li>  </li></ul>).

Вопрос: как подключить и какими командами подключить к модулю необходимые системные файлы, чтобы на
$this->item->text; не возникало ошибки "Using $this when not in object context"?
*

sivers

  • Живу я здесь
  • 2587
  • 359 / 0
Вопрос: как подключить и какими командами подключить к модулю необходимые системные файлы, чтобы на
$this->item->text; не возникало ошибки "Using $this when not in object context"?
В модуле используйте $module->content вместо $this->item->text.
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

b2z

  • Глобальный модератор
  • 7288
  • 778 / 0
  • Разраблю понемногу
В модуле используйте $module->content вместо $this->item->text.
Это содержимое модуля, а не материала.

В нашем Телеграм чате я уже писал ответ, продублирую тут:
Код: php
$app    = JFactory::getApplication();
$option = $app->input->getWord('option');
$view   = $app->input->getWord('view');
$id     = $app->input->getInt('id', 0);

if ($option == 'com_content' && $view == 'article' && $id > 0)
{
    $article = JTable::getInstance('Content');
    $article->load($id);

    if (!empty($article))
    {
        // У нас есть доступ к таблице материала.  Можем получить текст материала
        $text = trim($article->fulltext) != '' ? $article->introtext . $article->fulltext : $article->introtext;
    }
}
*

Damarkuzz

  • Захожу иногда
  • 116
  • 1 / 0
$app    = JFactory::getApplication(); $option = $app->input->getWord('option'); $view   = $app->input->getWord('view'); $id     = $app->input->getInt('id', 0); if ($option == 'com_content' && $view == 'article' && $id > 0) {     $article = JTable::getInstance('Content');     $article->load($id);     if (!empty($article))     {         // У нас есть доступ к таблице материала.  Можем получить текст материала         $text = trim($item->fulltext)!= '' ? $item->introtext . $item->fulltext : $item->introtext;     } }

Спасибо за ответ! Подскажите, пожалуйста, когда указываю <?php echo $text; ?> на странице сайте не выводится текст данного материала. Может ли быть проблема в том, что текст материала уже присутствует в самом материале стандартным путем?
При команде echo $id и echo $view все отображается верно.
*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
при подобных непонятках делайте дамп самого объекта
Код
var_dump($item);
то, что текст выведен никак не влияет, потому что код запрашивает этот же текст по-новой из базы данных...
вообще, это не самый оптимальный вариант - 2 раза тянуть одно и то же из базы. я такое через js делал, но для обучения без разницы, конечно )
*

Damarkuzz

  • Захожу иногда
  • 116
  • 1 / 0
при подобных непонятках делайте дамп самого объекта
Код
var_dump($item);
то, что текст выведен никак не влияет, потому что код запрашивает этот же текст по-новой из базы данных...
вообще, это не самый оптимальный вариант - 2 раза тянуть одно и то же из базы. я такое через js делал, но для обучения без разницы, конечно )

Сделал, как Вы сказали, сервер вернул NULL
*

b2z

  • Глобальный модератор
  • 7288
  • 778 / 0
  • Разраблю понемногу
*

Damarkuzz

  • Захожу иногда
  • 116
  • 1 / 0
Благодарю сообщество и ответивших людей!
Все работает. Как допилю модуль - размещу ссылку (не варез, самописный с нуля).
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Убрать блок в мобильной версии сайта

Автор Grigorii

Ответов: 10
Просмотров: 1565
Последний ответ 10.02.2024, 19:38:34
от darkghost
Убрать из модуля новостей ссылку на статью, на которой выводится модуль

Автор zeus07

Ответов: 3
Просмотров: 1277
Последний ответ 08.11.2023, 21:17:26
от GrayAn
Получить ошибку

Автор KevinSimon

Ответов: 0
Просмотров: 561
Последний ответ 22.09.2023, 15:20:21
от KevinSimon
widgetkit slideset - js, как убрать стиль?

Автор all_zer

Ответов: 0
Просмотров: 590
Последний ответ 22.09.2023, 12:02:27
от all_zer
После переноса сайта выдает ошибку

Автор rezchik

Ответов: 5
Просмотров: 950
Последний ответ 14.04.2023, 21:53:12
от rezchik