Zencartで配達日指定

Zencart本家サイトで見つけたOrder Delivery Date というモジュールがとても便利です。

1.3.8用なので、1.3.8a日本語版を利用することになりますが、今チェックしてみたら残念なことに配布終了になってました。いささか書く気がそがれてしまいましたが、1.3.8英語版のランゲージファイルだけを最低限翻訳して使うような方法もあるかもしれず、まとめておきます。

インストール

結構いろんなファイルを上書きするので、現状のファイル全てとデータベースのバックアップを取っておきます。

ダウンロードした圧縮ファイルにある、deliverydate.sql を開きSQL文のテーブル名にzen_orders となっているので、使用中のデータベースのプレフィックスにあわせておきます。zencartの管理画面かphpMyAdminでSQL文を実行し、orderテーブルにorder_delivery_date というフィールドを挿入します。

アップロードするファイルのYOUR_TEMPLATE となっているディレクトリ名を使用中のテンプレート名に併せてリネームし、ディレクトリ構造をそのままにしてアップロード、上書きします。

これで配送日を指定するフィールドが追加され、フィールドをクリックすると、日付を選択するカレンダーが表示されるようになります。

カレンダー表示の日本語化

jscript_b-calendar.js の最初に出てくる、"Sunday","Monday"・・・と"January","February"・・・ の部分を"日","月"・・・、"1月","2月"・・・に変更します。

配達できない日の指定

jscript_calendar_head.php、addEvent の関数の blocked:  の部分を変更します。例えば大晦日と元旦は配送できないようにするには blocked: ['1 1 *', '31 12 *'] となります。

注文日から配達指定日までの制限

同様にdirection の部分を変更します。注文日から3日後から配達日指定OKとするとdirection: 3  とします。

モジュールが追加したテキストの日本語化

ランゲージファイルに以下を追加します。(テンプレートでオーバライドしている場合は、オーバーライドディレクトリのランゲージファイルに追加)

orders.php
define('TABLE_HEADING_DELIVERY_DATE', '配達希望日');

checkout_confirmation.php
define('TABLE_HEADING_DELIVERY_DATE', '配達希望日');

checkout_shipping.php
define('TABLE_HEADING_DELIVERY_DATE', '配達希望日');

checkout_process.php
define('EMAIL_TEXT_DELIVERY_DATE', '配達希望日:');

admin/languages/japanese.php
define('ENTRY_DELIVERY_DATE', '配達希望日:');

これでこんな感じの配達希望日フィールドが追加されます。また注文確認メールや管理画面の注文管理、納品書に配達希望日が追加されます。

配達日指定フィールド

Zencart1.3.8aのカスタム配送モジュールの配達時間帯とはこのままでは併用できません。併用する場合は、このモジュールで上書きされた各ファイル(admin/include/class/order.php、includes/class/order.php、tpl_checkout_confirmation_default.php、tpl_checkout_shipping_default.php)をマージする必要があります。