Новости Joomla

Обновление пакета плагинов JL Like 5.0

Обновление пакета плагинов  JL Like 5.0

Обновление пакета плагинов JL Like 5.0.0Команда JoomLine рада представить долгожданное обновление плагина социальных кнопок JL Like — версию 5.0.0! В этом релизе мы сделали акцент на совместимости с последними версиями Joomla, улучшении производительности и расширении функционала.👩‍💻 Что нового в JL Like 5.0.0?- Полная совместимость с Joomla 5 — теперь плагин работает на всех актуальных версиях Joomla, включая Joomla 5.- Рефакторинг и оптимизация кода — проведена масштабная чистка и обновление внутренних классов для повышения стабильности и скорости работы.- Удаление устаревших зависимостей — полностью отказались от использования jQuery, что ускорило загрузку страниц и повысило безопасность.- Обновление CSS и удаление неиспользуемых стилей — интерфейс стал еще легче и современнее.- Удалена поддержка устаревших виджетов — например, функциональность твиттер-виджета вынесена из плагина.- Поддержка twitter:card — улучшена интеграция с социальными сетями для красивого отображения ссылок.- Гибкая настройка счетчиков лайков — теперь можно включать и отключать рандомизацию количества лайков.- Улучшено подключение скриптов — переход на WebAssetManager для более корректной работы с ресурсами.- Обновлены языковые переменныеРасширения всё ещё наследуют старую архитектуру плагинов Joomla 3, но были протестированы на Joomla 5.3.Новость на сайте JoomlineСтраница расширенияGitHub расширения@joomlafeed#расширения

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

Cristoff

  • Осваиваюсь на форуме
  • 24
  • 0 / 0
Разрабатываю плагин для articles тип "content".

Есть задача вытянуть актуальные языковые связи article с выбранными статьями/материалами.
Суть следующая
Код
public function onContentAfterSave($context, $article, $isNew)
    {

        if ($context !== 'com_content.article')
            return true;
        if (empty($this->_db)) {
            $this->_db = JFactory::getDBO();
        }
        $associations = JLanguageAssociations::getAssociations('com_content', '#__content', 'com_content.item', $article->id);
}
Проблема в том что $associations имеет неактуальную информацию. Оно вринципе логично, судя по коду JModelAdmin Dispatcher срабатывает до сохранения ассоциаций.

Как можно обойти эту проблему без двойного сохранения?


*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
Re: onContentAfterSave и JLanguageAssociations::getAssociations
« Ответ #1 : 16.09.2016, 09:54:48 »
А вам религия не позволяет два раза сохранять?)
*

Cristoff

  • Осваиваюсь на форуме
  • 24
  • 0 / 0
Re: onContentAfterSave и JLanguageAssociations::getAssociations
« Ответ #2 : 16.09.2016, 11:27:17 »
А вам религия не позволяет два раза сохранять?)
Типа того, но сохраняет пользователь. Заставлять его сохранять два раза - выглядит как костыль.
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
Re: onContentAfterSave и JLanguageAssociations::getAssociations
« Ответ #3 : 16.09.2016, 11:38:45 »
Типа того, но сохраняет пользователь. Заставлять его сохранять два раза - выглядит как костыль.
ну тогда не совсем понятно что где и когда должен делать плагин ваш и на каком этапе должен получать языковые связи и для чего!
*

SmokerMan

  • Гуру
  • 5291
  • 720 / 26
Re: onContentAfterSave и JLanguageAssociations::getAssociations
« Ответ #4 : 16.09.2016, 11:55:08 »
как вариант можно переопределить системным плагином модель и в ней уже делать что душе угодно)
*

Cristoff

  • Осваиваюсь на форуме
  • 24
  • 0 / 0
Re: onContentAfterSave и JLanguageAssociations::getAssociations
« Ответ #5 : 16.09.2016, 11:56:11 »
ну тогда не совсем понятно что где и когда должен делать плагин ваш и на каком этапе должен получать языковые связи и для чего!

