φ(..)メモとして残しておこう… -20ページ目

秀逸認定。

今月から、EC-CUBEのインテグレートパートナーに登録を。

で、さっそく

EC-CUBEインテグレートパートナー 保有ポイント一覧

なるものを見てみたら…。

なぜか、構築事例を1件しか登録していないのに、構築事例のポイントが50ポイントになってる。



ん?
確か構築事例を申請してもらえるポイントは25ポイントじゃ…。
(詳しくはココを)

よくよく見てみたら、


[ 秀逸構築事例 ]
該当の構築事例に対し、EC-CUBE運営チームが秀逸認定をしたものには、さらに25ポイント加算されます。


▲▲▲
こんな一文を発見。


もしや!
登録したサイトが秀逸認定されたってこと?




あ(・∀・)り(・∀・)が(・∀・)と(・∀・)う!

FORMのTEXT入力時に、Enterキーをブロック。…して、次の入力フォームへ。


<script type="text/javascript">
function handleEnter (field, event) {
var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
if (keyCode == 13) {
var i;
for (i = 0; i < field.form.elements.length; i++)
if (field == field.form.elements[i])
break;
i = (i + 1) % field.form.elements.length;
field.form.elements[i].focus();
return false;
}
else
return true;
}
</script>


でもって、<input type="text"…>の中に

onkeypress="return handleEnter(this, event)"

でおk

フォームのチェックボックスを配列でPOSTするときの全選択・全解除

<SCRIPT TYPE="text/javascript">

function check(targetForm,flag){
for(n=0;n<=targetForm.length-1;n++){
if(targetForm.elements[n].type == "checkbox"){
targetForm.elements[n].checked = flag;
}
}
}

</SCRIPT>


<form name="Form" method="post" action="#" id="Form1">

<label><input type="checkbox" name="name[]" value="データ1" ></input>データ1</label>
<label><input type="checkbox" name="name[]" value="データ2" ></input>データ2</label>
<label><input type="checkbox" name="name[]" value="データ3" ></input>データ3</label>
<input type="button" value="全選択" onClick="check(this.form,true)"/>
<input type="button" value="全解除" onClick="check(this.form,false)"/>


</form>


追記。。。
jQueryを使うやり方、c⌒っ゚д゚)っφ メモメモ...


----------------------JavaScript---------------------------------

<script type="text/javascript" src="jquery.js"></script>
<SCRIPT>
//すべてを選択
function checkAll(flg){
$field_set = $("input[id^='"+flg+"']")
$field_set.attr('checked', true);
$field_set.next().removeClass('checkbox_unchecked');
$field_set.next().addClass('checkbox_checked');
};


//すべてを解除
function removeAll(flg){
$target_set = $("input[id^='"+flg+"']")
$target_set.removeAttr('checked');
$("label[for*='"+flg+"']").removeClass('checkbox_checked');
$("label[for*='"+flg+"']").addClass('checkbox_unchecked');
};
</script>
----------------------JavaScript---------------------------------

----------------------HTML---------------------------------------

<form>

<input name="area[]" type="checkbox" value="*" id="chk1_1"/><label for="chk1_18">東京</label>
<input name="area[]" type="checkbox" value="*" id="chk1_2"/><label for="chk1_18">大阪</label>
<input name="area[]" type="checkbox" value="*" id="chk1_3"/><label for="chk1_18">沖縄</label>

<a href="javascript:void(0);" onclick="checkAll('chk1');">すべて選択</a>
<a href="javascript:void(0);" onclick="removeAll('chk1');">すべて解除</a>




<input name="area2[]" type="checkbox" value="*" id="chk2_1"/><label for="chk2_18">東京</label>
<input name="area2[]" type="checkbox" value="*" id="chk2_2"/><label for="chk2_18">大阪</label>
<input name="area2[]" type="checkbox" value="*" id="chk2_3"/><label for="chk2_18">沖縄</label>

<a href="javascript:void(0);" onclick="checkAll('chk2');">すべて選択</a>
<a href="javascript:void(0);" onclick="removeAll('chk2');">すべて解除</a>


</form>

----------------------HTML---------------------------------------







EC-CUBE2.11 配送先ごとに送料を設定する…。

なにやら、EC-CUBEのコミュでこのブログの記事にリンクが貼られていましたょ(・∀・)

というわけで、配送先ごとに送料を設定する方法を…。


まずは、前提条件として。

・商品毎に送料が設定されている。
・同じ配送先の送料は、商品別送料の中から一番高い金額を設定する。
・幾ら以上は送料無料…の設定がある。


いじるのは、おなじみの「/data/class/SC_CartSession.php」です。

まずは608行目付近の

// 送料無料チェック
if ($this->isDelivFree($productTypeId)) {
$results['deliv_fee'] = 0;
}

の後に、以下のコードを追加っと。




//--------------------------------------------------------
/* ▼▼▼お届け先が複数ならそれごとに送料を再計算▼▼▼ */
//--------------------------------------------------------


