伊藤清徳の垂直落下式ムーンサルトプレス

PerlとかPHPとかMySQLとか...がんばっても8割だ。

Category: PHPカートシステム

PHPカートシステムのおはなし。

動作環境

・PHPバージョン

 4.3.2にて動作確認しています。

 5.x系は未確認です。

 mail()関数、マルチバイト関数が使えることが必須です。

 動作確認時点では、セーフモードオフの環境にて動作確認しています。

・OS

 RedHatEnterpriseLinux4にて動作確認しています。

 BSD系UNIX/LINUXであれば動作するものと思われます。

 Windows系OSでの動作は未確認です。

有料プラン

無料

このシステムは基本的に無料にてお使いいただけます。

ただし、
・有限会社キープラン(以下「弊社」)による代行設置
・システムによって自動表示される著作権表示の削除
・機能追加ご要望
・WEB制作会社さまなどによる利用者/運用者以外による設置
は有料とさせていただきます。

有限会社キープラン(以下「弊社」)による代行設置

¥35,000(税別)にて承ります。この場合は、著作権表示の削除を同時に許可いたします。

システムによって自動表示される著作権表示の削除

¥20,000(税別)にて承ります。

機能追加ご要望

追加機能によって異なります。都度お見積もりとさせていただきますので、ご連絡くださいませ。この場合は、著作権表示の削除を同時に許可いたします。

WEB制作会社さまなどによる利用者/運用者以外による設置

1サイトあたり¥15,000(税別)にて許可いたします。この場合は、著作権表示の削除を同時に許可いたします。

「カゴの中を確認」のリンクをつけるには

カゴの中身を確認するには、リンクを張るだけでOKですよ(^-^)v

メインシステムファイルのURLが
「http://www.hoge.com/cart/ex/cart.php」
ならば、このURLにリンクを張るだけでOKです。

商品ページの設定

このページでは・・・

商品ページの設定方法を説明します。
当然ながらHTMLの知識がないと分からないと思うので、少しは勉強を・・・。

商品ページの設定とは?

このスクリプトは、商品の管理は在庫以外の管理を行わず、利用者自身で作ったHTMLにForm要素をつけるだけで動作するのが最大の特徴です。

つまり、発想しだいで、かなり自由に商品ページを作ることができるわけです。

たとえば、見積もりの必要なオーダーメイド商品などを扱うショップでは、
データベースで管理された汎用カートシステムでは販売が難しいですが、
このスクリプトを使えば、JavaScriptやPHP、Perl/CGIで動的に計算された商品データも簡単にカートへ渡すことができます。

このページのサンプルはXHTMLにて記述します。
HTMLを使う場合は必要に応じて読み替えてください。

仮定条件

以下の説明はこのスクリプトのメインファイルのURLが「http://www.hoge.com/cart/ex/cart.php」であると仮定します。必要に応じて読み替えてください。

まずは<form>タグ

まずはこれがなくては話になりません。

<form action="http://www.hoge.com/cart/ex/cart.php" method="post" name="form" id="form">
</from>

<form>と</form>の間に下記の要素を書いていくことになります。

商品ページ文字コード

商品ページの文字コードを指定します。
<input name="strcode" type="hidden" id="strcode" value="0" />

value=""の値を変更します。
0 => Shift-JIS
1 => EUC-JP
2 => UTF-8
です。ただし、「config/config.php」の「■商品ページの文字コードリスト」を変更している場合は、この順番が変わっている場合があります。

発送方法の指定

「config/config.php」の「■配送方法および配送会社の選択の可否」を「true」に設定し、なおかつ「■配送方法・配送会社の指定を商品側で操作できるようにするか?」を「1」か「2」に設定しているとき、商品の発送可能な方法/業者を指定します。

「config/config.php」の「■配送方法および配送会社の指定」で「宅配便」と「メール便」を設定していると仮定します。

□宅配便のみ選択可能にする場合
<input name="delivepattern" type="hidden" id="delivepattern" value="宅配便" />

※ただし、「■配送方法・配送会社の指定を商品側で操作できるようにするか?」の設定を2にしている場合、購入商品の中にメール便可能商品があれば、メール便での発送も出来る設定になってしまうので注意してください。

□宅配便/メール便選択可能にする場合
<input name="delivepattern" type="hidden" id="delivepattern" value="宅配便::メール便" />
と設定します。3つ以上の場合も「::」で区切ることで指定可能です。

