Difference between revisions of "Potential backward compatibility issues in Joomla 1.7 and Joomla Platform 11.2"

From Joomla! Documentation

(JDatabase::replacePrefix() method scope changed from Public to Protected, no error thrown if used from outside of scope)
Line 9: Line 9:
  
 
JDatabaseQuery is now abstract due of the work done to support new database engines (Windows Azure and Microsoft SQL Server). This means you '''must''' use <code>$db->getQuery(true);</code> to instantiate a query as is the '''correct''' practice in Joomla 1.6.
 
JDatabaseQuery is now abstract due of the work done to support new database engines (Windows Azure and Microsoft SQL Server). This means you '''must''' use <code>$db->getQuery(true);</code> to instantiate a query as is the '''correct''' practice in Joomla 1.6.
 +
 +
== JDatabase ==
 +
 +
JDatabase::replacePrefix() method scope has been changed from 'public' to 'protected' between 1.6 and 1.7. Because the JDatabase object has a __call magic function that doesn't throw an error when a non-existing method is called, doing
 +
$actualTableName = $db->replacePrefix( '#__component_table');
 +
will silently result in $actualTableName begin empty, while on J! 1.6 it would have been set to 'jos_component_table'.
  
 
== JDocument ==
 
== JDocument ==

Revision as of 13:07, 18 July 2011

This documents track potential backward compatibility issues for Joomla 1.7 and Joomla Platform 11.1 which will be included in Joomla 1.7. Listed are issues which potentially breaks extensions and newly deprecated APIs.

Please help making this document complete.

Platform Joomla 11.1[edit]

  • JPATH_PLATFORM is now used instead of JPATH_LIBRARIES (JPATH_LIBRARIES will continue to be supported for version 1.7)

JDatabaseQuery[edit]

JDatabaseQuery is now abstract due of the work done to support new database engines (Windows Azure and Microsoft SQL Server). This means you must use $db->getQuery(true); to instantiate a query as is the correct practice in Joomla 1.6.

JDatabase[edit]

JDatabase::replacePrefix() method scope has been changed from 'public' to 'protected' between 1.6 and 1.7. Because the JDatabase object has a __call magic function that doesn't throw an error when a non-existing method is called, doing

$actualTableName = $db->replacePrefix( '#__component_table');

will silently result in $actualTableName begin empty, while on J! 1.6 it would have been set to 'jos_component_table'.

JDocument[edit]

  • getHeadData(), setHeadData() and mergeHeadData() are from now on only present in JDocumentHTML. They have been removed from JDocument and JDocumentXML.[1]

JDocumentHTML[edit]

  • JDocumentHTML::$_links has changed to a multidimensional array. Also the rendering of the link elements has been moved from JDocumentHTML to JDocumentRenderHead.[2]

JDocumentRendererMessage[edit]

  • A div element with the ID "system-message-container" is always rendered, whether there are messages or not. This ID should not be used in any extension or template.[3]

JError & JException[edit]

JError and JException have been deprecated with Joomla Platform 11.1. Please see Exceptions and Logging in Joomla 1.7 and Joomla Platform 11.1 for more information.[4][5]

JLoader[edit]

  • JLoader can't load files multiple times anymore.[6]

JLog[edit]

  • JLog has shifted to joomla.log.log from joomla.error.log and features support for multiple loggers.

JURI[edit]

  • The unused parameter $akey has been removed from JURI::buildQuery().[7]

JUpdater[edit]

  • JUpdater:: arrayUnique() has been deprecated Use JArrayHelper::arrayUnique() instead. Note that the later is static.[8]

JavaScript[edit]

  • MooTools Core has been updated to version 1.3.2, MooTools More to 1.3.2.1. Due to a change in JSON handling a slight change in behavior can occur. More details can be found on the MooTools Wiki.[9]
  • checkAll() has been deprecated, use Joomla.checkAll() instead. Note that Joomla.checkAll() doesn't include some legacy functionality.[10]

CMS Joomla 1.7[edit]

General Coding Principles[edit]

Within the new Joomla release cycle, developers need to be conscious of more frequent changes to version numbers. If you are doing hard checks against, for example, a version number exactly equal to "1.6" then as we move to 1.7, those checks may fail with unexpected results. You should ensure that version checks appropriately allow for future increments like 1.7, 1.8, 2.0, 3.0, and so on.

TinyMCE[edit]

  • TinyMCE has been updated to the 3.4 series requiring new language files and potentially breaking TinyMCE plug-ins.[11] As of 1.7 RC1, version 3.4.3.2 is distributed.[12]

JavaScript[edit]

  • MooTools Core and MooTools More will not always be loaded in the backend as it was in the past. Extensions have to specifically include it using JHtml::_('behavior.framework'); for Core and adding the 'true' option for More.[13]

Templates[edit]

  • The link to "View Site" is no longer included in mod_status. Administrator templates have to add it themselves.[14]

Modules[edit]

  • mod_online and mod_status have been removed[14]

mod_menu[edit]

  • mod_menu uses a class instead of an id attribute for the itemid.[15]

Moved Files[edit]

The file /libraries/version.php has been moved from the platform to the CMS, specifically to /includes/version.php. If direct access to this file is needed jimport will need to be adjusted but it also can be access by loading framework.php

require_once JPATH_BASE.'/includes/framework.php'

or by using JLoader.

References[edit]