月別アーカイブ: 2011年10月

EC-CUBE2.11 静的URLにしたらソートができなくなった。

こちらのページ参考に商品詳細ページとリストページを静的URLにしたのですが、その影響でリストページがソートされなくなった。

調べてみると、どうやら
data/class/pages/products/LC_page_products_list.php

$this->arrForm = $_REQUEST;//時間が無いのでコレで勘弁してください。 tao_s
が影響している模様。

.htaccessを以下のように書き換えた。

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
#RewriteRule ^detail([0-9]+).html+ detail.php?product_id=$1 [L]
RewriteRule ^detail([0-9]+).html+ detail.php?product_id=$1&%{QUERY_STRING} [L]
#RewriteRule ^list([0-9]+).html+ list.php?category_id=$1 [L]
RewriteRule ^list([0-9]+).html+ list.php?category_id=$1&%{QUERY_STRING} [L]

EC-CUBE 2.11 詳細ページをlightbox風に表示する

詳細ページなどをAjaxを使ってiframeで表示したいとき、共通のheader,footerを表示したくなかった。
でも管理画面のページレイアウト詳細設定で「共通のヘッダーを使用する」と「共通のフッターを使用する」のチェックボックスをはずしてしまうと、iframeで表示しない場合も表示されなくなってしまうので、iframeでの表示と通常の表示とで、読み込むヘッダーとフッタを変更したい。

1:まず
data/class_extends/SC_View_Ex.php
のassignTemplatePath()をオーバーライド
header_tpl_for_iframeとfooter_tpl_for_iframeとしてheader_iframe.tplとfooter_iframe.tplを新規で定義
[PHP]
function assignTemplatePath($device_type_id) {
parent::assignTemplatePath($device_type_id);
$templatePath = SC_Helper_PageLayout_Ex::getTemplatePath($device_type_id);
$header_tpl_for_iframe = $templatePath . “header_iframe.tpl”;
$footer_tpl_for_iframe = $templatePath . “footer_iframe.tpl”;

$this->assign(“header_tpl_for_iframe”, $header_tpl_for_iframe);
$this->assign(“footer_tpl_for_iframe”, $footer_tpl_for_iframe);
}

[/PHP]

2:該当するクラス(今回の場合は詳細ページなので)
data/class_extends/page_extends/products/LC_Page_Products_Detail_Ex.php
のprocessをオーバーライドし、arrPageLayoutにisIframeプロパティを追加。
クエリにdisplayMode=iframeとなっていたときにtrueに設定。

[PHP]
function process() {
$this->arrPageLayout[“isIframe”] = $this->getDisplayMode() == “iframe” ;
parent::process();
}
[/PHP]

displayModeはほかでも遣う気がしたのでページクラスを拡張
data/class_extends/page_extends/LC_Page_Ex.php
[PHP]
function getDisplayMode() {
$pattern = ‘/^[a-zA-Z0-9_]+$/’;
$mode = null;
if (isset($_GET[‘displayMode’]) && preg_match($pattern, $_GET[‘displayMode’])) {
$mode =  $_GET[‘displayMode’];
} elseif (isset($_POST[‘displayMode’]) && preg_match($pattern, $_POST[‘displayMode’])) {
$mode = $_POST[‘displayMode’];
}
return $mode;
}
[/PHP]

3:メインテンプレート
data/Smarty/default/site_main.tpl
にヘッダーとフッターを読み込むところがあるので分岐する。
[PHP]
<!–{if $arrPageLayout.isIframe}–>
<!–{include file= $header_tpl_for_iframe}–>
<!–{else}–>
<!–{include file= $header_tpl}–>
<!–{/if}–>
[/PHP]
[PHP]
<!–{if $arrPageLayout.isIframe}–>
<!–{include file= $footer_tpl_for_iframe}–>
<!–{else}–>
<!–{include file= $footer_tpl}–>
<!–{/if}–>
[/PHP]

4:読み込む専用のヘッダーとフッターを追加する
data/Smarty/default/header_iframe.tpl
data/Smarty/default/footer_iframe.tpl

5:html/products/.htaccessの内容を変更する。※!詳細ページを静的にしていない場合は必要ないです。
こちらのページを参考に詳細ページを静的URLにしていたので下記のように記述していたんですが、
RewriteRule ^detail([0-9]+).html+ detail.php?product_id=$1 [L]
これだURLのクエリ情報が付与されなかったため下記のように変更。
RewriteRule ^detail([0-9]+).html+ detail.php?product_id=$1&%{QUERY_STRING} [L]

*追記 2011/11/31
この記事関係のない部分で別の問題もあったので最終的に.htaccessはこうなった

6:lightbox的に表示したいのでプロダクトリストを編集する。今回はcolorboxを使用。
data/Smarty/default/products/list.tpl
jqueryとcolorboxを読み込んでおく。
[JAVASCRIPT]
$(document).ready(function() {
var colorbox_ajax = $(“.colorbox_ajax”);
$(“.colorbox_ajax”).each(function(){
var href = $(this).attr(“href”);
href += “?displayMode=iframe”;
$(this).attr(“href”,href);
});
$(“.colorbox_ajax”).colorbox({ width: “960px”, height: “420px”,iframe: true});
});
[/JAVASCRIPT]
[HTML]
<a href=”<!–{$smarty.const.P_DETAIL_URLPATH}–><!–{$arrProduct.product_id|u}–>.html” class=”colorbox_ajax”>product name</a>
[/HTML]
aタグのhrefには記述せず(直接来た場合はiframeじゃない版を表示したいので)、わざわざjqueryでループし、displayModeを付与した。

EC-CUBE 2.11 追加したカートのセッション情報を注文完了時に消しておく

/data/class_extends/helper_extends/SC_Helper_Purchase_Ex.php
cleanupSessionをオーバーライド
[PHP]
function cleanupSession($orderId, &$objCartSession, &$objCustomer, $cartKey) {
$objCartSession->delAllAdditionalInfo();
parent::cleanupSession($orderId, $objCartSession, $objCustomer, $cartKey);
}
[/PHP]

EC-CUBE 2.11 合計金額に基本料金を追加

あらかじめ基本料金を基本情報として追加しておく

合計金額に基本料金を追加する。
/data/class_extends/SC_CartSession_Ex.php

[PHP]
function calculate($productTypeId, &$objCustomer, $use_point = 0,
$deliv_pref = “”, $charge = 0, $discount = 0, $deliv_id = 0) {
$results = parent::calculate($productTypeId, $objCustomer, $use_point, $deliv_pref, $charge, $discount, $deliv_id);

$objDb = new SC_Helper_DB_Ex();
$col    = SC_Utils_Ex::sfGetCommaList(array(“basic_fee”));
$arrRet = $objDb->sfGetBasisData(true, $col);
$results[‘basic_fee’] = $arrRet[“basic_fee”];
$results[‘payment_total’] += $results[‘basic_fee’];

return $results;
}

[/PHP]

 

追記(2011/11/17)

culculateではなくて、getAllProductsTotalメソッド内で行ったほうがよさそうということで、変更しました。

[PHP]
function calculate($productTypeId, &$objCustomer, $use_point = 0,
$deliv_pref = “”, $charge = 0, $discount = 0, $deliv_id = 0) {
$results = parent::calculate($productTypeId, $objCustomer, $use_point, $deliv_pref, $charge, $discount, $deliv_id);

$objDb = new SC_Helper_DB_Ex();
$col    = SC_Utils_Ex::sfGetCommaList(array(“basic_fee”));
$arrRet = $objDb->sfGetBasisData(true, $col);
$results[‘basic_fee’] = $arrRet[“basic_fee”];
//$results[‘payment_total’] += $results[‘basic_fee’];

return $results;
}
function getAllProductsTotal($productTypeId) {
//省略

//基本料金を追加
$objDb = new SC_Helper_DB_Ex();
$col    = SC_Utils_Ex::sfGetCommaList(array(“basic_fee”));
$arrRet = $objDb->sfGetBasisData(true, $col);
$total += $arrRet[“basic_fee”];

return $total;
}

[/PHP]

 

EC-CUBE 2.11 基本情報追加メモ

1:データベースdtb_baseinfoに項目を追加

2:data/class_extends/page_extends/admin/basis/LC_Page_Admin_Basis_Ex.phpを編集
[php]
// 追加項目
function lfGetCol() {
$arrCol = parent::lfGetCol();
$arrCol[] = “basic_fee”;
return $arrCol;
}
function lfInitParam(&$objFormParam, $post) {
parent::lfInitParam($objFormParam, $post);
$objFormParam->addParam(“基本料金”, “basic_fee”, PRICE_LEN, ‘n’, array(“NUM_CHECK”, “MAX_LENGTH_CHECK”));
}
[/php]
※この例は基本料金(basic_fee)を追加した。

3:管理画面のテンプレートを編集
data/Smarty/templates/admin/basis/index.tpl
[php]
<tr>
<th>基本料金<span> *</span></th>
<td>
<span><!–{$arrErr.basic_fee}–></span>
<input type=”text” name=”basic_fee” value=”<!–{$arrForm.basic_fee|h}–>” maxlength=”<!–{$smarty.const.PRICE_LEN}–>” size=”6″ style=”<!–{if $arrErr.basic_fee != “”}–>background-color: <!–{$smarty.const.ERR_COLOR}–>;<!–{/if}–>” /> 円
</td>
</tr>
[/php]

休肝日カレンダーを作った

休肝日カレンダーを作った。

先日の健康診断で肝機能に若干の異常値がでました。

医者が言うには
問題となるほど高い数値ではないが、酒の飲みすぎが原因なのは明らか。
毎日飲んでいるようなので休肝日を少なくとも2日作れば数値は低くなっていくはず。
とのこと。

習慣になっているので難しいですし、付き合いもあるのでどうすればいいか考えた末

休肝日カレンダーを作った。管理者:妻。

実行できたら塗りつぶすシステム。
基本的に月曜日と火曜日を「飲まないとエライ日」にした。
水曜日は「飲まなければスゴイ日」とした。
木曜から日曜日は「飲んでよし」とした。

休肝日が休日や飲み会などに重なった場合は日にちをずらしてOKにした。

ファイル張っておきますー。休肝日2011年度版