「config/config.php」の「■配送方法および配送会社の選択の可否」を「false」にしている場合、
「config/config.php」の「■配送方法・配送会社の指定を商品側で操作できるようにするか?」を「0」に設定している場合も要素は必須ですので、
<input name="delivepattern" type="hidden" id="delivepattern" value="宅配便" />
とダミーの要素を必ず入れてください。

送料込みの指定

この商品が送料込みかそうでないかを指定します。

□送料別の商品
<input name="skomi" type="hidden" id="skomi" value="0" />

□送料込みの商品
<input name="skomi" type="hidden" id="skomi" value="1" />

最終的な送料計算は「config/config.php」の「■送料込みの処理」の設定により変わりますので注意してください。

在庫管理するか。

在庫管理対象商品かどうかを設定します。

□在庫管理対象商品の場合
<input name="zaiko" type="hidden" id="zaiko" value="on" />
在庫管理対象商品にすると、在庫ファイル格納ディレクトリに在庫ファイルがないとPHPエラーが発生します。必ず、在庫ファイルを設定してから在庫管理対象商品としてください。

□在庫管理対象商品ではない場合
<input name="zaiko" type="hidden" id="zaiko" value="off" />
とします。

商品番号

<input type="hidden" name="itemid" value="0001" />

valueの部分に商品番号を設定します。
半角英数と「-」「_」が使えます。
日本語はダメです。

商品名

<input name="itemname" type="hidden" id="itemname" value="WindawsXP" />

valueの部分に商品名を設定します。
日本語もOKです。長すぎないようにしましょう。

商品価格

<input name="price" type="hidden" id="price" value="10000" />

valueに商品価格を設定します。
半角数字のみです。

見積もり商品やオーダーメイド商品はこの値を動的に生成させればいいのです。

オプション

たとえば、「Mサイズ」「Lサイズ」のような選択肢をつけたい場合

<select name="options[]" id="options[]">
<option value="Mサイズ">Mサイズ</option>
<option value="Lサイズ">Lサイズ</option>
</select>

とします。

また、「Sサイズ」「Mサイズ」「Lサイズ」と選択肢をつけたいが、Sサイズは100円引き、Lサイズは100増しとしたい場合は、

<select name="options[]" id="options[]">
<option value="Mサイズ::-100">Mサイズ</option>
<option value="Mサイズ">Mサイズ</option>
<option value="Lサイズ::100">Lサイズ</option>
</select>

とします。valueに「値::-○○」「値::+○○」とすることでオプション価格をつけることが可能です。
カートの中では「オプション価格:○○円」と表示されます。

「option[]」の要素は数に上限がありません。
サイズの選択肢と 色の選択肢 などを複数の選択肢も設定可能です。

また、もちろん他の要素と同じく、「hidden要素」で設定しても問題ありません。

このオプション設定のみは 必要がない場合は 商品ページに記述してはいけません。

カゴへ入れるボタン

<input name="submit1" type="submit" id="submit1" value="カゴへ" />
「カゴへ」の部分は変えてもOKです。

以上です。

以上ですべての要素がそろいました。
いよいよ開店するのみですかね(^-^)

よく分からない人は、
サンプルページのソースコードを参考にしてください。

アイコンをカゴへいれるボタンとして使いたいのだけど。

まず、カゴへ入れるボタンを削除します。

<input name="imageField" type="image" src="画像へのパス" border="0" />

を置きます。これがボタンとして機能します。
さらに
<input name="submit1" type="hidden" id="submit1" value="1" />
という要素を付け加えることで、動作するようになります。

ご注意事項

1.
ここまでで、勘のいい人は気づいていると思いますが、
HTML中に価格情報などを記述しているので、これを操作することで価格情報などは簡単に改変できてしまいます。
このことがこのスクリプトの最大の欠点です。
決定的な欠点であることは開発者も理解していますが、商品価格の動的生成を重視したほうがメリットとして大きいということで、こういった仕様にしています。
(有)キープランでは、同じように商品ページHTMLに価格を書き込む方式のショッピングカートシステムを何年も利用していますが、現在のところ、改変された内容でご注文を受けた事例はございません。
また、商法においては、悪意だと考えられる取引は店舗側から拒否できると明記されています。

2.<form></form>の中に記述できる商品データは1商品のみです。複数商品の情報を設定すると正しく動作しません。

設定ファイル

こページでは・・・。の

システム内の「config/config.php」の設定の仕方について説明します。
随時充実させていくつもりなので、足りなくてもごめんなさいということで。
項目別にタイトル設定しておくので、そこを見てね。

仮定条件

