Zen-Cartの商品提供可能日を時刻まで指定する方法
Blog 9月 29th, 2007Zen-Cartには、商品登録時に、商品提供可能日を設定することが可能です。
一般設定>トップページの表示設定で「入荷予定商品」を表示するようにしていれば、
トップページや商品リストの下部にリストされます。
デフォルトでは、日付指定だけで時間指定することはできませんが、現在取り組んでいる案件で
時間指定もできるようにして欲しいという要望があり、カスタマイズしましたので、メモしておきます。
なお、対象バージョンのZen-Cartはv1.302です。
管理画面側
まずは管理画面側から・・・
admin/includes/modules/pages/product_info/main_template_vars.phpの50行目付近
[code]
date_format(p.products_date_available, ‘%Y-%m-%d’) as
[/code]
を
[code]
date_format(p.products_date_available, ‘%Y-%m-%d %H:%i:%s’) as
[/code]
にします。
次に同ファイルの280行目付近
[code]
[/code]
を
[code]
[/code]
にします。
これだけで提供可能日を日付だけでなく時刻まで登録することができるようになります。
テキストボックスのサイズが小さいのが気になるようでしたら、
admin/includes/javascript/spiffyCal/spiffyCal_v2_1.js
の930行目付近のsize=”12″を適当な値に変更してください。
ショップ画面側
includes/modules/upcoming_products.phpの15行目付近
[code lang=”php”]
if ( (!isset($new_products_category_id)) || ($new_products_category_id == ‘0’) ) {
$expected_query = “select p.products_id, pd.products_name, products_date_available as date_expected
from ” . TABLE_PRODUCTS . ” p, ” . TABLE_PRODUCTS_DESCRIPTION . ” pd
where to_days(products_date_available) > to_days(now())
and p.products_id = pd.products_id
and pd.language_id = ‘” . (int)$_SESSION[‘languages_id’] . “‘
order by ” . EXPECTED_PRODUCTS_FIELD . ” ” . EXPECTED_PRODUCTS_SORT . ”
limit ” . MAX_DISPLAY_UPCOMING_PRODUCTS;
} else {
$expected_query = “select p.products_id, pd.products_name, products_date_available as date_expected
from ” . TABLE_PRODUCTS . ” p, ” . TABLE_PRODUCTS_DESCRIPTION . ” pd, ” . TABLE_PRODUCTS_TO_CATEGORIES . ” p2c, ” .
TABLE_CATEGORIES . ” c
where p.products_id = p2c.products_id
and p2c.categories_id = c.categories_id
and c.parent_id = ‘” . (int)$new_products_category_id . “‘
and to_days(products_date_available) > to_days(now())
and p.products_id = pd.products_id
and pd.language_id = ‘” . (int)$_SESSION[‘languages_id’] . “‘
order by ” . EXPECTED_PRODUCTS_FIELD . ” ” . EXPECTED_PRODUCTS_SORT . ”
limit ” . MAX_DISPLAY_UPCOMING_PRODUCTS;
}
[/code]
を
[code lang=”php”]
if ( (!isset($new_products_category_id)) || ($new_products_category_id == ‘0’) ) {
$expected_query = “select p.products_id, pd.products_name, products_date_available as date_expected
from ” . TABLE_PRODUCTS . ” p, ” . TABLE_PRODUCTS_DESCRIPTION . ” pd
where products_date_available > now()
and p.products_id = pd.products_id
and pd.language_id = ‘” . (int)$_SESSION[‘languages_id’] . “‘
order by ” . EXPECTED_PRODUCTS_FIELD . ” ” . EXPECTED_PRODUCTS_SORT . ”
limit ” . MAX_DISPLAY_UPCOMING_PRODUCTS;
} else {
$expected_query = “select p.products_id, pd.products_name, products_date_available as date_expected
from ” . TABLE_PRODUCTS . ” p, ” . TABLE_PRODUCTS_DESCRIPTION . ” pd, ” . TABLE_PRODUCTS_TO_CATEGORIES . ” p2c, ” .
TABLE_CATEGORIES . ” c
where p.products_id = p2c.products_id
and p2c.categories_id = c.categories_id
and c.parent_id = ‘” . (int)$new_products_category_id . “‘
and products_date_available > now()
and p.products_id = pd.products_id
and pd.language_id = ‘” . (int)$_SESSION[‘languages_id’] . “‘
order by ” . EXPECTED_PRODUCTS_FIELD . ” ” . EXPECTED_PRODUCTS_SORT . ”
limit ” . MAX_DISPLAY_UPCOMING_PRODUCTS;
}
[/code]
に変更します。
具体的にはto_days関数を利用しないようにしているということですね。
他にもproducts_date_available関連のto_days関数を利用しているところがあれば、そちらも変更しておいた方がいいでしょう。