if ( count($_SESSION['shipping']) > 1 ){

//---------[初期処理]-------------

//とりあえず、$results['deliv_fee']を0にしておく
$results['deliv_fee'] = 0;

//何人目かを記録しておくためのフラグ
$multi = 0;

//---------[初期処理終了]---------

//人数分の繰り返し
foreach ( $_SESSION['shipping'] as $deli) {

//配送先ごとの商品代金合計を初期化
$total_indiv = 0;

$temp_list = $deli['shipment_item'];
$item = array_keys( $temp_list );//商品のコードを配列から取得

//商品分の繰り返し
for ($loop = 0; $loop < count($item); $loop++){

$item_code = $item[$loop];

$quant = $item_code;
$quantity = $deli['shipment_item'][$quant]['quantity'];

//EC-CUBEのデータベースから商品価格と送料を引っ張ってくる
$objQuery = new SC_Query();
$haisou = $objQuery->getOne("SELECT price02,deliv_fee FROM dtb_products_class where product_code = " . $item_code . ";");

$temp_indiv = $haisou['sell_price'] * $quantity;
$total_indiv += $temp_indiv;

$subTotal_fee[] = $haisou['deliv_fee'];

}//人数分の繰り返し


//個別の購入金額が送料無料条件なら送料無料、そうでなければ一番高い送料を設定
$deliv_fee = ( $total_indiv > $objQuery->getOne("SELECT free_rule FROM dtb_base_info;") ) ? 0:max($subTotal_fee);

//送料の総合計に個別送料を足していく
$results['deliv_fee'] += $deliv_fee;

//送料と合計金額をセッションに保存(後で表示に使うため)
$_SESSION['multi_deliv'][$multi]['deliv_fee'] = $deliv_fee;
$_SESSION['multi_deliv'][$multi]['total_indiv'] = $total_indiv;

$multi++;

}//人数分の繰り返し

}

//----------------------------------------------------
/* ▲▲▲お届け先ごとに送料を再計算(ここまで)▲▲▲ */
//----------------------------------------------------



試しにやってみたら、動いたんで問題はないかと思うのですが…。


デフォルトの状態の処理なら、最新の記事を見てください。

scroll-to-top(スムーズスクロールでページ上部まで戻る)


jQueryを読み込んだあとに

</script>
$(document).ready(
function() {


$(function () {
$('.back-top a').click(function () {
$('body,html').animate({
scrollTop: 0
}, 800);
return false;
});
});

}
);
</script>

をhead内に


<p class="back-top" >
<a href="#top">▲ ページトップへ▲</a>
</p>

をbody部分に記述。

背景画像を自動リサイズして画面にフィット

背景画像を自動リサイズして画面にうまくフィットさせるjQueryプラグイン「Backstretch」

Backstretch


<script src="jquery-1.6.2.min.js"></script>
<script src="jquery.backstretch.min.js"></script>


でプラグインを読み込んだあと、<head>部分に以下のように記述するだけ。

<script type="text/javascript">
$.backstretch("http://*****/example.jpg");//読み込みたい画像
</script>


簡単すぎる…。

JQUERY DRILL DOWN MENU PLUGIN

iPhoneなんかのサイトに使えそうなjQueryメニュー。


JQUERY DRILL DOWN MENU PLUGIN

12のPHP最適化(高速化)テクニック。

1、staticメソッドが使えるなら使おう。速度は4倍になる
2、__get, __set, __autoload は使わない
3、require_once は重い
4、include, requireで読み込むファイルはフルパスにしよう
5、スクリプト開始時のUNIXタイムを $_SERVER['REQUEST_TIME'] で取れる
6、strncasecmp関数やstrpbrk関数を使えるケースはこれらを使い、正規表現は使わない
7、preg_replaceはstr_replaceより速い、しかし、strtrはpreg_replaceより4倍速い
8、引数を、単体か配列かで自動判別するようなコードは出来るだけ避ける
9、@ を使ったエラー制御はとても遅い。→ @fputs($fp, "?");
10、$row["id"] は $row[id] より7倍速い
11、PHPのエラーメッセージは重い( noticeとかwarningとか)
12、for ($x=0; $x < count($array); $x) のように、forの中でcountを使うと毎回countが呼ばれるので使わない。


特に気を付けたいと思ったのが、10番と12番。
よく使っている…。

switchのcaseで条件式が使える…

switch (TRUE) {
case ($age < 18):
echo '良い子の君にはまだ早い!';
break;
case ($age < 20):
echo 'お酒は二十歳をすぎてから。';
break;
case ($age < 30):
echo 'まだまだ未熟者ですよ。';
break;
case ($age > 35):
echo 'そろそろ結婚を考えてみてはいかがでしょう?';
break;
default:
echo '可もなく不可も無く…';
break;
}

ってな感じで、case文に条件式が使えるということを最近知りました。

知っとくと便利かも…なPHPテク

○文字列の圧縮
データをローカルにサイズを小さくして保存したい場合は圧縮するといい。

gzcompress("圧縮したい文字列");
gzuncompress("解答したいデータ(ENCRYPTED)");

で圧縮、解凍ができる。


○処理終了時に実行するハンドラ関数の設定

register_shutdown_function(関数名) を使えば、コード中の処理が全部終わったタイミングで関数を呼べる。

register_shutdown_function("down_example");

function down_example(){
処理;
}

最後に何かを共通で出したい場合…たとえば、取得したデータを表示するとか最後に必ず行うような処理を書いておけば、毎回処理を書かなくてもいいかと。