「http://hoge.com/cart/」の中にシステムを設置したという仮定条件で説明します。
つまり。メインのシステムは「http://hoge.com/cart/ex/cart.php」です。
URLは設置条件に合わせて読み替えてください。

■設置するURL

「http://hoge.com/cart/」となります。
メインファイルが置かれたディレクトリの1階層上のディレクトリを設定します。

■Cookieのパス

「/cart/ex/」となります。
通常は、メインファイルのあるディレクトリを指定します。
(ドメイン名は入れない。)
面倒なら「/」だけでも使えますが・・・あまりオススメはしません。

■システムディレクトリ(自動判別)

この部分は特に触る必要はありませんが、
サーバーの条件によっては自動判別出来ない場合があります。
そのときは
「$K__systemDir = str_replace(‘ex/cart.php’,”,getenv(SCRIPT_FILENAME));」

「#$K__systemDir = str_replace(‘ex/cart.php’,”,getenv(SCRIPT_FILENAME));」
と変更してください。

■システムディレクトリ(手動設定)

ここは通常変更する必要はありませんが、
上記の「■システムディレクトリ(自動判別)」がうまく行かなかった場合は設定をする必要があります。
この項目はサーバーにより条件がさまざまなので、
詳細は割愛します。
よく分からない場合は、サーバー管理者さまにお問い合わせください。すぐ分かると思います。

■PEARクラス格納ディレクトリ

通常は変更の必要はありません。
独自にPEARクラスをインストールさせたディレクトリを使いたい場合、
WEB公開ディレクトリでPEARが使えない場合などに設定します。

※このスクリプトが使っているPEARクラス
・Smarty

■S-cartSystem用機能クラスディレクトリ

通常は変更の必要はありません。
ヘタに変更すると、動作しなくなる可能性があります。

■在庫データを保存するディレクトリ

在庫数設定ファイルを格納するディレクトリを設定します。
必要に応じて変更してください。
もちろんこのままでも問題ありません。
ここで設定したディレクトリは、アップロード時、読み書き実行権限(777など)を与えてください。

商品ページで在庫管理を「on」に設定した商品について在庫管理を行います。
「[商品番号].txt」([商品番号]は条件によりさまざま)の名前で保存し、
ファイル内には在庫数を設定します。
商品が購入されればカウントダウンされます。

在庫ファイルはアップロード時読み書き権限(666など)を与えてください。

■セッション情報を保存するディレクトリ

買い物カゴの中身、お客様情報など保存させておくディレクトリを設定します。
出来る限りWEB公開されていないディレクトリに設定してください。
そのままでももちろん使えますが、セキュリティ上の安全を考慮するとオススメできません。
ここで設定したディレクトリには、アップロード時読み書き実行権限を与えます。

■テンプレート格納ディレクトリ

テンプレートファイルを格納させるディレクトリを設定します。
この中にテンプレートファイルを格納させます。
通常はそのままで問題ないかと思われます。

■コンパイル済みテンプレート

テンプレート処理エンジンが実行可能なファイルに変換したファイルを格納するディレクトリを設定します。
そのままでも問題ありません。
ここで設定したディレクトリには、アップロード時読み書き実行権限を与えます。

■商品ページの文字コードリスト

商品ページで使われると思われる文字コードを設定します。
通常はそのままで問題ありません。
PHPの知識がある人は必要に応じて変更してください。

■セッション名

通常は変更する必要ありません。
ここで設定した値は、cookieのキーとして利用されます。

■セッションの有効期限

セッションの有効期限を設定します。
かごの中を30日間保存したい場合は「30」と日数で設定します。
WEBブラウザを閉じたら破棄するテンポラリCookieを利用したい場合は、
「session」と設定してください。
一般的にはテンポラリCookieを使う場合が多いようです。

■テンプレートファイル

テンプレートファイルの設定をします。

$K__selectTmpl = array(
‘add2cart’ => ‘disp.tpl’, //カゴに追加モード
‘operationCart’ => ‘viewcart.tpl’,//カゴの中身を操作モード
‘gotoPaymentSelect’ => ‘select.tpl’,//支払い選択画面へ行くモード
‘gotoForm’ => ‘form.tpl’,//お客様情報入力画面へ
‘gotoKakunin’ => ‘kakunin.tpl’,//お客様情報確認画面へ
‘kakutei’ => ‘kakutei.tpl’,//サンクス画面&クロネコ決済画面
‘viewcart’ => ‘viewcart.tpl’,//買い物カゴの中身表示モード&買物途中で在庫がなくなった場合モード
‘mail2shop’ => ‘mail2shop.tpl’,//店舗への確認メール
‘mail2cus’ => ‘mail2cus.tpl’//お客様への確認メール
);