1. Есть статьи, которые создает юзер. Указывает раздел, язык и тд
2. Плагин цепляется на событие onContentAfterSave - то есть после сохранения статьи или создание новой.
3. Юзер использует встроенную возможность Joomla мультиязычность и создает еще статьи но с другим языком
4. В статье указывает связанные статьи и вот тут начинается проблема
5. Плагин в событии onContentAfterSave пытается получить эти связанные статьи, но их там нет потому что сохранение самих связей происходит после вызова события.

вот кусок кода /libraries/legacy/model/admin.php
Код
$dispatcher->trigger($this->event_after_save, array($context, $table, $isNew));
}
catch (Exception $e)
{
$this->setError($e->getMessage());

return false;
}

if (isset($table->$key))
{
$this->setState($this->getName(). '.id', $table->$key);
}

$this->setState($this->getName(). '.new', $isNew);

if ($this->associationsContext && JLanguageAssociations::isEnabled() && !empty($data['associations']))
{
$associations = $data['associations'];

// Unset any invalid associations
$associations = Joomla\Utilities\ArrayHelper::toInteger($associations);


тут происходит вызов триггера и только потом обработка связей.

То есть и получается: чтобы мне получить актуальную инфу по связям нужно юзера заставить два раза жмакнуть кнопку сохранить.
Либо сделать это за него, но как понять когда перестать сохранять, чтобы не зациклиться.
 
*

Cristoff

  • Осваиваюсь на форуме
  • 24
  • 0 / 0
Re: onContentAfterSave и JLanguageAssociations::getAssociations
« Ответ #6 : 16.09.2016, 11:56:32 »
как вариант можно переопределить системным плагином модель и в ней уже делать что душе угодно)

Можно поподробней.
*

SmokerMan

  • Гуру
  • 5291
  • 720 / 26
Re: onContentAfterSave и JLanguageAssociations::getAssociations
« Ответ #7 : 16.09.2016, 12:10:20 »
Можно поподробней.
будет подключаться модель из плагина
*

Cristoff

  • Осваиваюсь на форуме
  • 24
  • 0 / 0
Re: onContentAfterSave и JLanguageAssociations::getAssociations
« Ответ #8 : 16.09.2016, 12:22:28 »
будет подключаться модель из плагина
Спасибо. Интересный подход. Это распространенная практика в среде Joomla?
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
Re: onContentAfterSave и JLanguageAssociations::getAssociations
« Ответ #9 : 16.09.2016, 12:25:47 »
Спасибо. Интересный подход. Это распространенная практика в среде Joomla?
Это больше костыль чем практика )
можно попробовать в плагине самому сохранить связи (скопировав код administrator/components/com_content/models/article.php) со строки 545 начинается..
но я не знаю что больше костыль это или то (

Но я так и не понял зачем вам получать эти связи в момент сохранения, чего вы пытаетесь с ними потом сделать?
« Последнее редактирование: 16.09.2016, 12:31:55 от Istaan »
*

SmokerMan

  • Гуру
  • 5291
  • 720 / 26
Re: onContentAfterSave и JLanguageAssociations::getAssociations
« Ответ #10 : 16.09.2016, 12:33:54 »
Это больше костыль чем практика )
ну костыль не костыль не знаю, иногда другого выхода просто нет
бывают ситуации что не только модель ну допустим макеты надо переопределять, допустим в таблицу надо добавить вывод столбца или еще чего-то
по другому это не сделать
*

Cristoff

  • Осваиваюсь на форуме
  • 24
  • 0 / 0
Re: onContentAfterSave и JLanguageAssociations::getAssociations
« Ответ #11 : 16.09.2016, 12:45:29 »
Это больше костыль чем практика )
можно попробовать в плагине самому сохранить связи (скопировав код administrator/components/com_content/models/article.php) со строки 545 начинается..
но я не знаю что больше костыль это или то (

Но я так и не понял зачем вам получать эти связи в момент сохранения, чего вы пытаетесь с ними потом сделать?

вся эта затея для автоматического создания меню по этим статьям. При включенном SEF режиме ссылки на новости выдают 404 если не сделать для него меню.
А меню так же имеет языковые связи.

чтобы сохранить эти связи мне их нужно получить, а в плагин они не попадают(
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться