リッチテキスト編集が有効なリソースを保存すると画像が表示できなくなる

質問全般・改善要望
返信する
sama55
メンバー
メンバー
記事: 816
登録日時: 2009年8月03日(月) 08:16

リッチテキスト編集が有効なリソースを保存すると画像が表示できなくなる

投稿記事 by sama55 »

1.現象

リッチテキストによる編集が有効なリソースを保存するとimgタグのsrc属性のパスが不正になり、画像が表示できなくなる場合があるようです。

2.発生条件
  1. modx日本語版
  2. RTE(tinyMCE)プラグインの"Path Options"設定が"rootrelative"になっていること
  3. リッチテキストでの編集が有効なリソースにimgタグを追加して保存
  4. その他環境に依存する条件は特になし
3.原因

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>タグを追加する。
※1 コード

コード: 全て選択

				/* 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;
				}
				*/

返信する