Etoiles inactivesEtoiles inactivesEtoiles inactivesEtoiles inactivesEtoiles inactives
 

Voici un petit récapitulatif de ce que j'ai rencontré comme correction pour passer une extension de Joomla 3 à Joomla 4.

Cette liste n'est pas exhaustive bien sûr, et se complétera au fut et à mesure

JApplication

isAdmin() deprecated 4.0 Use isClient('administrator') instead.

Remplacer JFactory::getApplication()->isAdmin() par JFactory::getApplication()->isClient('administrator')

JRequest

Remplacer JRequest::get par JFactory::getApplication()->input->get

JError

Remplacer
JError::raiseWarning('',
par
JFactory::getApplication()->enqueueMessage(
et ajouter 'WARNING' en dernier paramètre.

JDispatcher

  • Deprecated class placeholder. You should use JEventDispatcher instead
  • The CMS' Event classes will be replaced with the `joomla/event` package

Actuellement (exemple) :

$dispatcher = JDispatcher::getInstance();
$result = $dispatcher->trigger('onContentBeforeSave', array($this->_context, &$table, $isNew, $data));

Supprimer $dispatcher = JDispatcher::getInstance();

remplacer $result = $dispatcher->trigger('onContentBeforeSave', array($this->_context, &$table, $isNew, $data));

par $result = Factory::getApplication()->triggerEvent('onContentBeforeSave', array($this->_context, &$table, $isNew, $data));

JRegistry

JRegistry::getInstance : si l'objet et de passer l'information du model à la vue, recuperer l'information d'une autre manière (getItem et getState par exemple)

JViewLegacy

Remplacer $this->assign('P1',$P2) et $this->assignRef('P1',$P2)
par : $this->P1 = $P2;

JDataBase

Remplacer :

if (!$db->query()) {
Factory::getApplication()->enqueueMessage($db->getErrorMsg(),'ERROR');
return false;
}

par

try {
 $db->execute();
} catch (Exception $e) {
 Factory::getApplication()->enqueueMessage(JText::sprintf('JLIB_DATABASE_ERROR_FUNCTION_FAILED', $e->getCode(), $e->getMessage()),'ERROR');
 return false;
}

Idem il faut remplacer les $db->getErrorNum() et les $db->getErrorMsg() par une gestion des exceptions comme ci-dessus.

Par exemple, remplacer :

$db->setQuery($query);
$results = $db->loadObjectList();
if ($db->getErrorNum()) {
 JFactory::getApplication()->enqueueMessage($db->getErrorMsg(),'WARNING');
 return false;
}

par

$db->setQuery($query);
try {
 $results = $db->loadObjectList();
} catch (Exception $e) {
 JFactory::getApplication()->enqueueMessage(JText::sprintf('JLIB_DATABASE_ERROR_FUNCTION_FAILED', $e->getCode(), $e->getMessage()),'ERROR');
 return false;
}

JHtml

remplacer JHtml::_('behavior.formvalidation');

par JHtml::_('behavior.formvalidator');

JHtml::_('behavior.tooltip'); // existe plus

JForm

  • Use renderField() instead of getControlGroup
  • Use renderFieldset() instead of getControlGroups

Exemple :

Chercher : form->getControlGroup(

et remplacer par form->renderField(

Installer

Remplacer $parent->get('manifest')->version

par $parent->getManifest()->version

ordi-genie F-68800 THANN