使用頻度の高いjQueryエフェクト 5選
使用頻度の高いjQueryエフェクトをφ(`д´)メモメモ...。
○ホバーアクションで画像の透明度を切り替える
透明度を0に設定すると、まるっきり画像が見えなくなります。
この画像の下に、もう一つ画像を重ねておくと、あら不思議…。
なんてのにも使えますね。
○ボタンクリックで隠れていたパネルがスライド開閉
○div要素に指定したidへのページ内リンク
offset().topをoffset().leftにしてscrollTopをscrollLeftにしたら、横にスライドするページも作れます。
ただ、これ系はやっぱりイベントをhoverやmouseoverではなくclickで実装したいな。。。
ダラダラと縦長のページを作っている皆様に実装していただきたいエフェクトです。
ランディングページ長すぎてカートボタンにたどり着けない!ってサイトを作っちゃってるアナタ。
みんながそれを読みたいと思っているわけではないので、こういうのを実装してあげてください。
自己満足のオ○ニーページはダメ、絶対!
○Div全体をクリックできるようにする
スマホサイトなんかは特に、ボックス、ブロック単位でリンクを付けてくれないと指が太くて誤リンク多し…アボーン(´・ェ・`)
なんてことにもなりかねないので、実装しておきたいところですよね。
○ツールチップ
○ホバーアクションで画像の透明度を切り替える
$(function(){
$("img.hover").hover(function () {
$(this).fadeTo("slow", 0.6); // マウスオーバーで透明度を60%にする
}, function () {
$(this).fadeTo("fast", 1.0); // マウスアウトで透明度を100%に戻す
});
});
例)
<img class="hover">
透明度を0に設定すると、まるっきり画像が見えなくなります。
この画像の下に、もう一つ画像を重ねておくと、あら不思議…。
なんてのにも使えますね。
○ボタンクリックで隠れていたパネルがスライド開閉
$(function(){
$(".btn").click(function(){
$("#slide").slideToggle("slow");
});
});
例)
<p class="btn">ボタン</p>
<div id="slide" style="display:none;"></div>
○div要素に指定したidへのページ内リンク
$(function(){
$("a[href^=#]").click(function(){
var Hash = $(this.hash);
var HashOffset = $(Hash).offset().top;
$("html,body").animate({
scrollTop: HashOffset
}, 1000);
return false;
});
});
例)
<div id="top"></div>
・
・
・
・
<a href="#top">▲[id="top"へ]▲
ちなみに、本家jQueryのプラグイン「PAGESCROLL」のコードはこれ。
アニメーションのカスタマイズもオッケーみたい。
$('a[href^="#"]').pageScroll({
offset: 100,
speed: 1400,
easing: 'easeInOutExpo',
event: 'mouseover',
onScrollStart: function(el) {
$('#scroll-indicator').fadeIn('fast');
$('h1').css('color', '#556');
$(el.attr('href')).css('color', 'royalblue');
},
onScrollFinish: function(el) {
$('#scroll-indicator').fadeOut('fast');
}
});
例)
<a href="#about">about us</a>
<h1 id="about">About us</h1>
offset().topをoffset().leftにしてscrollTopをscrollLeftにしたら、横にスライドするページも作れます。
ただ、これ系はやっぱりイベントをhoverやmouseoverではなくclickで実装したいな。。。
ダラダラと縦長のページを作っている皆様に実装していただきたいエフェクトです。
ランディングページ長すぎてカートボタンにたどり着けない!ってサイトを作っちゃってるアナタ。
みんながそれを読みたいと思っているわけではないので、こういうのを実装してあげてください。
自己満足のオ○ニーページはダメ、絶対!
○Div全体をクリックできるようにする
$(function(){
$(".linkbox").click(function(){
window.location=$(this).find("a").attr("href");
return false;
});
});
例)
<div class="linkbox">
<a href="#">
</div>
スマホサイトなんかは特に、ボックス、ブロック単位でリンクを付けてくれないと指が太くて誤リンク多し…アボーン(´・ェ・`)
なんてことにもなりかねないので、実装しておきたいところですよね。
○ツールチップ
$(function(){
$(".tooltip a").hover(function() {
$(this).next("span").animate({opacity: "show"}, "slow");},
function() {
$(this).next("span").animate({opacity: "hide"}, "fast");
}
);
});
例)
<div class="tooltip">
<a href="#">りんく</a>
<span style="display:none;">ホバーでここが表示される</span>
</div>
jQueryを使うときは、自サーバーにうpしたほうがいい。。。
いきなり、何の前触れも無く作成したページが動かなくなった。
で、調べてみたらGoogleCodeにうpされていたjQueryのバージョンが変わっていて、それで動かなくなったらしい。
というわけで…。
jQueryとかは、きちんとダウンロードして自サーバーにうpしておいたほうが無難。
びっくりしますた。
で、調べてみたらGoogleCodeにうpされていたjQueryのバージョンが変わっていて、それで動かなくなったらしい。
というわけで…。
jQueryとかは、きちんとダウンロードして自サーバーにうpしておいたほうが無難。
びっくりしますた。
DIV要素(他)をCSSのみでアニメーションさせる方法。
ホバーアニメーションも、CSS3ならこんなに簡単。
.hoverBox{
border: 1px solid #ccc; /* 境界線の指定 */
/* 以下がホバーアニメーション設定 */
-webkit-transition: .3s ease-in-out; /* Safari & Chrome. */
-moz-transition: .3s ease-in-out; /* Firefox */
-o-transition: .3s ease-in-out; /* Opera */
}
div:hover{
margin-top: -1em; /* 上部のマージンを指定 */
background: #ccc; /* 背景色を指定 */
}
たったこれだけの設定で、「位置」「色」をイージング処理してくれます。
JavaScriptいらず。
うーん、凄い…。
Flash5でMCに外部画像を読み込むためのASコード
いやぁ…FLASH関係のメモを書く事になるとは。
ASが2.0から3.0に変更になって、かなり中身が変わってしまたので、結局一から勉強し直しです。
ステージ上に置いたMCに外部画像を読み込んで、フェードイン表示させるコードをコードスニペットに登録。
これをしておかないと、FLASHで( ´Д`)なにか?を作るのが大変で大変で…。
AS3.0になってから、一番理解に苦しんだのがイベントリスナーの解除。
とくに「Event.ENTER_FRAME」の時は、フレームが進む度に実行されるので、使ったら解除しておかないといけないみたいです。
ASが2.0から3.0に変更になって、かなり中身が変わってしまたので、結局一から勉強し直しです。
ステージ上に置いたMCに外部画像を読み込んで、フェードイン表示させるコードをコードスニペットに登録。
これをしておかないと、FLASHで( ´Д`)なにか?を作るのが大変で大変で…。
/*
MCに外部イメージをロードして、フェードイン
複数使用する場合には関数名「ImageLoad」が重複しないように気を付けます。
初期登録のやつは「_2」「_3」…って感じで増えていくんだけど、
あれってどういう設定をするんだろう?
*/
instance_name_here.addEventListener(Event.ENTER_FRAME, ImageLoad);
function ImageLoad(event:Event){
var loader:Loader = new Loader();
instance_name_here.addChild(loader);
loader.load(new URLRequest("img/001.jpg"));//画像URL
//アルファ値の初期値を設定
instance_name_here.alpha = 0.1;//0.1=10%,1=100%
//イベントリスナーを解除
instance_name_here.removeEventListener( Event.ENTER_FRAME, ImageLoad );
}
/* ムービークリップをフェードイン
ENTER_FRAME イベントが発生するたびに alpha プロパティを増やして、
シンボルインスタンスが完全に表示されるまでフェードインします。
複数使用する場合には関数名「imageFadein」が重複しないように気を付けます。
*/
instance_name_here.addEventListener(Event.ENTER_FRAME, imageFadein);
function imageFadein(event:Event){
instance_name_here.alpha += 0.1;//10%ずつ増やす
if(instance_name_here.alpha >= 1){
//アルファ値が1以上になったら、イベントリスナーを解除
instance_name_here.removeEventListener(Event.ENTER_FRAME, imageFadein);
//または、自分自身を削除
//instance_name_here.removeEventListener( Event.ENTER_FRAME, arguments.callee );
}
}
AS3.0になってから、一番理解に苦しんだのがイベントリスナーの解除。
とくに「Event.ENTER_FRAME」の時は、フレームが進む度に実行されるので、使ったら解除しておかないといけないみたいです。
SSHアクセスのip制限
TCP wrappersを利用してSSHにログインできるIPを制限する。
SSHだけでなく、FTPとか他のプロセスも設定可能。
/etc/hosts.deny (拒否するアドレス設定)
/etc/hosts.allow (許可するアドレス設定)
設定はipアドレスの他、ホスト名も設定できる。
基本的な流れとしては
hosts.denyで全て拒否
▼
hosts.allowに書かれたアドレスを許可
という流れになるので、
hosts.denyに
こんなふうに記述。
これで、sshdとdovecotがアクセス拒否設定になる。
もちろん、そのままだと何もできなくなるので許可設定を行います。
hosts.allowに
こんな感じで記述すると、「210.180.*.*」というipアドレスや「*.example.ne.jp」というホストからのsshdへのアクセスが許可されます。
webminで設定する場合には
[ネットワーク]->[TCP Wrappers]で設定可能。
SSHだけでなく、FTPとか他のプロセスも設定可能。
/etc/hosts.deny (拒否するアドレス設定)
/etc/hosts.allow (許可するアドレス設定)
設定はipアドレスの他、ホスト名も設定できる。
基本的な流れとしては
hosts.denyで全て拒否
▼
hosts.allowに書かれたアドレスを許可
という流れになるので、
hosts.denyに
sshd : all
dovecot : all
こんなふうに記述。
これで、sshdとdovecotがアクセス拒否設定になる。
もちろん、そのままだと何もできなくなるので許可設定を行います。
hosts.allowに
sshd : 210.180.
sshd : .example.ne.jp
こんな感じで記述すると、「210.180.*.*」というipアドレスや「*.example.ne.jp」というホストからのsshdへのアクセスが許可されます。
webminで設定する場合には
[ネットワーク]->[TCP Wrappers]で設定可能。
CSVデータをダウンロードさせる
CSVをダウンロードさせようとしたら、一番簡単なのはどの方法か。
悩みに悩んで、結局MIMEタイプの設定を
application/zip csv
にしたほうがいいということに。
next-engine用のCSV書き出し プログラム(EC-CUBE2.11)
next-engine用のCSV書き出しで、複数配送に対応させる作業ですが、ちょっと急ぎでやらなきゃならないってことで…。
ベタ書きしてやった(^Д^)
まあ、中身を見る人もいないのでいいかな…と。
Smartyのお勉強をしている暇もないのでしかたなく…。
まあ、どのデータがどの部分に入っているのかを理解するために時間を使ったと思えば…。
時間のある時にでもEC-CUBEのクラスファイルとかSQLとかと組み合わせてもっと簡単にできるようにしようと思います。
プログラマなのに肉体労働。
今回の記事は、上から「その1」「その2」「その3」と順番に見ていけるように「その3」から登録してあります。
とりあえず、処理はこんな感じ。
タイミングは、注文の最終確認のタイミングにするということで、「/html/shopping/confirm.php」に直接記述。
これで、next-engineの店舗設定にある「新楽天市場標準パターン」のデータが作成できます。
==========▼新楽天市場標準パターンCSVデータ▼
"受注番号","レコードナンバー","注文日","注文時間","商品名","商品番号","個数","単価","項目・選択肢","注文者名字","注文者名前","注文者名字フリガナ","注文者名前フリガナ","メールアドレス","注文者郵便番号1","注文者郵便番号2","注文者住所:都道府県","注文者住所:都市区","注文者住所:町以降","注文者電話番号1","注文者電話番号2","注文者電話番号3","注文者性別","注文者誕生日","送付先名字","送付先名前","送付先名字フリガナ","送付先名前フリガナ","送付先郵便番号1","送付先郵便番号2","送付先住所:都道府県","送付先住所:都市区","送付先住所:町以降","送付先電話番号1","送付先電話番号2","送付先電話番号3","のし","決済方法","クレジットカード種類","クレジットカード番号","クレジットカード名義人","クレジットカード有効期限","クレジットカード分割選択","クレジットカード分割備考","配送方法","コメント","ラッピング種類(包装紙)","ラッピング種類(リボン)","ラッピング料金(包装紙)","ラッピング料金(リボン)","ギフトチェック(0:なし/1:あり)","合計","送料(-99999=無効値)","消費税(-99999=無効値)","代引料(-99999=無効値)","請求金額(-99999=無効値)","利用端末","ポイント利用有無","ポイント利用条件","ポイント利用額","ポイントステータス","合計金額(-99999=無効値)","楽天バンク決済手数料","ひとことメモ"
========================================
とりあえず、$_SESSION['csv_data']に保存されるので、あとから
「unserialize( $dat["session"] )→$dat['session']['csv_data']」
で取り出せばおk。
つか、よくよく考えてみたら後々DBからデータとってこなきゃいけないんだから、注文者情報とか共通項目はその時に生成すりゃよかった。
今頃気づいても、書き直す気力が…
今回は「confirm.php」にベタ書きですが
$objPage->arrShipping
$objPage->arrForm
$objPage->arrCartItems
の3つの配列データをSESSIONに登録しておけば、後からいくらでもCSVを生成出来るので
$_SESSION['csv_data'] = serialize( $objPage->arrShipping ) . serialize( $objPage->arrForm ) . serialize( $objPage->arrCartItems );
って感じでDBに登録だけをしておく方がいいかもです。
追記。
$shipping_data[] = ( $shippings["shipping_addr02"] !=="" || $shippings["shipping_addr02"] !==null ) ? $shippings["shipping_addr02"] : $objPage->arrForm["order_addr02"];
この処理は、たまに配列にデータが入ってこないのでそんな時には強制的に購入者のデータを入れるようにしているんですが、よくよく調べてみたら注文完了時にSESSIONの「order_id」をリセットしないと何回も注文を繰り返したときこういう症状がでるとのこと。
data/class/pages/shopping/LC_Page_Shopping_Complete.phpに
赤文字部分を追記していかないといけないみたいです。
ベタ書きしてやった(^Д^)
まあ、中身を見る人もいないのでいいかな…と。
Smartyのお勉強をしている暇もないのでしかたなく…。
まあ、どのデータがどの部分に入っているのかを理解するために時間を使ったと思えば…。
時間のある時にでもEC-CUBEのクラスファイルとかSQLとかと組み合わせてもっと簡単にできるようにしようと思います。
プログラマなのに肉体労働。
今回の記事は、上から「その1」「その2」「その3」と順番に見ていけるように「その3」から登録してあります。
とりあえず、処理はこんな感じ。
タイミングは、注文の最終確認のタイミングにするということで、「/html/shopping/confirm.php」に直接記述。
-----------------------------------------------------------------------
/*--------------------------------------------------------------------------
■■ここから、楽天用のCSVを作成してSESSIONに登録する■■
----------------------------------------------------------------------------*/
//■都道府県コードを定義
$pref = array('1'=>'北海道','2'=>'青森県','3'=>'岩手県','4'=>'宮城県','5'=>'秋田県','6'=>'山形県',
'7'=>'福島県','8'=>'茨城県','9'=>'栃木県','10'=>'群馬県','11'=>'埼玉県','12'=>'千葉県','13'=>'東京都','14'=>'神奈川県',
'15'=>'新潟県','16'=>'富山県','17'=>'石川県','18'=>'福井県',
'19'=>'山梨県','20'=>'長野県','21'=>'岐阜県','22'=>'静岡県',
'23'=>'愛知県','24'=>'三重県','25'=>'滋賀県','26'=>'京都府','27'=>'大阪府','28'=>'兵庫県','29'=>'奈良県','30'=>'和歌山県',
'31'=>'鳥取県','32'=>'島根県','33'=>'岡山県','34'=>'広島県','35'=>'山口県',
'36'=>'徳島県','37'=>'香川県','38'=>'愛媛県','39'=>'高知県',
'40'=>'福岡県','41'=>'佐賀県','42'=>'長崎県','43'=>'熊本県','44'=>'大分県','45'=>'宮崎県','46'=>'鹿児島県','47'=>'沖縄県'
);
//■EC-CUBEでDB登録用に作成した$_SESSIONを配列にする
$order_session = $objPage->arrForm['session'];
$orders = unserialize( $order_session );
//■受注データにダブルクォートを追加する関数(ついでに、文字列にカンマがあったら、ハイフンに変更)
function wquote(&$arr){
foreach($arr as $val){
$val = str_replace(",","-",$val);
$data[] = "\"" . $val . "\"";
}
return ($data);
}
//■受注番号、レコードナンバーは、後から(CSVダウンロード時)データベース操作で生成する
//データ初期化処理
$shipping_data = "";
$payment = "";
$order_date = "";
$order_customer = "";
//★注文日、注文時間の作成
$order_date2 = explode(" ",$objPage->arrForm["create_date"]);
$order_date = implode(",",wquote($order_date2));
//★注文者情報を入れる
$pref_code = $objPage->arrForm["order_pref"];
$order_customer[] = $objPage->arrForm["order_name01"];
$order_customer[] = $objPage->arrForm["order_name02"];
$order_customer[] = $objPage->arrForm["order_kana01"];
$order_customer[] = $objPage->arrForm["order_kana02"];
$order_customer[] = $objPage->arrForm["order_email"];
$order_customer[] = $objPage->arrForm["order_zip01"];
$order_customer[] = $objPage->arrForm["order_zip02"];
$order_customer[] = $pref[$pref_code];
$order_customer[] = $objPage->arrForm["order_addr01"];
$order_customer[] = $objPage->arrForm["order_addr02"];
$order_customer[] = $objPage->arrForm["order_tel01"];
$order_customer[] = $objPage->arrForm["order_tel02"];
$order_customer[] = $objPage->arrForm["order_tel03"];
$order_customer[] = $objPage->arrForm["order_sex"];
$order_customer[] = $objPage->arrForm["order_birth"];
$order_customer = implode(",",wquote($order_customer));
//★受注データを作成する。
//=====================▼====================================単独配送の場合の処理
if ( count($objPage->arrShipping) < 2 ){
//■商品分のループ
foreach($objPage->arrCartItems as $val){
//ループするので、$shipping_dataを初期化
$shipping_data = "";
$payment = "";
$product = "";
//★商品名
$product[] = $val["productsClass"]["name"];
//★商品コード
$product[] = $val["productsClass"]["product_code"];
//★個数
$product[] = $val["quantity"];
//★単価
$product[] = $val["productsClass"]["price02"];
//★項目・選択肢
$product[] = " ";
$product = implode(",",wquote($product));
//★配送先情報
$shipping_data[] = ( $objPage->arrShipping[0]["shipping_name01"] !== "" || $objPage->arrShipping[0]["shipping_name01"] !== Null) ? $objPage->arrShipping[0]["shipping_name01"]:$objPage->arrForm["order_name01"];
$shipping_data[] = ( $objPage->arrShipping[0]["shipping_name02"] !== "" || $objPage->arrShipping[0]["shipping_name02"] !== Null ) ? $objPage->arrShipping[0]["shipping_name02"]:$objPage->arrForm["order_name02"];
$shipping_data[] = ( $objPage->arrShipping[0]["shipping_kana01"] !== "" || $objPage->arrShipping[0]["shipping_kana01"] !== Null ) ? $objPage->arrShipping[0]["shipping_kana01"]:$objPage->arrForm["order_kana01"];
$shipping_data[] = ( $objPage->arrShipping[0]["shipping_kana02"] !== "" || $objPage->arrShipping[0]["shipping_kana02"] !== Null ) ? $objPage->arrShipping[0]["shipping_kana02"]:$objPage->arrForm["order_kana02"];
$shipping_data[] = ( $objPage->arrShipping[0]["shipping_zip01"] !== "" || $objPage->arrShipping[0]["shipping_zip01"] !== Null )?$objPage->arrShipping[0]["shipping_zip01"]:$objPage->arrForm["order_zip01"];
$shipping_data[] = ( $objPage->arrShipping[0]["shipping_zip02"] !== "" ||$objPage->arrShipping[0]["shipping_zip02"] !== Null )?$objPage->arrShipping[0]["shipping_zip02"]:$objPage->arrForm["order_zip02"];
$shipping_pref = ( $objPage->arrShipping[0]["shipping_pref"] !== "" || $objPage->arrShipping[0]["shipping_pref"] !== Null )? $objPage->arrShipping[0]["shipping_pref"]:$objPage->arrForm["order_pref"];
$shipping_data[] = $pref[$shipping_pref];
$shipping_data[] = ( $objPage->arrShipping[0]["shipping_addr01"] !== "" || $objPage->arrShipping[0]["shipping_addr01"] !== Null )? $objPage->arrShipping[0]["shipping_addr01"]:$objPage->arrForm["order_addr01"];
$shipping_data[] = ( $objPage->arrShipping[0]["shipping_addr02"] !== "" || $objPage->arrShipping[0]["shipping_addr02"] !== Null )? $objPage->arrShipping[0]["shipping_addr02"]:$objPage->arrForm["order_addr02"];
$shipping_data[] = ( $objPage->arrShipping[0]["shipping_tel01"] !== "" || $objPage->arrShipping[0]["shipping_tel01"] !== Null )? $objPage->arrShipping[0]["shipping_tel01"]:$objPage->arrForm["order_tel01"];
$shipping_data[] = ( $objPage->arrShipping[0]["shipping_tel02"] !== "" || $objPage->arrShipping[0]["shipping_tel02"] !== Null )? $objPage->arrShipping[0]["shipping_tel02"]:$objPage->arrForm["order_tel02"];
$shipping_data[] = ( $objPage->arrShipping[0]["shipping_tel03"] !== "" || $objPage->arrShipping[0]["shipping_tel03"] !== Null )? $objPage->arrShipping[0]["shipping_tel03"]:$objPage->arrForm["order_tel03"];
$shipping_data[] = " ";
$shipping_data = implode(",",wquote($shipping_data));
//★配送&支払い方法
$payment[] = $objPage->arrForm["payment_method"];
$payment[] = " ";
$payment[] = "(非表示)";
$payment[] = "(非表示)";
$payment[] = "(非表示)";
$payment[] = "0";
$payment[] = " ";
//メール便か通常便か
$deliv = ( $orders["flg"]["normal"] <> 0 ) ? "宅配便" : "メール便";
$payment[] = $deliv;
//★配送日設定
if($objPage->arrShipping[0]["shipping_date"] != "" or $objPage->arrShipping[0]["shipping_date"] != Null){$deliv_date = str_replace("/","-",$objPage->arrShipping[0]["shipping_date"]);}
else {$deliv_date = "指定なし";}
//★配送時間設定
if($objPage->arrShipping[0]["shipping_time"] != "" or $objPage->arrShipping[0]["shipping_time"] != Null){$deliv_time = $objPage->arrShipping[0]["shipping_time"];}
else {$deliv_time = "指定なし";}
$payment[] = "[配送日時指定:]\n" . $deliv_date . "\n" . $deliv_time . "\n" . "\n[備考欄:]\n" . $objPage->arrForm["message"];
//ラッピング関係
$payment[] = " ";
$payment[] = " ";
$payment[] = "0";
$payment[] = "0";
$payment[] = "0";
$payment[] = $objPage->arrForm["subtotal"];
$payment[] = $objPage->arrForm["deliv_fee"];
$payment[] = $objPage->arrForm["tax"];
$payment[] = $objPage->arrForm["charge"];
$payment[] = $objPage->arrForm["total"];
$payment[] = "0";
//★ポイント利用の有無
if ($objPage->arrForm["use_point"] <> 0){
$payment[] = "1";
$payment[] = "1";
$payment[] = $objPage->arrForm["use_point"];
$payment[] = "1";
}
else {
$payment[] = "0";
$payment[] = " ";
$payment[] = " ";
$payment[] = "0";
}
$payment[] = $objPage->arrForm["payment_total"];
$payment[] = "0";
$payment[] = " ";
$payment = implode(",",wquote($payment)) . "\r\n";
//■全データをCSV形式で配列に
$items[] = "," . $order_date . "," . $product . "," . $order_customer . "," . $shipping_data . "," . $payment;
}//foreach(商品分のループ)
}//if
//=====================▲===================================単独配送の場合の処理
//=====================▼====================================複数配送の場合の処理
else{
//配送先分繰り返す
foreach($objPage->arrShipping as $shippings){
//ループするので、$shipping_dataを初期化
$shipping_data = "";
$payment = "";
//★配送先情報
$shipping_data[] = ( $shippings["shipping_name01"] !=="" || $shippings["shipping_name01"] !==Null ) ? $shippings["shipping_name01"] : $objPage->arrForm["order_name01"];
$shipping_data[] = ( $shippings["shipping_name02"] !=="" || $shippings["shipping_name02"] !==Null ) ? $shippings["shipping_name02"] : $objPage->arrForm["order_name02"];
$shipping_data[] = ( $shippings["shipping_kana01"] !=="" || $shippings["shipping_kana01"] !=null ) ? $shippings["shipping_kana01"] : $objPage->arrForm["order_kana01"];
$shipping_data[] = ( $shippings["shipping_kana02"] !=="" || $shippings["shipping_kana02"] !==null ) ? $shippings["shipping_kana02"] : $objPage->arrForm["order_kana02"];
$shipping_data[] = ( $shippings["shipping_zip01"] !=="" || $shippings["shipping_zip01"] !==null ) ? $shippings["shipping_zip01"] : $objPage->arrForm["order_zip01"];
$shipping_data[] = ( $shippings["shipping_zip02"] !=="" || $shippings["shipping_zip01"] !==null ) ? $shippings["shipping_zip02"] : $objPage->arrForm["order_zip02"];
$shipping_pref = ( $shippings["shipping_pref"] !=="" || $shippings["shipping_pref"] !==null) ? $shippings["shipping_pref"] : $objPage->arrForm["order_pref"];
$shipping_data[] = $pref[$shipping_pref];
$shipping_data[] = ( $shippings["shipping_addr01"] !=="" || $shippings["shipping_addr01"] !==null) ? $shippings["shipping_addr01"] : $objPage->arrForm["order_addr01"];
$shipping_data[] = ( $shippings["shipping_addr02"] !=="" || $shippings["shipping_addr02"] !==null ) ? $shippings["shipping_addr02"] : $objPage->arrForm["order_addr02"];
$shipping_data[] = ( $shippings["shipping_tel01"] !=="" || $shippings["shipping_tel01"] !==null) ? $shippings["shipping_tel01"] : $objPage->arrForm["order_tel01"];
$shipping_data[] = ( $shippings["shipping_tel02"] !=="" || $shippings["shipping_tel02"] !==null ) ? $shippings["shipping_tel02"] : $objPage->arrForm["order_tel02"];
$shipping_data[] = ( $shippings["shipping_tel03"] !=="" || $shippings["shipping_tel03"] !==null ) ? $shippings["shipping_tel03"] : $objPage->arrForm["order_tel03"];
$shipping_data[] = " ";
$shipping_data = implode(",",wquote($shipping_data));
//★配送&支払い方法
//★配送&支払い方法
$payment[] = $objPage->arrForm["payment_method"];
$payment[] = " ";
$payment[] = "(非表示)";
$payment[] = "(非表示)";
$payment[] = "(非表示)";
$payment[] = "0";
$payment[] = " ";
//メール便か通常便か
$deliv = ( $orders["flg"]["normal"] <> 0 ) ? "宅配便" : "メール便";
$payment[] = $deliv;
//★配送日設定
if($shippings["shipping_date"] != "" or $shippings["shipping_date"] != Null){$deliv_date = str_replace("/","-",$shippings["shipping_date"]);}
else {$deliv_date = "指定なし";}
//★配送時間設定
if($shippings["shipping_time"] != "" or $shippings["shipping_time"] != Null){$deliv_time = $shippings["shipping_time"];}
else {$deliv_time = "指定なし";}
$payment[] = "[配送日時指定:]\n" . $deliv_date . "\n" . $deliv_time . "\n" . "\n[備考欄:]\n" . $objPage->arrForm["message"];
//ラッピング関係
$payment[] = " ";
$payment[] = " ";
$payment[] = "0";
$payment[] = "0";
$payment[] = "0";
$payment[] = $objPage->arrForm["subtotal"];
$payment[] = $objPage->arrForm["deliv_fee"];
$payment[] = $objPage->arrForm["tax"];
$payment[] = $objPage->arrForm["charge"];
$payment[] = $objPage->arrForm["total"];
$payment[] = "0";
//★ポイント利用の有無
if ($objPage->arrForm["use_point"] <> 0){
$payment[] = "1";
$payment[] = "1";
$payment[] = $objPage->arrForm["use_point"];
$payment[] = "1";
}
else {
$payment[] = "0";
$payment[] = " ";
$payment[] = " ";
$payment[] = "0";
}
$payment[] = $objPage->arrForm["payment_total"];
$payment[] = "0";
$payment[] = " ";
$payment = implode(",",wquote($payment)) . "\r\n";
//■商品分の繰り返し
foreach($shippings["shipment_item"] as $val){
$product = "";
//★商品名
$product[] = $val["productsClass"]["name"];
//★商品コード
$product[] = $val["productsClass"]["product_code"];
//★個数
$product[] = $val["quantity"];
//★単価
$product[] = $val["productsClass"]["price02"];
//★項目・選択肢
$product[] = " ";
$product = implode(",",wquote($product));
//■全データをCSV状態で配列に
$items[] = "," . $order_date . "," . $product . "," . $order_customer . "," . $shipping_data . "," . $payment;
}//foreach(商品分の繰り返し)
}//foreach(配送先分の繰り返し)
}//else
//=====================▲===================================複数配送の場合の処理
/*■ここまでのデータをSESSIONに保存。
取り出す時には unserialize( $dat["session"] ); $dat['session']['csv_data'];でどうぞ。*/
$_SESSION['csv_data'] = $items;
-----------------------------------------------------------------------
これで、next-engineの店舗設定にある「新楽天市場標準パターン」のデータが作成できます。
==========▼新楽天市場標準パターンCSVデータ▼
"受注番号","レコードナンバー","注文日","注文時間","商品名","商品番号","個数","単価","項目・選択肢","注文者名字","注文者名前","注文者名字フリガナ","注文者名前フリガナ","メールアドレス","注文者郵便番号1","注文者郵便番号2","注文者住所:都道府県","注文者住所:都市区","注文者住所:町以降","注文者電話番号1","注文者電話番号2","注文者電話番号3","注文者性別","注文者誕生日","送付先名字","送付先名前","送付先名字フリガナ","送付先名前フリガナ","送付先郵便番号1","送付先郵便番号2","送付先住所:都道府県","送付先住所:都市区","送付先住所:町以降","送付先電話番号1","送付先電話番号2","送付先電話番号3","のし","決済方法","クレジットカード種類","クレジットカード番号","クレジットカード名義人","クレジットカード有効期限","クレジットカード分割選択","クレジットカード分割備考","配送方法","コメント","ラッピング種類(包装紙)","ラッピング種類(リボン)","ラッピング料金(包装紙)","ラッピング料金(リボン)","ギフトチェック(0:なし/1:あり)","合計","送料(-99999=無効値)","消費税(-99999=無効値)","代引料(-99999=無効値)","請求金額(-99999=無効値)","利用端末","ポイント利用有無","ポイント利用条件","ポイント利用額","ポイントステータス","合計金額(-99999=無効値)","楽天バンク決済手数料","ひとことメモ"
========================================
とりあえず、$_SESSION['csv_data']に保存されるので、あとから
「unserialize( $dat["session"] )→$dat['session']['csv_data']」
で取り出せばおk。
つか、よくよく考えてみたら後々DBからデータとってこなきゃいけないんだから、注文者情報とか共通項目はその時に生成すりゃよかった。
今頃気づいても、書き直す気力が…
今回は「confirm.php」にベタ書きですが
$objPage->arrShipping
$objPage->arrForm
$objPage->arrCartItems
の3つの配列データをSESSIONに登録しておけば、後からいくらでもCSVを生成出来るので
$_SESSION['csv_data'] = serialize( $objPage->arrShipping ) . serialize( $objPage->arrForm ) . serialize( $objPage->arrCartItems );
って感じでDBに登録だけをしておく方がいいかもです。
追記。
$shipping_data[] = ( $shippings["shipping_addr02"] !=="" || $shippings["shipping_addr02"] !==null ) ? $shippings["shipping_addr02"] : $objPage->arrForm["order_addr02"];
この処理は、たまに配列にデータが入ってこないのでそんな時には強制的に購入者のデータを入れるようにしているんですが、よくよく調べてみたら注文完了時にSESSIONの「order_id」をリセットしないと何回も注文を繰り返したときこういう症状がでるとのこと。
data/class/pages/shopping/LC_Page_Shopping_Complete.phpに
function action() {
$this->arrInfo = SC_Helper_DB_Ex::sfGetBasisData();
unset($_SESSION["order_id"]);
}
赤文字部分を追記していかないといけないみたいです。
next-engine用のCSV書き出しプログラム(EC-CUBE2.11) その2
登録したデータをDBから取ってきて、CSVにする方もやっておかないといけないので。
いやぁ…こっちもベタ書きです。
取ってくるSQLはこんな感じで。
statusの「1」と「6」は、それぞれ「新規受付」と「入金済み」です。
要するに、新しい注文だけをCSVにしたい、と。
後は、取ってきたデータをこんな感じでCSVにしちゃいます。
これで、CSVファイルが作れます。
後は、ダイアログを出すなりなんなりして、データをダウンロードさせて、next-engineでうp。
ほんとはメール受注のシステムの方でなんとかしたかったんだけど、意味不明なエラーを吐くのでやめました。
まあ、CSV書き出しにしておけばnext-engineじゃないツールにも対応できるので、よしとしておこう。
いやぁ…こっちもベタ書きです。
取ってくるSQLはこんな感じで。
select
`dtb_order`.`order_id` AS `order_id`,
`dtb_order`.`order_temp_id` AS `order_temp_id`,
`dtb_order_temp`.`session` AS `session`
from
(`dtb_order` join `dtb_order_temp`)
where
((`dtb_order`.`del_flg` = 0) and
(`dtb_order`.`order_temp_id` = `dtb_order_temp`.`order_temp_id`) and
((`dtb_order`.`status` = 1) or (`dtb_order`.`status` = 6)))
statusの「1」と「6」は、それぞれ「新規受付」と「入金済み」です。
要するに、新しい注文だけをCSVにしたい、と。
後は、取ってきたデータをこんな感じでCSVにしちゃいます。
$data = mysql_query($sql,$link) or die("データ読み出し失敗");
while( $dat = mysql_fetch_array($data,MYSQL_ASSOC) ){
$dat['session'] = unserialize( $dat["session"] );
$list[] = $dat;
}
foreach ($list as $val){
$id = $val['order_id'];
foreach($val['session']['csv_data'] as $value){
//レコードナンバーがよくわからんので、受注番号と同じにした。
$order_data[] = $id . "," . $id . $value;
}
}
$outputFile = "temp.csv";
touch($outputFile);
chmod($outputFile, 0777);
$fp = fopen($outputFile, 'w');
//最初に、項目行を出力
$eachs = '"受注番号","レコードナンバー","注文日","注文時間","商品名","商品番号","個数","単価","項目・選択肢","注文者名字","注文者名前","注文者名字フリガナ","注文者名前フリガナ","メールアドレス","注文者郵便番号1","注文者郵便番号2","注文者住所:都道府県","注文者住所:都市区","注文者住所:町以降","注文者電話番号1","注文者電話番号2","注文者電話番号3","注文者性別","注文者誕生日","送付先名字","送付先名前","送付先名字フリガナ","送付先名前フリガナ","送付先郵便番号1","送付先郵便番号2","送付先住所:都道府県","送付先住所:都市区","送付先住所:町以降","送付先電話番号1","送付先電話番号2","送付先電話番号3","のし","決済方法","クレジットカード種類","クレジットカード番号","クレジットカード名義人","クレジットカード有効期限","クレジットカード分割選択","クレジットカード分割備考","配送方法","コメント","ラッピング種類(包装紙)","ラッピング種類(リボン)","ラッピング料金(包装紙)","ラッピング料金(リボン)","ギフトチェック(0:なし/1:あり)","合計","送料(-99999=無効値)","消費税(-99999=無効値)","代引料(-99999=無効値)","請求金額(-99999=無効値)","利用端末","ポイント利用有無","ポイント利用条件","ポイント利用額","ポイントステータス","合計金額(-99999=無効値)","楽天バンク決済手数料","ひとことメモ"' . "\r\n";
fputs ( $fp, $eachs );
foreach ($order_data as $fields) {
$fields = mb_convert_encoding($fields, "SJIS", "auto");
fputs ( $fp, $fields );
}
fclose($fp);
これで、CSVファイルが作れます。
後は、ダイアログを出すなりなんなりして、データをダウンロードさせて、next-engineでうp。
ほんとはメール受注のシステムの方でなんとかしたかったんだけど、意味不明なエラーを吐くのでやめました。
まあ、CSV書き出しにしておけばnext-engineじゃないツールにも対応できるので、よしとしておこう。