Потенциальные проблемы обратной совместимости в Joomla 3.0 и платформы Joomla 12.1
Эта статья отслеживает потенциальные проблемы обратной совместимости для Joomla 3.0 и платформы Joomla 12.1, которая включена в Joomla 3.0. Здесь перечислены вопросы, которые потенциально нарушают расширения.
Пожалуйста, помогите сделать этот документ полный.
Сравнение проводится с Joomla 2.5/Платформа 11.4.
Проблемы с обратной совместимостью для Joomla 2.5 смотрите в статье: Потенциальные проблемы обратной совместимости в Joomla 2.5 и платформы Joomla 11.4.
Платформа
В платформе удалено большое количество устаревших классов и методов. Для большинства расширений написанных для Joomla 2.5, необходимые изменения должны быть достаточно небольшими. Обратите внимание, что ещё существуют устаревшие классы в этой платформе, которые будут исключены в будущих версиях – разработчики должны прекратить их использование там, где это возможно.
Обновлённые системные требования
Системные требования изменились в следующих пунктах:
- PHP 5.3.1
- register_globals должен быть выключен
- magic_quotes_gpc должен быть выключен
Общие изменения
- Почти все функции, методы, члены и классы, помеченные как устаревшие в платформе 11.4, были удалены. Они не перечислены в этом документе.
- Добавление ?no_html для URL, чтобы получить RAW представление, больше не поддерживается (это была старая функция Joomla 1.0).
- Константа DS была удалена. Если вы действительно нуждаетесь в ней, вы можете использовать вместо – DIRECTORY_SEPARATOR.
- Имена модулей теперь должны начинаться с "mod_".
- Теперь расширения необходимо установить registeredurlparams, возврат обратно на URL-адрес был удален.
- Некоторые cookies доступны только через HTTP (не через JavaScript). Например; файл cookie сессии.
- Ввиду предстоящих изменений в реализации в платформе MVC – JModel, JView и JController используются повторно как имена новых интерфейсов. На данный момент, в место них используйте: JModelLegacy, JViewLegacy и JControllerLegacy.
- JFolder и JFile теперь требуют вас сделать своё собственное заявление jimport (вы всегда должны были это делать, просто раньше было довольно вероятно, что что-то другое было загружено до них).
- Joomla 3.0 обычно выдаёт исключения вместо возвращения JError или JException. Для получения дополнительной информации смотрите: Потенциальные проблемы обратной совместимости в Joomla 1.7 и платформы 11.1.
Изменения в инсталляторе расширений
- Использование <install> базовый тег (от 1.5) больше не поддерживается; вместо него следует использовать <extension>.
- Поддержка install_script и uninstall_script и методы com_install и com_uninstall в этих скриптах, были удалены; вместо них используйте scriptfile.
- В расширений языка, поддержка client="both" была удалена; вместо этого готовьте каждого клиента как отдельное расширение и при необходимости связывайте их как пакет расширения.
- Пути файлов для плагинов больше не поддерживают старый метод 1.5 (то есть: plugins/system/cache.php); каждый плагин теперь должны быть в своей собственной папке (то есть: plugins/system/cache/cache.php).
Изменения в компонентах
- В административной части компонента admin.*.php и toolbar.*.php больше не включаются автоматически (эта функция была унаследована от Joomla 1.0).
Перемещенные файлы
Все классы, перечисленные здесь должны теперь быть автоматически загружаемые. Explicit requires и includes have должны быть изменены или удалены.
События плагина
- Событие onContentBeforeSave теперь получает $article по значению не по ссылке.
Пример определения: public function onContentBeforeSave($context, $article, $isNew). - Событие onContentAfterSave теперь получает $article по значению не по ссылке.
Пример определения: public function onContentAfterSave($context, $article, $isNew).
Переименованные классы
- JFTP теперь называется JClientFtp
- JLDAP теперь называется JClientLdap
- JWebClient теперь называется JApplicationWebClient
Удалённые классы
- JParameter (используйте JForm вместо этого или, в большинстве случаев, JRegistry - например, для извлечения в компоненте параметров плагина)
- JElement и его подклассы
- JFormFieldEditors (вместо этого используйте JFormFieldPlugins)
- JHtmlImage
- JRules (вместо этого используйте JAccessRules)
- JSimpleXML
- JPane
Изменения в классах
Базовые классы
JFactory
- JFactory::getXMLParser() был удалён. Для RSS и Atom случаев, используйте JFactory::getFeedParser(). Для чтения XML файлов или строк используйте JFactory::getXML().
- JFactory::_createConfig() был удалён. Вместо этого используйте JFactory::createConfig().
- JFactory::_createSession() был удалён. Вместо этого используйте JFactory::createSession().
- JFactory::_createDbo() был удалён. Вместо этого используйте JFactory::createDbo().
- JFactory::_createMailer() был удалён. Вместо этого используйте JFactory::createMailer().
- JFactory::_createDocument() был удалён. Вместо этого используйте JFactory::createDocument().
Application
JApplicationHelper
- JApplicationHelper::getPath() был удалён. Нет замены.
- JApplicationHelper::_checkPath() был удалён. Нет замены.
Компонент
JComponentHelper
- Поведение JComponentHelper::isEnabled() было изменено, чтобы соответствовать ожиданиям разработчиков.
MVC
JController
- JController::$_acoSection был удалён.
- JController::$_acoSectionValue был удалён.
- JController::authorize() был удалён. Вместо этого используйте JController::authorise().
- JController::setAccessControl() был удалён. Вместо этого используйте JAccess.
- JController::getInstance() был удалён. Вместо этого используйте JControllerLegacy::getInstance().
JControllerLegacy
- JControllerLegacy::display() требует дополнительного параметра ($cachable = false, $urlparams = false).
JModelAdmin
- JModelAdmin::generateNewTitle() обратно совместим с Joomla 2.5 (первый параметр был удален).
- JModelAdmin::prepareTable(): первый параметр больше не ссылка.
Archive
Adapters
- JArchiveBzip2 больше не распространяется на JObject. Вы не должны использовать любой из методов JObject's.
- JArchiveGzip больше не распространяется на JObject. Вы не должны использовать любой из методов JObject's.
- JArchiveTar больше не распространяется на JObject. Вы не должны использовать любой из методов JObject's.
- JArchiveZip больше не распространяется на JObject. Вы не должны использовать любой из методов JObject's.
Base
JObject
- JObject::toString() был удалён. Вместо этого используйте JObject::__toString().
Client
JClientLdap (ранее JLDAP)
- JClientLdap больше не распространяется на JObject. Вы не должны использовать любой из методов JObject's.
Database
JDatabase был переименован в JDatabaseDriver. JDatabase все еще действует (но является устаревшим) и является базой JDatabaseDriver. Таким образом, тип подсказки и экземпляр проверок продолжают работать.
В связи с ленивым-подключением, подключение открывается только при выполнении запроса или явным вызовом JDatabaseDriver::connected(). Остерегайтесь при проверке JDatabaseDriver::connected().
JDatabase
- JDatabase::$hasQuoted был удалён.
- JDatabase::$quoted был удалён.
- JDatabase::addQuoted() был удалён.
- JDatabase::hasUTF() был удалён.
- JDatabase::debug() был удалён. Вместо этого используйте JDatabase::setDebug().
- JDatabase::explain() был удалён.
- JDatabase::getEscaped() был удалён. Вместо этого используйте JDatabase::escape().
- JDatabase::getTableFields() был удалён. Вместо этого используйте JDatabase::getTableColumns().
- JDatabase::getTicker() был удалён. Вместо этого используйте JDatabase::count().
- JDatabase::isQuoted() был удалён.
- JDatabase::loadResultArray() был удалён. Вместо этого используйте JDatabase::loadColumn().
- JDatabase::nameQuote() был удалён. Вместо этого используйте JDatabase::quoteName().
- JDatabase::queryBatch() был удалён.
- JDatabase::query() является устаревшим. В качестве альтернативы должно использоваться JDatabase::execute().
Файл
JFile
- JFile::read() является устаревшим. Вместо этого используйте file_get_contents().
Документ
JDocument
- JDocument::setMetaData() аргумент $sync был удалён.
JDocumentRenderer
- JDocumentRenderer больше не распространяется на JObject. Вы не должны использовать любой из методов JObject's.
JDocumentFeed
- JFeedItem больше не распространяется на JObject. Вы не должны использовать любой из методов JObject's.
- JFeedEnclosure больше не распространяется на JObject. Вы не должны использовать любой из методов JObject's.
- JFeedImage больше не распространяется на JObject. Вы не должны использовать любой из методов JObject's.
JDocumentOpenSearch
- JOpenSearchUrl больше не распространяется на JObject. Вы не должны использовать любой из методов JObject's.
- JOpenSearchImage больше не распространяется на JObject. Вы не должны использовать любой из методов JObject's.
JDocumentXml
- JDocumentXml::$_name был переименован в JDocumentXml::$name.
Environment
JBrowser
- JBrowser больше не распространяется на JObject. Вы не должны использовать любой из методов JObject's.
- JBrowser::setQuirk() был удалён.
- JBrowser::hasQuirk() был удалён.
- JBrowser::getQuirk() был удалён.
- JBrowser::setFeature() был удалён.
- JBrowser::hasFeature() был удалён.
- JBrowser::getFeature() был удалён.
- JBrowser::$_majorVersion был переименован в JBrowser::$majorVersion.
- JBrowser::$_minorVersion был переименован в JBrowser::$minorVersion.
- JBrowser::$_browser был переименован в JBrowser::$browser.
- JBrowser::$_agent был переименован в JBrowser::$agent.
- JBrowser::$_lowerAgent был переименован в JBrowser::$lowerAgent.
- JBrowser::$_accept был переименован в JBrowser::$accept.
- JBrowser::$_accept_parsed был переименован в JBrowser::$acceptParsed.
- JBrowser::$_platform был переименован в JBrowser::$platform.
- JBrowser::$_robots был переименован в JBrowser::$robots.
- JBrowser::$_mobile был переименован в JBrowser::$mobile.
- JBrowser::$_images был переименован в JBrowser::$images.
JRequest
- JRequest::clean() был удалён.
- JRequest::_cleanVar() теперь защищён.
- JRequest::getCmd() является устаревшим. Вместо этого используйте JFactory::getApplication()->input->get().
- JRequest::getVar() является устаревшим. Вместо этого используйте JFactory::getApplication()->input->get().
- JRequest::checkToken() является устаревшим. Вместо этого используйте JSession::checkToken(). Если вы используете JRequest::checkToken('default'), используйте JSession::checkToken('request').
JUri
- JURI был переименован в JUri. Автозагрузчик еще в состоянии распознать старое имя.
- JUri больше не распространяется на JObject. Вы не должны использовать любой из методов JObject's.
- JUri::$_uri был переименован в JUri::$uri.
- JUri::$_scheme был переименован в JUri::$scheme.
- JUri::$_host был переименован в JUri::$host.
- JUri::$_port был переименован в JUri::$port.
- JUri::$_user был переименован в JUri::$user.
- JUri::$_pass был переименован в JUri::$pass.
- JUri::$_path был переименован в JUri::$path.
- JUri::$_query был переименован в JUri::$query.
- JUri::$_fragment был переименован в JUri::$fragment.
- JUri::$_vars был переименован в JUri::$vars.
Error
JError
- JError является устаревшим. Вместо этого используйте Exceptions.
- Внимание: Многие функции, которые ранее возвращали JError или false в настоящее время генерируют исключения.
Пожалуйста, смотрите: Потенциальные проблемы обратной совместимости в Joomla 1.7 и платформы 11.1 для получения дополнительной информации.
JProfiler
- JProfiler больше не распространяется на JObject. Вы не должны использовать любой из методов JObject's.
- JProfiler::$_start был переименован в JProfiler::$start.
- JProfiler::$_prefix был переименован в JProfiler::$prefix.
- JProfiler::$_buffer был переименован в JProfiler::$buffer.
- JProfiler::$_previous_time был переименован в JProfiler::$previousTime.
- JProfiler::$_previous_mem был переименован в JProfiler::$previousMem.
- JProfiler::$_iswin был переименован в JProfiler::$isWin.
Filesystem
JStream
- JStream::$_fh был переименован в JStream::$fh.
- JStream::$_filesize был переименован в JStream::$filesize.
- JStream::$_context был переименован в JStream::$context.
- JStream::$_contextOptions был переименован в JStream::$contextOptions.
- JStream::$_openmode был переименован в JStream::$openmode.
JStreamString
- JStream::$_currentstring был переименован в JStream::$currentString.
- JStream::$_path был переименован в JStream::$path.
- JStream::$_mode был переименован в JStream::$mode.
- JStream::$_options был переименован в JStream::$options.
- JStream::$_opened_path был переименован в JStream::$openedPath.
- JStream::$_pos был переименован в JStream::$pos.
- JStream::$_len был переименован в JStream::$len.
- JStream::$_stat был переименован в JStream::$stat.
Filter
JFilterInput
- JFilterInput больше не распространяется на JObject. Вы не должны использовать любой из методов JObject's.
HTML
JHtml
- JHTML был переименован в JHtml. Автозагрузчик еще в состоянии распознать старое имя.
- JHtml::_includeRelativeFiles() был удалён. Вместо этого используйте JHtml::includeRelativeFiles().
- JHtml::core() был удалён. Вместо этого используйте JHtmlBehavior::framework().
- JHtml::script() больше не поддерживает строку в качестве второго параметра. Это путь к файлу в Joomla 1.5 и было удалено сейчас.
- JHtml::stylesheet() больше не поддерживает строку в качестве второго параметра. Это путь к файлу в Joomla 1.5 и было удалено сейчас.
JHtmlAccess
- JHtmlAccess::assetgroups() – аргумент $config был удален. Он ранее не использовался.
JHtmlBehavior
- JHtmlBehavior::mootools() был удален. Вместо этого используйте JHtmlBehavior::framework().
- JHtmlBehavior::noframes() – аргумент $location был удалён. Он ранее не использовался.
JHtmlList
- JHtmlList::ordering() – аргумент $chop был удалён. Он ранее не использовался.
- JHtmlList::users() – аргумент $reg был удалён.
JHtmlSelect
- JHtmlSelect::$_optionDefaults был переименован в JHtmlSelect::$optionDefaults.
JToolBar
- JToolBar больше не распространяется на JObject. Вы не должны использовать любой из методов JObject's.
- JToolBar больше не поддерживает функции 'X' (например, addNewX, editListX) что скрыть главное меню перед выполнением функции.
JButton
- JButton больше не распространяется на JObject. Вы не должны использовать любой из методов JObject's.
JPagination
- JPagination::$_viewall был переименован в JPagination::$viewall.
- JPagination::$_additionalUrlParams был переименован в JPagination::$additionalUrlParams.
Installer
JInstaller
- JInstaller::getOverwrite() был удалён. Вместо этого используйте JInstaller::isOverwrite().
- JInstaller::getUpgrade() был удалён. Вместо этого используйте JInstaller::isUpgrade().
- JInstaller::$_paths был переименован в JInstaller::$paths.
- JInstaller::$_upgrade был переименован в JInstaller::$upgrade.
- JInstaller::$_overwrite был переименован в JInstaller::$overwrite.
- JInstaller::$_stepStack был переименован в JInstaller::$stepStack.
JInstallerLanguage
- JInstallerLanguage::$_core был переименован в JInstallerLanguage::$core.
Language
JLanguage
- JLanguage::getPluralSufficesCallback() был удалён. Вместо этого используйте JLanguage::getPluralSuffixesCallback().
- JLanguage::_parseLanguageFiles() был удалён. Вместо этого используйте JLanguage::parseLanguageFiles().
- JLanguage::_parseXMLLanguageFiles() был удалён. Вместо этого используйте JLanguage::parseXMLLanguageFiles().
- JLanguage::_parseXMLLanguageFile() был удалён. Вместо этого используйте JLanguage::parseXMLLanguageFile().
- JLanguage::loadLanguage() – аргумент $overwrite был удалён. Он ранее не использовался.
Registry
JRegistry
- JRegistry::loadXML() был удалён. Вместо этого используйте JRegistry::loadString().
- JRegistry::loadINI() был удалён. Вместо этого используйте JRegistry::loadString().
- JRegistry::loadJSON() был удалён. Вместо этого используйте JRegistry::loadString().
- JRegistry::makeNameSpace() был удалён. Нет замены.
- JRegistry::getNameSpaces() был удалён. Нет замены.
- JRegistry::getValue() был удалён. Вместо этого используйте JRegistry::get().
- JRegistry::setValue() был удалён. Вместо этого используйте JRegistry::set().
- JRegistry::loadSetupFile() был удалён. Нет замены.
JRegistryFormatINI
- JRegistryFormatINI::stringToObject() – второй аргумент ($option) не может иметь булев значение больше.
JRegistryFormatJSON
- JRegistryFormatJSON::stringToObject() – второй аргумент ($option) не может иметь булев значение больше.
Session
JSessionStorageDatabase
- JSessionStorageDatabase::$_data был переименован в JSessionStorageDatabase::$data.
Table
JTable
- JTable::getInstance() параметры теперь являются чувствительными к регистру, например 'MenuType'.
- JTable::canDelete() был удалён.
- JTable::toXML() был удалён.
Updater
JUpdate
- JUpdate::$_xml_parser был переименован в JUpdate::$xmlParser.
- JUpdate::$_stack был переименован в JUpdate::$stack.
- JUpdate::$_state_store был переименован в JUpdate::$stateStore.
- JUpdate::$_current_update был переименован в JUpdate::$currentUpdate.
JUpdater
- JUpdater::arrayUnique() был удалён. Вместо этого используйте JArrayHelper::arrayUnique().
User
JAuthentication
- Константа JAUTHENTICATE_STATUS_SUCCESS была удалена. Вместо этого используйте JAuthentication::STATUS_SUCCESS.
- Константа JAUTHENTICATE_STATUS_CANCEL была удалена. Нет замены.
- Константа JAUTHENTICATE_STATUS_FAILURE была удалена. Вместо этого используйте JAuthentication::STATUS_FAILURE.
- JAuthentication::$_observers был переименован в JAuthentication::$observers.
- JAuthentication::$_state был переименован в JAuthentication::$state.
- JAuthentication::$_methods был переименован в JAuthentication::$methods.
JUser
- JUser::getParameters() был удалён.
- Juser::authorisedLevels() был удалён. Вместо этого используйте JUser::getAuthorisedViewLevels().
- Juser::authorize() был удалён. Вместо этого используйте JUser::authorise().
- JUser::$usertype был удалён.
Utility
JBuffer
- JBuffer::$_buffers был переименован в JBuffer::$buffers.
JDate
- JDate::toMysql() был удален. Вместо этого используйте JDate::toSql().
- JDate::toFormat() был удалён. Вместо этого используйте JDate::format().
- JDate::setOffset() был удалён. Вместо этого используйте JDate::setTimezone().
- JDate::$offsets был удалён.
- JDate::__construct() больше не принимает числовое значение для $tz.
- JDate::$_tz был переименован в JDate::$tz.
JUtility
- JUtility::sendMail() был удалён. Вместо этого используйте JMail::sendMail().
- JUtility::sendAdminMail() был удалён. Вместо этого используйте JMail::sendAdminMail().
- JUtility::getHash() был удалён. Вместо этого используйте JApplication::getHash().
- JUtility::getToken() был удалён. Вместо этого используйте JSession::getFormToken().
- JUtility::isWinOS() был удалён. Вместо этого используйте JApplication::isWinOS().
- JUtility::dump() был удалён. Нет замены.
- JUtility::array_unshift_ref() был удалён. Нет замены.
- JUtility::array_unshift_ref() был удалён. Нет замены.
JXMLElement
- JXMLElement::data() был удалён.
- JXMLElement::getAttribute() был удалён. Вместо этого используйте SimpleXMLElement::attributes().
JavaScript
- Совместимость с MooTools 1.2 не поддерживается.
- Формы, которые имеют name="adminForm" в настоящее время также требуют id="adminForm".
- checkAll() был удалён. Вместо этого используйте Joomla.checkAll().
- isChecked() был удалён. Вместо этого используйте Joomla.isChecked().
- popupWindow() был удалён. Вместо этого используйте Joomla.popupWindow().
- tableOrdering() был удалён. Вместо этого используйте Joomla.tableOrdering().
CMS
Общие изменения
- JUtility не всегда загружается. Если вам это нужно, вы должны добавитьв код – jimport('joomla.utilities.utility').
Изменения в классах
Классы компонентов
- MenusModelItem::getItem() больше не возвращает JObject но использует stdClass.
Help
JHelp
- JHelp::createSiteList() – аргумент $selected был удалён. Он ранее не использовался.
Примеры
Изменения для доступа к параметрам модуля вне модуля
// Для доступа к параметрам модуля внутри плагина
// изменённый код от:
$module = JModuleHelper::getModule('jbolo');
$moduleParams = new JParameter($module->params);
$chatmode=intval($moduleParams->get('modorbar', 1));
// к:
$module = JModuleHelper::getModule('jbolo');
$moduleParams = json_decode($module->params)
$chatmode = $moduleParams->modorbar;
Изменён прототип функции во всех контроллерах
// из:
function display()
// к:
public function display($cachable = false, $urlparams = false)
Изменения в форматирование даты - (используйте как родной php стиль)
// Для достижения формата даты: 6:27PM October 12:
// было:
SENT_AT_FORMAT="%l:%M%p %B %e";
// теперь:
SENT_AT_FORMAT="g:iA F y";
// Для достижения формата даты: Среда, 03 Октябрь 2012:
// было:
HIST_DATE_FORM="%A %e %B %Y";
// теперь:
HIST_DATE_FORM="l, d F Y";
JFactory::getXMLParser() был удалён, используйте JFactory::getXML()
// было:
$parser = JFactory::getXMLParser('Simple');
$xml = JPATH_COMPONENT.DS.'jbolo.xml';
$parser->loadFile($xml);
$doc = $parser->document;
$element = $doc->getElementByPath('version');
$version = $element->data();
// теперь:
$xml = JFactory::getXML(JPATH_COMPONENT.'/jbolo.xml');
$version = (string)$xml->version;
JDate::toMysql()был удалён. Вместо этого используйте JDate::toSql()
// было:
$get_date=JFactory::getDate();
$date=$get_date->toMysql();
// теперь:
$get_date=JFactory::getDate();
$date=$get_date->toSql();
JFile::read является устаревшим. Используйте синтаксис file_get_contents()
// было:
$smileysfile = JFile::read(JPATH_COMPONENT . DS . 'smileys.txt');
// теперь:
$smileysfile = file_get_contents(JPATH_COMPONENT . '/smileys.txt');
JRequest является устаревшим. Используйте JFactory::getApplication()->input
// было:
$post = JRequest::get('post'); JRequest::getVar('badwords');
// теперь:
$input = JFactory::getApplication()->input;
$post = $input->post; $input->post->get('badwords')
// из:
$task = JRequest::getVar('task');
// к:
$task = $input->get('task');
// из:
$groupid = JRequest::getVar('id');
// к:
$groupid = $input->get('id');
// из:
$limitstart = JRequest::getVar('limitstart', 0, '', 'int');
// к:
$limitstart = $input->get('limitstart','0','INT');
// из:
$controller = JRequest::getWord('controller');
// к:
$controller = $input->get('controller');
// из:
$controller->execute(JRequest::getCmd('action'));
// к:
$controller->execute($input->get('action'));
// из:
$id = JRequest::getInt('id');
// к:
$id = $input->getInt('id');
JViewLegacy::assignRef является устаревшим. Используйте родной синтаксис PHP
// было:
$this->assignRef('userlist', $userlist );
// теперь:
$this->userlist = &$userlist
Все эти проблемы в полный рост проявилиись при переходе на Joomla 4 . Там как раз и отменили все устаревшие в Joomla 3 классы.