バージョン選択

フォーラム

メニュー

オンライン状況

64 人のユーザが現在オンラインです。 (53 人のユーザが フォーラム を参照しています。)
登録ユーザ: 1
ゲスト: 63
Amaltoys もっと...

サイト内検索

質問 > 管理機能 > 商品画像にswfファイルを追加したい

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
tonton-a
投稿日時: 2010/4/22 0:27
対応状況: −−−
新米
登録日: 2010/4/15
居住地:
投稿: 7
商品画像にswfファイルを追加したい
商品詳細ページにswf、swcファイルを設置したいと思い、この開発コミュニティサイト内を検索したのですが、詳細が分からなかったので、自分で作ることにしました。
考え方としては、swf、swcファイルはgif、jpeg等の他の画像ファイルと違い、元のファイルサイズはそのままで表示時にhtmlの「object」、「embed」タグでサイズを任意の値に設定すれば、拡大・縮小表示は可能だと思うので、そのようにすることにしました。
修正箇所と状況は下記の通りです。

状況
1.EC CUBE管理画面でエラーは発生していない
2.商品登録画面でアップロードした画像が元の画像のリンク切れとして表示、アップしたswfファイルは表示されていない
3.phpMyAdminのdtb_productsには登録したswfファイルがきちんとアップされている

修正箇所
1./data/class/pages/admin/products/LC_Page_Admin_Products_Product.php 375〜382行目
 フォーマットに「swf、swc」を追加
2.data/class/SC_Image.php
 114行目 if(!$size[2] || $size[2] > 3){ // 画像の種類が不明 or swf
 修正内容 if(!$size[2] || ($size[2] != 1 && $size[2] != 2 && $size[2] != 3 && $size[2] != 4 && $size[2] != 13)){ // 画像の種類が不明 or gif,jpg,png,swf,swc以外の場合
 230行目付近
  }
$RetVal = $ToFile;
break;
    (ここに追加)
}

ImageDestroy($ImgDefault);
ImageDestroy($ImgNew);

  (追加内容)
case "4": //swf形式
$ImgDefault = copy($FromImgPath, $ImgNew); //元のファイルをコピー

if ( $newFileName ) {
$ToFile = $newFileName;
} elseif ($ext) {
$ToFile .= "." . $ext;
} else {
$ToFile .= ".swf";
}
$TmpPath = $ToImgPath.$ToFile;
$ImgNew->output();
if(!@file_exists($TmpPath)){ // 画像が作成されていない場合
return array(0,"画像の出力に失敗しました。");
}
$RetVal = $ToFile;
break;
case "13": //swc形式
     (case "4"と同様の内容)

3.data/module/gdthumb.php
 264行目付近
imagedestroy($src_im);
imagedestroy($dst_im);

break;
(ここに追加)
default:
return array(0, "イメージの形式が不明です。");

  (追加内容)

// swf形式
case "4":
$src_im = copy($path, $dst_file);
$dst_im = copy($path, $dst_file);

// 画像出力
if($header){
header("Content-Type: application/x-shockwave-flash");
$dst_im->output();
return "";
}else{
$dst_file = $dst_file . ".swf";

}

imagedestroy($src_im);
imagedestroy($dst_im);

break;
// swf形式
case "13":
  (case "4"と同様)

4.管理画面のシステム設定、マスターデータ管理のmtb_allowed_tagに
 「object」、「/object」、「script」、「/script」を追加

質問内容は次の2点です。
1.商品詳細画面にこれらの工夫でswf、swcファイルはアップ可能でしょうか?
 それとも商品詳細画面内にiframe等の枠を設定して、そこにファイルを設置するようにしないと表示できないのでしょうか?
2.表示時の設定はどのようにすれば良いのでしょうか


よろしくお願いいたします。

