MODX 1.2.0J
PHP 8.3.8
MySQL 8.0.40
https://github.com/modxcms-jp/sitemap
こちらのSitemapスニペットをPHP8に対応させるため最小限の修正をしました。
ただし「document.parser.class.inc.php」でエラーが出るので、こちらの修正も条件です。
Error : Undefined variable $result
ErrorType[num] : WARNING[2]
File : /*/manager/includes/document.parser.class.inc.php
Line : 4751
Source : return $result;
Execution Context : Snippet - Sitemap
8 $modx->evalSnippet()
manager/includes/document.parser.class.inc.php on line 3208
9 eval()
manager/includes/document.parser.class.inc.php on line 2779
10 getDocs()
manager/includes/document.parser.class.inc.php(2779) : eval()'d code on line 95
11 getDocs()
manager/includes/document.parser.class.inc.php(2779) : eval()'d code on line 265
12 getTV()
manager/includes/document.parser.class.inc.php(2779) : eval()'d code on line 259
13 $modx->getTemplateVar()
manager/includes/document.parser.class.inc.php(2779) : eval()'d code on line 220
14 $modx->getTemplateVars()
manager/includes/document.parser.class.inc.php on line 4721
該当するブロックは下記です。
コード: 全て選択
if (!$resource['template']) {
foreach ($resource as $key => $value) {
if ($idnames === '*' || (is_string($idnames) && in_array($key, explode(',', $idnames)))) {
$result[] = ['name' => $key, 'value' => $value];
}
}
return $result; // 4,751行目
}
ところがテンプレートID:0にはテンプレート変数が存在しないため$resultは未定義のままとなります。
4,785行目の「$result = [];」を関数定義直後の4,728行目に移動すればエラーは回避できますが、これが本当に正しい修正なのか自信がありません。
私の環境では今のところ他に影響は出ていないようです。