通常は▲このままで問題ないですが、それぞれ必要に応じて設定してください。
=>の右側の”で囲まれた部分がテンプレートファイル名です。
各テンプレートファイルは、「■テンプレート格納ディレクトリ」で設定したディレクトリに格納します。

■支払い方法

決済方法の設定をします。

$K__paymetMethod = array(
‘代金引換’ => true,
‘銀行振込’ => true,
‘クレジットカード(クロネコペイメント)’ => false,
‘クレジットカード(ゼウス)’ => true
);

「’決済方法’ => true」
と設定します。
複数設定したい場合は「,」で区切ってください。
「true」の部分を「false」にすると一時的に選択できないようにすることができます。
クレジットカードはすでに設定されているものは決済できるはずですが、未確認です。

■各支払い方法の手数料

各決済方法にかかる手数料を設定します。

$K__paymetTesuryo = array(
‘代金引換’ => 300,
‘銀行振込’ => 0,
‘クレジットカード(クロネコペイメント)’ => 0,
‘クレジットカード(ゼウス)’ => 0
);

「■支払い方法」で設定した方法 => 手数料

と言う書式で設定します。
したがって、「■支払い方法」で設定した方法と、「■各支払い方法の手数料」で設定する方法は同じでなければなりません。

正しく設定されていないと、PHPがエラーを吐き出します。

ここで設定した数字はお客様情報入力画面以降で表示されます。
0と設定すると、表示はされません。

余談・・・。
商品代金の○○% とか ○○円まで200円で○○から300円 とかいう場合があるのを考慮に入れていませんでした。そのうち対応予定。

■配送方法および配送会社の選択の可否

「宅配便 or メール便」
「●●運輸 or △△急便」
などの配送方法や 配送会社を選択させたい場合は

$K__delivCamSelect = true;

必要ない場合は、

$K__delivCamSelect = false;

と設定します。

■配送方法および配送会社の指定

たとえば、「宅配便 or メール便」で選択させたい場合は、

$K__delivCamKomoku = array(
‘宅配便’,
‘メール便’
);

と設定します。
3つ以上の場合も「,」で区切って増やすことができます。

※「■配送方法および配送会社の選択の可否」を
 「$K__delivCamSelect = false;」と設定し場合は
 「宅配便」のみ設定してください。

■配送方法・配送会社の指定を商品側で操作できるようにするか?

このスクリプトでは商品ページの商品タグで商品ごとに「■配送方法および配送会社の指定」で設定した配送方法/業者を制限できます。

商品ごとに配送方法/業者の制限を行わない場合は、
$K__delivCamItemSele = ‘0’;

購入商品のすべてが可能なもののみ選択可能にする場合
$K__delivCamItemSele = ‘1’;

購入商品のうちひとつでも可能なものがある方法/業者を選択可能にする場合
$K__delivCamItemSele = ‘2’;

と設定します。

例:「宅配便 or メール便」の選択設定を行っている場合。

$K__delivCamItemSele = ‘0’;
とした場合、商品ページタグ「delivpattern」の値に関わらず、
「■配送方法および配送会社の指定」で設定した値が常に選択可能になります。

$K__delivCamItemSele = ‘1’;
とした場合、
商品ページタグ「delivpattern」の値によって左右されます。
1個目の商品の「delivpattern」タグ => 宅配便::メール便
2個目の商品が「delivpattern」タグ => 宅配便
となっていた場合、宅配便のみが選択可能となります。
この設定をした場合商品ページの「delivpattern」タグを正しく設定しなければ、
送料計算が正しくされません。
ご注意ください。

$K__delivCamItemSele = ‘2’;
とした場合、
商品ページタグ「delivpattern」の値によって左右されます。
1個目の商品の「delivpattern」タグ => メール便
2個目の商品が「delivpattern」タグ => 宅配便
となっていた場合、宅配便とメール便が選択可能となります。
この設定をした場合商品ページの「delivpattern」タグを正しく設定しなければ、
送料計算が正しくされません。
ご注意ください。

当然ですが、この設定は
■配送方法および配送会社の選択の可否の項目が
$K__delivCamSelect = true;
でなければ無効です。

■送料込みの処理

このスクリプトでは、商品ごとに送料込/別の設定ができます。

$K__skomiCheck = true;

