myalbumで複数画像の改造方法 - 雑談 - フォーラム

myalbumで複数画像の改造方法

投稿ツリー



全 6 件のうち 1 - 6 件目を表示しています。
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 .3 | 投稿日時 2013/1/23 1:07
yamanba  サイトURL
うさぎにもできるXOOPS Cube入門でmyalbumで複数画像を扱いたいを拝見しました。
このサイトも拝見し、私も複数画像がほしいと思っています。出来れば改造方法等を教えてくださると助かるのですが・・・・・
お忙しい所申し訳ありませんが、よろしくお願いいたします。
http://yamanba.net/
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2013/1/23 22:21 | 最終変更
ノーザラント  管理人   投稿数: 422
yamanbaさん、こんにちは。

どうやって改造したか、もううる覚えなのですが、ちょっと思い出しながらまとめてみたいと思います。
ただ、PHPから手を加えているので、あまり推奨は出来ないです

改造する場合は、自己責任でお願いしますね。

xoops_html/modules/myalbum/submit.phpについて

333行目辺りに
$file_form = new XoopsFormFile( _ALBM_SELECTFILE , "photofile" , $myalbum_fsize ) ;
$file_form->setExtra( "size='70'" ) ;
とありますよね。
これが、メイン画像のアップロードエリアです。
これをサブ画像が必要な分だけその下にコピーします。

$file_form1 = new XoopsFormFile( _ALBM_SELECTFILX . "1" , "photofile1" , $myalbum_fsize ) ;
$file_form1->setExtra( "size='70'" ) ;
$file_form2 = new XoopsFormFile( _ALBM_SELECTFILX . "2" , "photofile2" , $myalbum_fsize ) ;
$file_form2->setExtra( "size='70'" ) ;
$file_form3 = new XoopsFormFile( _ALBM_SELECTFILX . "3" , "photofile3" , $myalbum_fsize ) ;
$file_form3->setExtra( "size='70'" ) ;
私の場合、以下9番まで作ってみました。
XoopsFormFileのクラスをどこで定義しているのか知らないし、どういじったらいいのかも分からなかったけど、上のようにしたらうまくいったのです。PHPをかじった事もない私がやった事なので、色々おかしい所があるかもしれませんが、その場合は、遠慮なく突っ込んで下さい。

次に、その下の画像回転はさせる部分
if( $myalbum_canrotate ) {

}
は、サブ画像の回転のさせ方が分からないので、行頭に//を入れてコメントアウトしてしまいました。

プレビューさせないためだったかな?
//if( $caller != 'imagemanager' ) $submit_tray->addElement( $preview_button ) ;
これもコメントアウト。

でもって
$form->addElement( $file_form ) ;
の後ろに
$form->addElement( $file_form1 ) ;
$form->addElement( $file_form2 ) ;
$form->addElement( $file_form3 ) ;
と、必要な分だけ追加します。

その後の回転させるラジオボタンはコメントアウト。
//if( $myalbum_canrotate ) $form->addElement( $rotate_radio ) ;

これで、サブ画像をアップするフォームだけは完成します。
どうですか?いじってみますか?
PHPは分かんないけど、いじってでも実現したいっていう場合はコメント下さい。続きを書きますので。
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2013/1/24 13:06
yamanba 
ありがとうございます。
一応
xoops_html/modules/myalbum/submit.php
に手を加えました。

editphoto.phpやphoto.phpなども修正しないといけないんですよね。
もう少し先を知りたいのですが・・・・・
ご足労おかけしますがよろしくお願いいたします。
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2013/1/24 23:32 | 最終変更
ノーザラント  管理人   投稿数: 422
では、続きです。

submit.phpの183行目くらいに
myalbum_modify_photo( "$photos_dir/$tmp_name" , "$photos_dir/$newid.$ext" ) ;
とあるのですが、この関数で画像をアップしているらしい事を突き止めました。
そこで、同じくこの関数で、サブ画像もアップしてしまおうという魂胆です。

実験として、すぐ下に
$field = @$_POST['xoops_upload_file'][1] ;
if( @$_FILES[$field]['name'] != '' ) {
    // Sub photo is exist
    $tmp_name = $_FILES[$field]['name'] ;
    $uploader->fetchMedia( $field ) ;
    $uploader->upload() ;
    $tmp_name = $uploader->getSavedFileName() ;
    myalbum_modify_photo( "$photos_dir/$tmp_name" , "$photos_dir/$newid-1.$ext" ) ;
    myalbum_create_thumb( "$photos_dir/$newid-1.$ext" , "$newid-1" , $ext ) ;
}
を挿入します。
このコードはどこからかコピーして来たのか、自分で本を片手に書きあげたのか…覚えていないのです。

