リッチテキストによる編集が有効なリソースを保存するとimgタグのsrc属性のパスが不正になり、画像が表示できなくなる場合があるようです。
2.発生条件
- modx日本語版
- RTE(tinyMCE)プラグインの"Path Options"設定が"rootrelative"になっていること
- リッチテキストでの編集が有効なリソースにimgタグを追加して保存
- その他環境に依存する条件は特になし
mutate_content.dynamic.php(L683~703近辺)のimgタグのsrc属性の補間処理が、rootrelative設定では正しく動作しないため。
本家版はtinyMCEのPath Options設定がデフォルトでは"docrelativeになっているためこの現象は発生しません。
4.回避方法(いずれかを実施。修正ではありません)
- tinyMCEのPath Options設定はrootrelativeのまま変更せず、mutate_content.dynamic.phpのL683~703をコメントアウトする。 ※1
- tinyMCEのPath Options設定をfullpathurlに変更する。
- tinyMCEのPath Options設定をdocrelativeに変更し、テンプレートに<base>タグを追加する。
コード: 全て選択
/* comment out
if (!empty ($htmlContent)) {
if (substr($rb_base_url, -1) != '/')
$im_base_url = $rb_base_url . '/';
else $im_base_url = $rb_base_url;
$elements = parse_url($im_base_url);
$image_path = $elements['path'];
// make sure image path ends with a /
if (substr($image_path, -1) != '/')
$image_path .= '/';
$modx_root = dirname(dirname($_SERVER['PHP_SELF']));
$image_prefix = substr($image_path, strlen($modx_root));
if (substr($image_prefix, -1) != '/')
$image_prefix .= '/';
// escape / in path
$image_prefix = str_replace('/', '\/', $image_prefix);
$newcontent = preg_replace("/(<img[^>]+src=['\"])($image_prefix)([^'\"]+['\"][^>]*>)/", "\${1}$im_base_url\${3}", $content['content']);
$htmlContent = $newcontent;
}
*/