Je reçois cette ligne dans le error_log
d'un Joomla! 3.6.5 site de temps en temps:
[21-Dec-2016 18:29:41 America/Detroit] PHP Fatal error: Class 'ContentHelperRoute' not found in /path/to/site/templates/theme/html/mod_articles_categories/default_items.php on line 14
Voici le contenu de default_items.php
:
<?php
/**
* @package Joomla.Site
* @subpackage mod_articles_categories
*
* @copyright Copyright (C) 2005 - 2013 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
foreach ($list as $item) :
?>
<li <?php if ($_SERVER['PHP_SELF'] == JRoute::_(ContentHelperRoute::getCategoryRoute($item->id))) echo ' class="active"';?>> <?php $levelup = $item->level - $startLevel - 1; ?>
<a href="<?php echo JRoute::_(ContentHelperRoute::getCategoryRoute($item->id)); ?>">
<?php echo $item->title;?></a>
<?php
if ($params->get('show_description', 0))
{
echo JHtml::_('content.prepare', $item->description, $item->getParams(), 'mod_articles_categories.content');
}
if ($params->get('show_children', 0) && (($params->get('maxlevel', 0) == 0) || ($params->get('maxlevel') >= ($item->level - $startLevel))) && count($item->getChildren()))
{
echo '<ul>';
$temp = $list;
$list = $item->getChildren();
require JModuleHelper::getLayoutPath('mod_articles_categories', $params->get('layout', 'default').'_items');
$list = $temp;
echo '</ul>';
}
?>
</li>
<?php endforeach; ?>
Voici le contenu du noyau default_items.php
fichier pour comparaison:
<?php
/**
* @package Joomla.Site
* @subpackage mod_articles_categories
*
* @copyright Copyright (C) 2005 - 2016 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
foreach ($list as $item) : ?>
<li <?php if ($_SERVER['REQUEST_URI'] == JRoute::_(ContentHelperRoute::getCategoryRoute($item->id))) echo ' class="active"';?>> <?php $levelup = $item->level - $startLevel - 1; ?>
<h<?php echo $params->get('item_heading') + $levelup; ?>>
<a href="<?php echo JRoute::_(ContentHelperRoute::getCategoryRoute($item->id)); ?>">
<?php echo $item->title;?>
<?php if ($params->get('numitems')) : ?>
(<?php echo $item->numitems; ?>)
<?php endif; ?>
</a>
</h><?php echo $params->get('item_heading') + $levelup; ?>>
<?php if ($params->get('show_description', 0)) : ?>
<?php echo JHtml::_('content.prepare', $item->description, $item->getParams(), 'mod_articles_categories.content'); ?>
<?php endif; ?>
<?php if ($params->get('show_children', 0) && (($params->get('maxlevel', 0) == 0)
|| ($params->get('maxlevel') >= ($item->level - $startLevel)))
&& count($item->getChildren())) : ?>
<?php echo '<ul>'; ?>
<?php $temp = $list; ?>
<?php $list = $item->getChildren(); ?>
<?php require JModuleHelper::getLayoutPath('mod_articles_categories', $params->get('layout', 'default') . '_items'); ?>
<?php $list = $temp; ?>
<?php echo '</ul>'; ?>
<?php endif; ?>
</li>
<?php endforeach; ?>
Comment puis-je résoudre cette erreur?
Remarque: Ces erreurs n’ont commencé que le 3 novembre. Je suppose donc que cela était lié à la mise à jour .6.4 ou à une mise à jour mineure vers PHP 5.5.
Je viens juste de retrouver ce problème avec un autre site et je me suis rappelé le problème. Ce module est qu’il a changé la façon dont il charge son assistant File/Class et la façon dont le fichier helper.php
Charge la ContentHelperRoute
Class, donc le ContentHelperRoute
n’est plus disponible dans le fichier de modèle default_items.php
.
De:
require_once __DIR__ . '/helper.php';
dans le fichier mod_articles_categories.php pour inclure le fichier d'assistance et la classe, et:
require_once JPATH_SITE . '/components/com_content/helpers/route.php';
à l'intérieur du fichier helper.php, pour inclure le fichier/classe ContentHelperRoute
, il charge maintenant lesdites classes avec JLoader::register();
Mais de cette façon, le ContentHelperRoute
n'est plus disponible dans le répertoire default_items.php
Où il est appelé.
Pour résoudre ce problème, vous pouvez éditer le fichier mod_articles_categories.php et ajouter cette ligne après le defined('_JEXEC') or die;
JLoader::register('ContentHelperRoute', JPATH_SITE . '/components/com_content/helpers/route.php');
Ceci est un bogue comme indiqué ici: https://github.com/joomla/joomla-cms/pull/1359
Vous pouvez appliquer le correctif ci-dessus au fichier mod_articles_categories.php et attendre la prochaine version de Joomla.
Il semble que les versions récentes de Joomla! ont remplacer $_SERVER['PHP_SELF']
avec $_SERVER['REQUEST_URI']
. J'ai remplacé ce code sur la ligne 14 et continuerai à surveiller le error_log
pour voir si le problème est résolu.
pdate: J'ai reçu la même erreur au moins une fois depuis ce "correctif", il semble donc que cela n'a pas résolu le problème.