とにかく、これで、サブ画像1がアップロードされます。
FTPで確認してみて下さい。
ファイル名は、メイン画像が
ID番号.拡張子
なのに対し、
ID番号-1.拡張子
となります。
myalbum_create_thumb関数で、サムネイルも作っちゃっています。

これを、サブ画像分だけマルチステートメントで書きました。
もちろん、1を2,3,4と変更しながらです。

でも、マルチステートメントなんて、冗長になるだけなので、ループ処理します。

for ($i=1;$i<10;$i++){
    $field = @$_POST['xoops_upload_file'][$i] ;
    if( @$_FILES[$field]['name'] != '' ) {
        // Sub photo is exist
        $tmp_name = $_FILES[$field]['name'] ;
        $uploader->fetchMedia( $field ) ;
        $uploader->upload() ;
        $tmp_name = $uploader->getSavedFileName() ;
        myalbum_modify_photo( "$photos_dir/$tmp_name" , "$photos_dir/$newid-$i.$ext" ) ;
        myalbum_create_thumb( "$photos_dir/$newid-$i.$ext" , "$newid-$i" , $ext ) ;
    }
}
これで、サブ1~サブ9までアップするみたいです。
表示部分(photo.php)は、後ほど調べてみますね。
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2013/1/26 0:47 | 最終変更
ノーザラント  管理人   投稿数: 422
表示関係は、PHPもいじりましたが、テンプレートもいじっていました。
よくもまぁ改造したもんだと自分でも思っていますが。

まず、テンプレートへ書き出すためのphoto.phoです。
52行目あたりに
$xoopsTpl->assign_by_ref( 'photo' , $photo ) ;
とあります。これで、写真をテンプレートへ書き出しているようです。

そこで、その下に、サブ画像を出力するスクリプトを書きました。
ただ、ファイルが存在する時だけ書き出すように、file_exists関数で存在チェックを行っています。
本来なら、データベースを用いて、サブ画像が何枚あるのか、登録しておけばいいのでしょうが、そこまでのスキルはありませんでした。

if (file_exists("$photos_dir/$lid-1." . $photo['ext'])) {
    $size = getimagesize("$photos_dir/$lid-1." . $photo['ext']) ;
    $photo1 = array( "url" => "$photos_url/$lid-1." . $photo['ext'] , "thum" => "$thumbs_url/$lid-1." . $photo['ext'] , "sx" => $size[0] , "sy" => $size[1] ) ;
} else {
    $photo1 = array( "url" => "" , "thum" => "" , "sx" => 0 , "sy" => 0 ) ;
}
$xoopsTpl->assign( 'photo1' , $photo1 ) ;

そして、これは、ループ処理で、処理させてみようとしたけど、うまくいかなかったので、マルチステートメントで、必要な分書きました。

サブ画像2はこうです。
if (file_exists("$photos_dir/$lid-2." . $photo['ext'])) {
    $size = getimagesize("$photos_dir/$lid-2." . $photo['ext']) ;
    $photo2 = array( "url" => "$photos_url/$lid-2." . $photo['ext'] , "thum" => "$thumbs_url/$lid-2." . $photo['ext'] , "sx" => $size[0] , "sy" => $size[1] ) ;
} else {
    $photo2 = array( "url" => "" , "thum" => "" , "sx" => 0 , "sy" => 0 ) ;
}
$xoopsTpl->assign( 'photo2' , $photo2 ) ;

以下、必要な分だけ作成。
テンプレートへは、photo1,photo2,…という配列で出力しています。

次に、テンプレートでそれを受け取るわけですが、myalbum_photo.htmlに手を加えます。
サブ画像を表示させたい所に
<{if $photo1.thum}>
  <a href="<{$photo1.url}>"><img src="<{$photo1.thum}>" border="1" /></a>
<{/if}>
とする事で、サブ画像を表示させました。

こんな、ぼろぼろのカッコ悪い手の加え方ですが、ヒントになれば幸いです。

ちなみに、その後、lightboxというJAVAスクリプトを使って、カッコよく表示させています。
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2013/1/26 10:14
yamanba 
詳しい説明をしてくださり大変よく理解できました。
こんなに改造しているとは思いませんでした。
私の力ではこれ程出来なかったと思います。
挑戦してみます。

お手数をお掛けして本当にありがとうございました。
全 6 件のうち 1 - 6 件目を表示しています。

このトピックに投稿する

題名
ゲスト名
メッセージアイコン
投稿本文 url  email  imgsrc  image  code  quote
サンプル
bold  italic  underline  linethrough    


ニッ にっこり シュン エッ!? ん? フフッ げらげら むぅ べー  [もっと...]
オプション

  条件検索へ