システム環境
[EC-CUBE] 2.4.3 Wadax提供版(UTF-8使用可能にする部分のみ修正)
[レンタルサーバ] Wadax共用サーバ
[OS] Linux 2.6.9-89.0.23.ELsmp
[PHP] PHP 5.2.13
[データベース] MySQL 4.1.22
[WEBサーバ] Apache 2.0
[ブラウザ] Internet Explore 8.0.6001.18702
tao_s
投稿日時: 2010/4/22 5:30
対応状況: −−−
仙人
登録日: 2008/8/20
居住地: 東京
投稿: 799
Re: 商品画像にswfファイルを追加したい
概ね合っていると思います。
そのままだとimgタグで吐いてしまうので、テンプレートでファイル形式に合わせてタグを切り替える必要があります。
また、モバイルサイトでどう処理するかを考える必要があると思います。


----------------
EC-CUBEカスタマイズ相談してください。
緊急のEC-CUBEの障害対応
EC-CUBEカスタマイズブログ

tonton-a
投稿日時: 2010/4/22 21:09
対応状況: −−−
新米
登録日: 2010/4/15
居住地:
投稿: 7
Re: 商品画像にswfファイルを追加したい
tao_s さん、コメントありがとうございます。

タグの切り替えについては検討してみます。

モバイルサイト対応については、PCでの表示ができた後で検討したいと思います。
Flash対応携帯ならFlush Liteで表示し、非対応なら代替画像を表示させようかと思います。
いずれにしても、画面が小さいので表示できても内容が分かるかどうかが一番大きな問題かもしれません。

検討した内容はまたアップしたいと思います。
今後ともよろしくお願いします。
tonton-a
投稿日時: 2010/4/26 7:21
対応状況: −−−
新米
登録日: 2010/4/15
居住地:
投稿: 7
Re: 商品画像にswfファイルを追加したい
あれから検討をして、テンプレートのタグを切り替えることでフラッシュファイルを表示できるようになりました。
しかし、以下のコードを管理画面のテンプレートの拡大画像の部分に記述していますが、画像とともにコード自体が表示されてしまいます。

<?php
$strext = substr($arrFile[$key].filepath, -3, 3);
if ($strext == \'gif\' || $strext == \'jpg\' || $strext == \'png\') {
print <<< DOC1
<img src="<!--{$smarty.const.IMAGE_SAVE_URL}--><!--{$tpl_image}-->" width="<!--{$tpl_width}-->"
height="<!--{$tpl_height}-->" alt="<!--{$tpl_name}-->" />
DOC1;
}
elseif ($strext == \'swf\' || $strext == \'swc\') {
print <<< DOC2
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0"
width="<!--{$tpl_width}-->" height="<!--{$tpl_height}-->" align="">
<param name="movie" value="<!--{$smarty.const.IMAGE_SAVE_URL}--><!--{$tpl_image}-->">
<param name="quality" value="high">
<embed src="<!--{$smarty.const.IMAGE_SAVE_URL}--><!--{$tpl_image}-->" quality="high"
pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash"
width="<!--{$tpl_width}-->" height="<!--{$tpl_height}-->">
</embed></object>
DOC2;
}
?>

状況は、画像の上の部分に
DOC1; } elseif ($strext == \'swf\' || $strext == \'swc\') { print <<<
が表示され、画像の下に
DOC2DOC2; } ?>
が表示されてしまいます。

どのようにすればコードが表示されなくなるか教えて頂けないでしょうか?
よろしくお願いします。
seasoft
投稿日時: 2010/4/26 10:07
対応状況: −−−
登録日: 2008/6/4
居住地:
投稿: 7367
Re: 商品画像にswfファイルを追加したい
赤字部分の先頭にスペースを入れているのが原因では?

