Новости Joomla

Метод registerListeners() в CMSPlugin в плагинах планируется удалить в Joomla 7.0

Метод registerListeners() в CMSPlugin в плагинах  планируется удалить в Joomla 7.0

👩‍💻 Метод registerListeners() в CMSPlugin в плагинах планируется удалить в Joomla 7.0.Этот метод регистрирует устаревшие слушатели событий в диспетчере, имитируя работу плагинов Joomla! 3.x и ниже для Joomla 4+. По умолчанию этот метод ищет все общедоступные методы, название которых начинается с on. Он регистрирует лямбда-функции (замыкания), которые пытаются преобразовать аргументы отправленного события в аргументы вызова метода и вызвать ваш метод on<Что-то>. Результат передаётся обратно событию в его аргумент result.Теперь этот слой совместимости с устаревшей Joomla 3 помечен к удалению в Joomla 7.0, которая должна выйти осенью 2027 года. Это означает, что те уникальные расширения от Joomla 2.5 / Joomla 3, которые ещё работали на Joomla 4-6 скорее всего окончательно перестанут работать на Joomla 7. Предполагается, что активные разработчики планомерно и постепенно избавляются от технического долга и обновляют свои расширения. @joomlafeed#joomla #разработка #php

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

vova.olar

  • Осваиваюсь на форуме
  • 22
  • 1 / 0
Изменения в работе JTable
« : 27.01.2011, 13:57:43 »
Допустим имеем следующий код:

Код
$tbl = JTable::getInstance('TblName', 'prefix');
$tbl->load(0);
// либо $tbl->load();
// либо $tbl->load('');

в Joomla! 1.5 возвращал FALSE, что в принципе логично т.к. записи с таким первичным ключом в базе нет.
в Joomla! 1.6 возвращает TRUE (но FALSE при указании несуществующего первичного ключа)
тоесть в 1.6 TRUE возвращается для пустого ключа

Кто-то может обьяснить для какой светлой цели было сделано подобное поведение?
Тем кто проверял таким образом существование записи в БД придется переписывать рабочий в 1.5 код...
*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Re: Изменения в работе JTable
« Ответ #1 : 27.01.2011, 14:26:00 »
Ну если посмотреть код, то в Joomla 1.6 он несколько отличается:

Код: php
		// Check for a database error.
if ($this->_db->getErrorNum()) {
$e = new JException($this->_db->getErrorMsg());
$this->setError($e);
return false;
}

// Check that we have a result.
if (empty($row)) {
$e = new JException(JText::_('JLIB_DATABASE_ERROR_EMPTY_ROW_RETURNED'));
$this->setError($e);
return false;
}

// Bind the object with the row and return.
return $this->bind($row);

и в Joomla 1.5:
Код: php
		if ($result = $db->loadAssoc( )) {
return $this->bind($result);
}
else
{
$this->setError( $db->getErrorMsg() );
return false;
}

По логике Joomla 1.6 ошибка будет в 3-х случаях:
1. произошла ошибка в SQL
2. вернулся пустой результат
3. в процессе маппинга результата на объект произошла ошибка

Отсутствие записи по указанному ключу должно попадать под 2-й пункт. Другое дело, если посмотреть описание параметра, мы заметим:

Цитировать
An optional primary key value to load the row by, or an array of fields to match.  If not set the instance property value is used.

Вот последнее предложение может быть вполне критичным - мы же имеем дело с singleton'ом, т.е. получается может быть использовано значение от предыдущего вызова.
*

vova.olar

  • Осваиваюсь на форуме
  • 22
  • 1 / 0
Re: Изменения в работе JTable
« Ответ #2 : 27.01.2011, 16:46:34 »
Код
if (empty($keys)) {
// If empty, use the value of the current key
$keyName = $this->_tbl_key;
$keyValue = $this->$keyName;

// If empty primary key there's is no need to load anything
if (empty($keyValue)) {
return true;
}

        ...
}

>> If empty primary key there's is no need to load anything
Вот не пойму почему? И почему возвращается TRUE? Ведь сейчас запрос не делался и предыдущего вызова не было (судя по пустому $keyValue)...
« Последнее редактирование: 27.01.2011, 16:51:29 от vova.olar »
*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Re: Изменения в работе JTable
« Ответ #3 : 27.01.2011, 16:54:33 »
Хм, похоже на баг. Запости это в баг-треккер, я думаю они быстро отреагируют. Можешь потом скинуть сюда номер ошибки, я по своим каналам попробую ее продвинуть к рассмотрению.
*

vova.olar

  • Осваиваюсь на форуме
  • 22
  • 1 / 0
*

b2z

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

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Re: Изменения в работе JTable
« Ответ #6 : 28.01.2011, 11:36:43 »
Поздравлять можно будет, когда станет ready to commit. А пока, что даже патча нет. И, насколько я понимаю, они сами еще не знают, что с этим делать.
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Re: Изменения в работе JTable
« Ответ #7 : 28.01.2011, 11:51:37 »
Поздравлять можно будет, когда станет ready to commit. А пока, что даже патча нет.
Дык я просто поздравил vova.olar с пойманным багом ;)
Цитировать
И, насколько я понимаю, они сами еще не знают, что с этим делать.
Да они вообще потеряны... Где блин 1.6.1? Уже столько накопилось, а патча все нет и нет...
*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Re: Изменения в работе JTable
« Ответ #8 : 28.01.2011, 12:39:44 »
Ну там просто есть целая пачка исправлений, которые пока еще не оттестировали. Почти каждый день на канале группы локализации просят проверить тот или иной патч.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

JTable - что это?

Автор ZloiOrk

Ответов: 46
Просмотров: 8548
Последний ответ 13.05.2020, 16:48:26
от vitalicc