お世話になっております。
エラーが出ましたので報告します。
【現象】
注:PHP7.4だと正常に動きます
Doc Manegerの「テンプレート変数」が動作しません。
本来であればテンプレート名のラジオボタンを選択すると下部にテンプレート変数一覧が出るはずですが、反応がありません。
イベントログに下記のエラーが記録されていました。
【環境】
さくらのレンタルサーバ
MODX 1.2.0J
PHP 8.3.8
MySQL 8.0.40
【エラーメッセージ】
Parser line:59
« PHP Parse Error »
PHP error debug
Error : Undefined array key "value"
ErrorType[num] : WARNING[2]
File : /*/assets/modules/docmanager/tv.ajax.php
Line : 59
Source : $row['value'],
LastQuery : SELECT * FROM `modx`.`modx_site_tmplvars` tv LEFT JOIN `modx`.`modx_site_tmplvar_templates` tvtpl ON tv.id = tvtpl.tmplvarid WHERE tvtpl.templateid ='2'
Basic info
REQUEST_URI : /assets/modules/docmanager/tv.ajax.php
Referer : https://*/manager/index.php?a=112&id=1
User Agent : Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.2 Safari/605.1.15
Backtrace
(空白でした)
[PHP8のみ] Doc Manager「テンプレート変数」が動作しない
[PHP8のみ] Doc Manager「テンプレート変数」が動作しない
本件、原因は分かったような気がします。
/home/techmation/www/techmation.co.jp/assets/modules/docmanager/tv.ajax.php
28行目
はテンプレート変数の定義の取得なのでtvc.value='value'が存在しないはずです。
そのため59行目の
で`Undefined array key "value"`が発生します。
応急処置で、
としました。
ところが今度は`Undefined array key 1`エラーが発生しました。
テンプレート変数(dropdown)のオプション('elements')が'継承==||0||1'の場合に発生しているようです。
/home/techmation/www/techmation.co.jp/assets/modules/docmanager/tv.ajax.php
137行目
'elements'が`string==var`の形式でないとexplode("==", $itemvalue)で要素がひとつだけの配列が作られてしまうため`Undefined array key 1`が発生してしまいます。
'dropdown'だけでなく'listbox'、'checkbox'、'option'でも同じ処理があります。
一か所対応するとまた別の個所がWARNINGになる。yama様の苦労がほんの少しですが分かりました。
もう少し考えてみます。
/home/techmation/www/techmation.co.jp/assets/modules/docmanager/tv.ajax.php
28行目
コード: 全て選択
$rs = db()->select(
'*',
["[+prefix+]site_tmplvars tv", "LEFT JOIN [+prefix+]site_tmplvar_templates tvtpl ON tv.id = tvtpl.tmplvarid"],
"tvtpl.templateid ='" . $tplID . "'"そのため59行目の
コード: 全て選択
$row['value'],応急処置で、
コード: 全て選択
$row['value'] ?? '',ところが今度は`Undefined array key 1`エラーが発生しました。
テンプレート変数(dropdown)のオプション('elements')が'継承==||0||1'の場合に発生しているようです。
/home/techmation/www/techmation.co.jp/assets/modules/docmanager/tv.ajax.php
137行目
コード: 全て選択
[$item, $itemvalue] = (is_array($itemvalue)) ? $itemvalue : explode("==", $itemvalue);'dropdown'だけでなく'listbox'、'checkbox'、'option'でも同じ処理があります。
一か所対応するとまた別の個所がWARNINGになる。yama様の苦労がほんの少しですが分かりました。
もう少し考えてみます。