とするとひとつでも送料込み(または無料)の商品が含まれていると、
送料がタダになります。

$K__skomiCheck = false;

とすると購入商品のすべてが送料込みと設定されていなければ
送料無料にはなりません。

商品ページのタグは「skomi」です。
このタグを「1」と設定すると送料込み商品になり、
このタグを「0」とすると送料別商品になります。
このタグを正しく設定しないと送料計算がうまくされませんので、ご注意ください。

■送料の区分

送料の計算を 地域別 にするか 全国一律にするかを設定します。

地域別送料を設定したい場合、
$K__soryoKubun = false;

全国一律設定をしたい場合、
$K__soryoKubun = true;

と設定します。

■送料指定(全国一律)

「■送料の区分」を「$K__soryoKubun = true;」とした場合の送料をここで設定します。

全国一律のときの送料区分を設定します。

例:
~4999円 600円
~9999円 300円
これ以上 0円の場合
‘0’ => 600,
‘5000’ => 300,
‘10000’ => 0
と指定。

割引がない場合は
‘-1’ => 600
と指定。

各配送方法・会社ごとに指定。
$K__delivCamSelectを「false」に設定した場合は「宅配便」にのみ設定します。

■送料指定(都道府県別)

都道府県別送料を指定します。
送料の設定は 全国一律送料設定部分を参考にしてください。
都道府県名を地域(関東など)に変更することもできます。

■お届け希望時間・日をお客様に聞くか

お届け希望を聞く場合は、
$K__delivKbou = true;

聞かない場合は
$K__delivKbou = false;

と設定。

余談・・・。そういえば、どっちかを聞きたいということも考えられることを忘れていた・・・。そのうち対応。

■お届け希望時間帯の設定

「■お届け希望時間・日をお客様に聞くか」を
「$K__delivKbou = true;」とした場合の、
お届け希望時刻を設定。

$K__delivTimeLine = array(
‘指定しない’,
‘午前中’,
’12:00~14:00′,
’14:00~16:00′,
’16:00~18:00′,
’18:00~20:00′,
’20:00~21:00′
);

‘値’で設定、複数の場合は「,」で区切る。
デフォルトはヤマト運輸さんの時間帯になっています。

■確認メール送信先

店舗のメールアドレスを入力します。
ここで設定したメールアドレスに、ご注文の詳細が送付されます。

■お客様へのメールの返信先

ご注文時、確認メールはお客さまにも送信されます。
お客様が確認メールに返信するときに 送信されるメールアドレスを設定します。
通常は、「■確認メール送信先」で設定したメールアドレスと同じで大丈夫ですが、
注文窓口と対応窓口を別にしたい場合などは、別個のメールアドレスをここで設定できます。

■店舗宛自動返信メールにCSV情報を添付するか

$K__CSVattach = true;
true/falseで設定します。

添付されるデータは 、
「infos-[注文番号].csv」「items-[注文番号].csv」の2つです。

「infos-[注文番号].csv」はお客様情報を格納したデータで、

注文番号
名前
カナ
メールアドレス
郵便番号
都道府県
住所1
住所2
電話
送り先名前
送り先かな
送り先郵便番号
送り先都道府県
送り先住所1
送り先住所2
送り先電話番号
お届け希望日
お届け希望日
メールの希望
希望要望
お支払い方法
配送方法

の順番でデータが記録されます。

「items-[注文番号].csv」は商品情報を格納したデータで、

注文番号
商品番号
商品名(オプション名を含む)
単価
オプション単価
注文数量
小計

の順で、1商品1行で記録されます。

■添付CSV一時ディレクトリの設定

$K__csvDir = $K__systemDir . ‘csv/’;

自動確認メールへ添付するCSVを一時的に格納するディレクトリを設定します。
CSVファイルはメール送信後、削除されます。

このディレクトリはアップロード後、読書実行権限(777など)を与えてください。

■以下開発者のみ改変許可 より↓の部分

ご利用規約にある「著作権表示部分」とします。
よってこの部分を無断変更した場合は、利用できないものとします。

ダウンロード

まずは。。。

当サイトおよび、当サイト配布物の利用規約および免責をご確認ください。
ダウンロードされた時点で同意されたものとします。

それではダウンロードは…

こちら>>>

PHPカートシステムTOP

このシステムは??

PHPで作ったショッピングカートです。
データベース不要のフォームから特定要素を渡すだけのシンプルなシステムです。

簡単なの??

設置運用ともに、ある程度のWEB運用知識が必要です。

サンプルページは??

こちらにあります>>