<?php
  $strext = substr($arrFile[$key].filepath, -3, 3); 
  if ($strext == \'gif\' ||  $strext == \'jpg\' ||  $strext == \'png\') {
    print <<< DOC1
      <img src="<!--{$smarty.const.IMAGE_SAVE_URL}--><!--{$tpl_image}-->" width="<!--{$tpl_width}-->" 
      height="<!--{$tpl_height}-->" alt="<!--{$tpl_name}-->" />
    DOC1;
  }
  elseif ($strext == \'swf\' ||  $strext == \'swc\') {
    print <<< DOC2
      <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" 
      codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0" 
      width="<!--{$tpl_width}-->" height="<!--{$tpl_height}-->" align="">
      <param name="movie" value="<!--{$smarty.const.IMAGE_SAVE_URL}--><!--{$tpl_image}-->">
      <param name="quality" value="high">
      <embed src="<!--{$smarty.const.IMAGE_SAVE_URL}--><!--{$tpl_image}-->" quality="high" 
      pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" 
      width="<!--{$tpl_width}-->" height="<!--{$tpl_height}-->">
      </embed></object>
    DOC2;
  }
?>


----------------
Seasoft
こちらでの投稿は、アイディア程度に留めさせていただいております。
個別案件の作業は有償で承っております。お気軽にご相談ください。

tonton-a
投稿日時: 2010/4/26 21:20
対応状況: −−−
新米
登録日: 2010/4/15
居住地:
投稿: 7
Re: 商品画像にswfファイルを追加したい
seasoft様コメントありがとうございます。

スペースを除いてみましたが、状況は変わりませんでした。

引き続き検討してみますので、これはということがありましたら、アドバイス頂ければと思います。

よろしくお願いします。
tonton-a
投稿日時: 2010/4/27 0:44
対応状況: −−−
新米
登録日: 2010/4/15
居住地:
投稿: 7
Re: 商品画像にswfファイルを追加したい
あともう1点不具合が出ていて、いろいろいじってはいるのですが、解決できていないのでご相談させてください。

最初のコメントに書きましたが、gdthmb.php、SC_Image.phpをいじったことによるものだと思われる不具合が出ています。

商品登録時の画像(フラッシュ)ファイルの流れは、

商品登録時:
html/upload/temp_imageフォルダ:登録(作業)ファイルをこのフォルダに一時保存

確認画面で商品登録後:
html/upload/save_image:tempフォルダと同じファイルを作成
html/upload/temp_image:tempフォルダ内の作業ファイル削除

このようになっていると思うのですが、現時点では商品登録後save_imageフォルダにファイルは作成されるのですが、temp_imageフォルダのフィルが削除されません。

ファイル名、パスを追ってはいるのですが、ファイル名をつかみ切れていないようです。
下記が現時点での修正内容です。よろしくお願いします。

