web-dev-qa-db-fra.com

PHP Erreur fatale: la classe 'ContentHelperRoute' n'a pas été trouvée

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.

3
Michael Yaeger

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');

Mise à jour

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.

3
FFrewin

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.

0
Michael Yaeger