$(document).ready(function() {
$("#uploadify").uploadify({
'uploader' : '<!--{$TPL_DIR}-->js/uploadify/uploadify.swf',
'script' : '<!--{$TPL_DIR}-->js/uploadify/uploadify.php?rand_no=<!--{$rndNo}-->',
'cancelImg' : '<!--{$TPL_DIR}-->js/uploadify/cancel.png',
'folder' : '<!--{$smarty.const.IMAGE_TEMP_URL}-->',
'queueID' : 'fileQueue',
'auto' : false,
'buttonText' : 'Select Files...',
'multi' : true
});
});
<div>
<p style="margin:0">画像ファイルを選択して、Uploadしてください。</p>
<div></div>
<div style="float:right"><a href="fnModeSubmit('upload_image','image_key','sub_image'); tb_remove();">Close Window</a></p></div>
<p><a href="$('#uploadify').uploadifyUpload();">Upload Files</a> <a href="jQuery('#uploadify').uploadifyClearQueue()">Cancel All Uploads</a></p>
</div>
jQuery:Uploadify
jQueryPHPで複数ファイルのアップロードをなるべくスマートにやる方法はないかなぁと探し回ってたどり着いたのが、コレ。
自分的にはベストな解答です、たぶん。
詳しい使い方は「Ajax風にファイルをアップロードするjQueryプラグイン「Uploadify」の使い方」が超詳しいので、こちらを参照のこと。
以下は自分的にポイントとなったところ。
$(document).ready(function() {
$("#uploadify").uploadify({
'uploader' : '<!--{$TPL_DIR}-->js/uploadify/uploadify.swf',
'script' : '<!--{$TPL_DIR}-->js/uploadify/uploadify.php?rand_no=<!--{$rndNo}-->',
'cancelImg' : '<!--{$TPL_DIR}-->js/uploadify/cancel.png',
'folder' : '<!--{$smarty.const.IMAGE_TEMP_URL}-->',
'queueID' : 'fileQueue',
'auto' : false,
'buttonText' : 'Select Files...',
'multi' : true
});
});
<div>
<p style="margin:0">画像ファイルを選択して、Uploadしてください。</p>
<div></div>
<div style="float:right"><a href="fnModeSubmit('upload_image','image_key','sub_image'); tb_remove();">Close Window</a></p></div>
<p><a href="$('#uploadify').uploadifyUpload();">Upload Files</a> <a href="jQuery('#uploadify').uploadifyClearQueue()">Cancel All Uploads</a></p>
</div>
ちょっと見慣れない細工コードが入っているのは無視無視。たったこれだけでアップローダ定義完了。
<a href="#TB_inline?height=430&width=405&inlineId=upload&modal=true" title="Uploadify" class="thickbox">Uploadify</a>
こうすると本体のHTMLを汚さなくて済むからいいよね。で、Close Windowのとき、fnModeSubmit()といういままでアップロードボタンに割りつけていた関数を呼んでフックをかけると。
if (!empty($_FILES)) {
$tempFile = $_FILES['Filedata']['tmp_name'];
$targetPath = str_replace('//','/', $_SERVER['DOCUMENT_ROOT'] . $_REQUEST['folder'] . '/');
$targetFile = $targetPath . $_FILES['Filedata']['name'];
move_uploaded_file($tempFile,$targetFile);
$_FILES['Filedata']['tmp_name'] = $targetFile;
$fp = fopen($targetPath.$_REQUEST['rand_no'], "a");
fputs($fp, serialize($_FILES['Filedata'])."\n");
fclose($fp);
echo "1";
}
複数ファイルをまとめてアップロードすると、この PHPが回数分呼ばれることになる。
やってることは、渡されたファイルをフォルダに移して、なんのファイルを移したかファイルに記録しておくだけ。
このときのファイル名に例のランダム文字列を使ってる。
$no = 0;
$buf = @file(IMAGE_TEMP_DIR . $this->rndNo);
if ($buf) {
foreach ($buf as $e) {
$no++;
$key = "sub_image".$no;
$_FILES[$key] = unserialize($e);
$this->arrErr[$key] = $this->objUpFile->makeTempFile($key, IMAGE_RENAME);
}
@unlink(IMAGE_TEMP_DIR . $this->rndNo);
unset($_POST['rand_no']);
unset($this->rndNo);
}
EC-CUBEのコードにがっつり入り込んでいるのでわかりにくいけど、シリアライズされたファイルを読んで、アンシリアライズしたものを $_FILESにセットして、処理を継続しているだけ。終わったら、後始末しておく。
こんな感じで活用させていただいてます。ありがとう、Uploadify。
jQuery:Thickbox
jQueryいつもお世話になっている Thickboxですが、画像の拡大表示くらいしか使っていなかったんですけど、よんどころない事情でインライン表示を使うことになって、いまさらながらのポイントもわかり、きっとあとで見ると思うので、メモメモ。
こう「self.parent.tb_remove();」します。具体的には、こんな感じ。
<a href=”javascript:self.parent.tb_remove();”>Close Window</a>
これはまだ試してないけど、動かせなくて不便だなと常々思っていたので、そのうちやってみます。
jQuery UI Draggable を使えば簡単よ、ということらしい。
<a href="#TB_inline?height=xxx&width=xxx&inlineId=divID" class="thickbox">EXAMPLE</a>
<a href="#TB_inline?height=xxx&width=xxx&inlineId=divID&modal=true" class="thickbox">EXAMPLE</a>
<a href="http://url.com?keepThis=true&TB_iframe=true&height=xxx&width=xxx" title="xxx" class="thickbox">EXAMPLE</a>
<a href="http://url.com?placeValuesBeforeTB_=savedValues&TB_iframe=true&height=xxx&width=xxx&modal=true" title="xxx" class="thickbox">EXAMPLE</a>
keepThis や placeValuesBeforeTB_ はなくてもへっちゃらみたいです。
FAXテスト
Etc新しくFAXを買ったときや、FAXの設定を変えたときなんかに『ああー、誰か FAX送ってくれないかなぁ』と思ったこと、ありませんか?
ボクはたまに、そうですね、年に一度ほど、あります。
「FAX テスト」でググってみると、FAXのテストをしたいのですが無料で返信してくれるサービスは … とか、FAXを購入したのですが、受信のテストをしたいです。FAX番号を入力して … などの質問が上がっているのですが、回答は全然使えません。
いっそ自分で、『専用の受付メールアドレスに、送信先を書いたメールをくれたら、来たメールをそのままFAXへ送信するサービスをやろうか』と思ったくらい。でも自分でやると、自分のテストのとき使えないからやらないけど。
で、本題です。そういうときはどうすればいいか。オススメ順から。
0120-747-222(フリーダイヤル)に電話すると、空席・運賃案内を FAXで送ってくれます。
年に1回や2回は飛行機を使うときがあるでしょうから、そういうときは JALを使いましょう。JALは、いま大変なときなんだし。
ここの30日間無料トライアルを申し込むと、50ページまでの送信が無料です。
注意点として、自分で解約手続きをしないと31日目以降は自動的にサービス加入状態になって、月額1,500円とられます。あと、無料トライアルの申込みにクレジットカード番号を入力するのが、心理的に嫌かな。
以上、テストは計画的に。本来のサービス利用の主旨を外れないよう、節度をもって利用しましょう。
ググったこと(1)
Tipsシリーズものとして連載予定。
ググったものを淡々と記録していくよ。
ある程度の長さになるまで追記していくよ。
<a href="#LABEL">label text</a>
<a name="LABEL"></a>
http://colabv6.dan.co.jp/lleval.html・・・DAN小飼製eval(run script)
http://scriptsrc.net/で、クリック一発<script>をコピペ
Corner.js 2.0
クライアント証明書による認証がかかったサイトへのアクセス
Tipsあまりご縁がないので、あれ?どうすればいいんだっけと迷ってしまった。
こういうときは、すぐメモメモ。
クライアント証明書による認証がかかっているということは『クライアント証明書』が手元にあるということなので、まずはこれを確認。
手元には『Mdev-YYYYMMDD.pfx』というファイルがありました。中はバイナリでした。
これを Firefoxにぶち込みます。
ツール > オプション > 詳細 > 暗号化 > 証明書を表示 > あなたの証明書 > インポート で、パスワード(秘密キー)を聞かれますから、入力すれば、OKです。
簡単ですね。
EC-CUBE:決済モジュールの組込み
EC-CUBEEC-CUBEに決済モジュールを組み込むときの手順。
あまり公開しているサイトがないので、どうしてかなぁ?と思いつつ、もしかしたら守秘義務うんたらかんたらが関係あるかもしれないので、とりあえず、どこの会社の決済モジュール組込みかは特定しないで手順のみメモ。
# apt-get install php5-curl
# /etc/init.d/apache2 restart
ちゃんとログファイルにHTMLが書かれたので OKっぽい。(logディレクトリは、www-data:www-data にしておくか、777にしておかないと Permissionエラーになるよ)
eccube-2.4.4/data/downloads/module/mdl_○○ の下にPHP版モジュールをごっそりと。オナ―はwww-data:www-data にしておかないとたぶんダメ。
# e /etc/php5/apache2/php.ini
include_path = ".:/usr/share/php:/usr/share/pear:/home/www/eccube-2.4.4/data/downloads/module/mdl_○○"
# cd /home/www/eccube-2.4.4/data/downloads/module/mdl_○○
# e modenv_properties.php
○○B2Bmodule.client_file_path=/home/www/eccube-2.4.4/data/downloads/module/mdl_○○/client_mdev_20090123.pem
○○B2Bmodule.ca_file_path=/home/www/eccube-2.4.4/data/downloads/module/mdl_○○/curl-ca-bundle.crt
○○B2Bmodule.log_output_path=/home/www/eccube-2.4.4/data/downloads/module/mdl_○○/connectmodule.log
/home/www/eccube-2.4.4/html/shopping/load_payment_module.php
/home/www/eccube-2.4.4/html/mobile/shopping/load_payment_module.php
※ 以上は、トライ&エラーの経過を記録したもので、○○決済モジュールのインストールのアドバイスはできません。エラーがでたときは素直に決済会社のサポートに聞きましょう。