SC_Image.php
1.114、115行目
(修正前)
if(!$size[2] || $size[2] > 3){ // 画像の種類が不明 or swf
return array(0,"画像形式がサポートされていません。");
(修正後)
if(!$size[2] || ($size[2] != 1 && $size[2] != 2 && $size[2] != 3 && $size[2] != 4 && $size[2] != 13)){ // 画像の種類が不明 or gif,jpg,png,swf,swc以外の場合
return array(0,"画像形式がサポートされていません。");
2.232-237行目
$RetVal = $ToFile;
break;
(ここに追加)
}

ImageDestroy($ImgDefault);
ImageDestroy($ImgNew);

(追加内容)
case "4": //swf形式
$ImgDefault = copy($FromImgPath, $ImgNew); //元のファイルをコピー
//copy($FromImgPath, $ImgNew); //元のファイルをコピー

if ( $newFileName ) {
$ToFile = $newFileName;
} elseif ($ext) {
$ToFile .= "." . $ext;
} else {
$ToFile .= ".swf";
}
$TmpPath = $ToImgPath.$ToFile;
$ImgNew->output();
if(!@file_exists($TmpPath)){ // 画像が作成されていない場合
return array(0,"画像の出力に失敗しました。");
}
$RetVal = $ToFile;
   unlink($ImgDefault);
break;

case "13": //swc形式
     (case "4": //swf形式と同様)

gdthumb.php
1.267-270行目
break;
(ここに追加)
default:
return array(0, "イメージの形式が不明です。");

(追加内容)
// swf形式
case "4":

$dst_im = copy($path, $dst_file);

// 画像出力
if($header){
header("Content-Type: application/x-shockwave-flash");
$dst_im->output();
return "";
}else{
$dst_file = $dst_file . ".swf";

if($re_size[0] == $size[0] && $re_size[1] == $size[1]) {
//サイズが同じ場合には、そのままコピーする。(画質劣化を防ぐ)
copy($path, $dst_file);
} else {
$dst_file->output();
}
}

unlink($dst_im);

break;

// swc形式
case "13":(case "4"と同様)
tonton-a
投稿日時: 2010/4/27 2:58
対応状況: 解決済
新米
登録日: 2010/4/15
居住地:
投稿: 7
Re: 商品画像にswfファイルを追加したい
自己レス、解決しました!

オリジナルのjpegやpng形式のプログラムを参考にしていたのですが、
その中にある

imageJpeg($dst_im)、imagepng($dst_im)

を、ファイル出力のみと捉えていたので、

$dst_im->output()

としていたため、ファイルが作成されず不具合を生じていたようです。
ですので、以下の修正で画像登録時の移動、ファイル削除が正常にできるようになりました。
ありがとうございました。

SC_Image.php
1.追加内容13行目
修正前:$ImgNew->output();
修正後:copy($TmpPath,$ImgNew);

gdthumb.php
1.追加内容9行目
修正前:$dst_im->output();
修正後:$dst_im = copy($path, $dst_file);
2.追加内容18行目
修正前:$dst_file->output();
修正後:$dst_im = copy($path, $dst_file);
3.追加内容4行目
修正前:$dst_im = copy($path, $dst_file);
修正後:削除


画像表示のところにコードが表示される問題については、
http://nyx.pu1.net/reference/basic/character.html
を参考に

1.行頭、行末のスペース削除
2.開始IDの前のスペース削除

等も行いましたが、依然コードが表示されたままになっています。

何か情報等お持ちの方がおられましたら、教えていただけないでしょうか。
よろしくお願いします。、
seasoft
投稿日時: 2010/4/27 9:13
対応状況: −−−
登録日: 2008/6/4
居住地:
投稿: 7367
Re: 商品画像にswfファイルを追加したい
「\'」という記述も不自然っぽい気が。「\」で良いのでは?


----------------
Seasoft
こちらでの投稿は、アイディア程度に留めさせていただいております。
個別案件の作業は有償で承っております。お気軽にご相談ください。

tonton-a
投稿日時: 2010/4/27 22:09
対応状況: 開発中
新米
登録日: 2010/4/15
居住地:
投稿: 7
Re: 商品画像にswfファイルを追加したい
seasoft様コメントありがとうございます。

>「\'」という記述も不自然っぽい気が。「\」で良いのでは?

変更してみましたが、表示に変化はありませんでした。
これまでいろいろと検討してきましたが、画像表示のところに、

EOT1;\n } elseif ($strext == \swf\ || $strext == \swc\) { echo <<< EOT2\n

とEOT1以下のコードが同一行で表示されているので、やはりEOT1の後の「;」や改行が認識されていないために、どこまでがヒアドキュメントなの?って怒られているような気がします。

このように考えて、EOT1;の後に「\n」を入れてみたりしたのですがこれもだめでした。
このようなことを考えていてふと思ったのですが、私が使っているサーバはWadaxで

php_flag magic_quotes_gpc 0

となっているのですが、これが影響しているってことはないですか?
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,709名です
総投稿数は109,948件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2313
5
umebius
2085
6
yuh
1819
7
h_tanaka
1638
8
red
1570
9
mcontact
1285
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.