web-dev-qa-db-ja.com

PHP致命的なエラー:クラス 'ContentHelperRoute'が見つかりません

Joomlaのerror_logでこの行を取得しています! 3.6.5時々サイト:

[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

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; ?>

コアdefault_items.phpファイルの内容を比較のために次に示します。

<?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; ?>

このエラーを解決するにはどうすればよいですか?


注:これらのエラーは11月3日にのみ発生したため、これは.6.4の更新またはPHP 5.5。

3
Michael Yaeger

私は別のサイトでこの問題に再び遭遇し、問題が何であるかを思い出しました。このモジュールは、ヘルパーファイル/クラスをロードする方法と_helper.php_ファイルがContentHelperRouteクラスをロードする方法を変更したため、ContentHelperRouteは使用できなくなりました。 _default_items.php_テンプレートファイル。

から:

_require_once __DIR__ . '/helper.php';
_

mod_articles_categories.php内にヘルパーファイルとクラスを含めます。

_require_once JPATH_SITE . '/components/com_content/helpers/route.php';
_

helper.php内にContentHelperRouteファイル/クラスを含めるために、このクラスをJLoader::register();でロードします

しかし、このようにしてContentHelperRouteは、呼び出されている_default_items.php_では利用できなくなります。

このバグを修正するには、mod_articles_categories.phpを編集して、この行をdefined('_JEXEC') or die;の後に追加します

_JLoader::register('ContentHelperRoute', JPATH_SITE . '/components/com_content/helpers/route.php');
_

更新

これはここに示すようにバグです: https://github.com/joomla/joomla-cms/pull/1359

上記の修正をmod_articles_categories.phpに適用して、次のJoomlaリリースを待つことができます。

3
FFrewin

最近のバージョンのJoomla! $_SERVER['PHP_SELF']$_SERVER['REQUEST_URI']に置き換えます。 14行目でそのコードを置き換えました。引き続きerror_logを監視して、問題が解決されたかどうかを確認します。


pdate:この「修正」以降、少なくとも1回は同じエラーを受け取ったため、問題を解決できなかったようです。

0
Michael Yaeger