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。
私は別のサイトでこの問題に再び遭遇し、問題が何であるかを思い出しました。このモジュールは、ヘルパーファイル/クラスをロードする方法と_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リリースを待つことができます。
最近のバージョンのJoomla! $_SERVER['PHP_SELF']
を$_SERVER['REQUEST_URI']
に置き換えます。 14行目でそのコードを置き換えました。引き続きerror_log
を監視して、問題が解決されたかどうかを確認します。
pdate:この「修正」以降、少なくとも1回は同じエラーを受け取ったため、問題を解決できなかったようです。