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

本家版(1.0.2)または日本版(1.0.2J)
フォーラムルール
・1つの質問につき1つのトピックとしてください
・質問から3日以内に返信された回答には必ず1週間以内に返信してください。質問者が回答者を無視することは禁じます。
・不具合やエラー関連の質問は下のテンプレートに従って必要事項を記入してください。
-----
[サーバ]
 ホスト&契約タイプ:(例 さくらスタンダード, XREA+, 自宅/自社サーバなど)
 ネットワーク:(例 インターネット, イントラネットなど)
 Webサーバ:(例 Apache9.9.9、IISなど)
 PHPバージョン:(例 9.9.9など)
 DB:(例 MySQL9.9.9など)
[modx]
 バージョン:(例 1.0.0, 1.0.0J など)
 アドオン:(例 Wayfinder 2.0など) ※質問の対象として特定できる場合は必須
 サイトURL: ※任意(回答者からの要請なしにPMで送りつけることは禁止)
[クライアント]
 ブラウザ:(例 Firefox3, IE7, IE8 など)
-----
・解決した時は、質問者が当該トピックに解決マークを付けて締め括ってください。
・解決したトピックのロックはしません。書き忘れや事後報告などの追加書き込みはOKですが、ぶらさがり的な質問は禁止します。

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

投稿記事by sama55 » 2009/12/25(金) 13:32

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

sama55
メンバー
 
記事: 694
登録日時: 2009/08/03(月) 08:16
所在地: Saitama, Japan
Thanks: 337
Thanked: 190 times in 148 posts

Return to 1.0.2(J)



オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[1人]

cron