StaticPagesMinishop14
提供: GeeklogJpWiki
[3]管理方法 > 管理者が導入後すぐ試せる簡単カスタマイズ > 静的ページPHPでページを作成する > ミニショップページを設置する
目次 |
ミニショップページを設置する
静的ページPHPにて、以下のコードを記述します。
# Geeklog Minishop Static Page
################################################################################
# Written by Oliver Spiesshofer (oliver AT spiesshofer DOT com)
################################################################################
# Available at:
# files @ http://tokyoahead.com
# files $ CVS @ http://sourceforge.net/projects/gl-plg-multifaq
# Ivy We http://www.ivywe.co.jp
################################################################################
# FEATURES:
# # 注文:
# - 商品点数は無制限
# - 一通貨のみ
# - フレキシブルなセンタリングナンバーフォーム
# # 支払い:
# - 銀行振り込み対応
# - 管理者と購入者への確認メール
# - Email validity チェック
################################################################################
# Instructions:
# 以下の文章を読んでください。
# In the beginnging there are several variables you have to adjust to make this
# work. Also, there is a line in the end that you have to remove.
################################################################################
global $_CONF; // config.phpの変数を参照可能にする
# 商品表。商品をここで指定してください。必要なだけ、いくらでも!
# 商品名, 数量 (例 6箱, 1 個 など), 単価, 商品紹介記事URL
# 価格0のときは、商品名をタイトルとして表示させます。
$products = array(
array("IvySOHOもじもじInput!","1",2100,"http://www.ivysoho.net/mojimoji/"),
array("IvySOHOもじもじマグカップ","1",2100,"")
);
# 注文画面 入力フォームのURL
$pageurl = $_SERVER["REQUEST_URI"];
# 管理者E-mail 複数指定はカンマ(,)で区切る
$owner_email=$_CONF['site_mail'];
# 料金表示フォーマット
$dec = 0; # how many decimals?
$sep = "."; # 小数点キャラクタ
$mil = ","; # 桁区切りキャラクタ
$lang = array('welcome' => "<br>もじもじInput!CDをこのサイトからご購入ください。<br><a href='http://www.ivysoho.net/mojimoji/'>もじもじInput!<br><img src='http://www.ivysoho.co.jp/images/ivysoho/mojimoji130.jpg' border='0'></a><br />"
."<br><br>",
'product' => 'サービス名',
'price' => '単価',
'size' => '単位',
'amount' => '数量',
'sum' => '合計',
'midsum' => '小計:',
'calculate'=>'入力内容を計算',
'checkout'=> '次 へ(ご発注内容)',
'transfer'=> '次 へ',
'currency'=> '-',
'tax' => '消費税:',
'cancel' => 'キャンセル',
'review' => 'ご発注内容:',
'address' => 'ご連絡先の情報を入力してください',
'wesendto'=> 'ご連絡先',
'street' => '住所',
'city' => '都道府県名',
'zip' => '郵便番号',
'country' => '国',
'shipcosts'=>'送料他',
'receipt' => 'ご発注ありがとうございました。',
'subject1' => '[IvyWe発注書]もじもじInput!',
'subject2' => '[IvyWe発注書]もじもじInput!',
'sign' => LB.'---------------------------'.LB.'株式会社アイビー・ウィー',LB.'IvyWe http://www.ivywe.jp',
'shipto' => '', // お届け先
'phone' => '電話番号',
'email' => 'Eメール',
'cname' => '会社名',
'name' => 'お名前',
'conditions'=> '発注内容をメールでお送りします。',
'sendorder'=>'メール送信',
'ordercomplete'=> "",
'ordererror'=>'処理中にエラーが発生しました。',
'invalidmail'=> 'Eメールアドレスが無効です。'
.'ブラウザの「戻る」ボタンをクリックして,再入力してください。',
'payment1' => 'お振込み先口座'.LB.LB
.'銀行名:○○○銀行 No: 00005'.LB
.'支店:○○支店'.LB
.'種類:普通'.LB
.'口座番号:○○○○'.LB
.'口座名:株式会社○○○○○'.LB
.'口座名カナ:カ)○○○○○'.LB,
'payment2' => 'メールでお振込み口座をお知らせしました。<br>入金確認後作業させていただきます。<br>お振込み後お振込みををお知らせください。<br>メールが届かない場合,メールアドレスの誤入力の場合があります。再度ご発注ください。'
);
# フォームから変数を設定
$action = $_POST['action'];
$pieces = $_POST['pieces'];
$shipcosts = $_POST['shipcosts'];
$address = $_POST['address'];
$orgdev = $_POST['orgdev'];
#確認! $register_globals = on does not disturb our calculations
$sum = 0;
# PLEASE MAKE SURE YOU REMOVE THE LAST LINES OF THIS SCRIPT AS INDICATED
################################################################################
# 第1ステップ: 商品リスト紹介
if (empty($action) or ($action == $lang['calculate']) or ($action == $lang['cancel']) ) {
// starting the list with a messgage and the form
$retval .= "<center>{$lang['welcome']}<form action='$pageurl' method='POST'>"
."<table style='text-align:right' width='90%'>"
/* the headers of the table */
."<tr style='text-align:center;background-color:#98A5C2;font:#ffffff'><th>{$lang['product']}</th><th>{$lang['size']}</th>"
."<th>{$lang['price']}</th><th>{$lang['amount']}</th>"
."<th width='90'>{$lang['sum']}</th></tr>";
for ($i=0; $i < count($products); $i++) { #iterate through all products
$url1 = ""; # reset the url for articles that do not have a link
$url2 = "";
$price[$i] = number_format($pieces[$i] * $products[$i][2],$dec,$sep,$mil); # format the prices
$text_singleprice = number_format($products[$i][2],$dec,$sep,$mil);
if (empty($pieces[$i])) {$pieces[$i] = 0;} # set pieces to 0 so it will not be empty in the list
if (!empty($products[$i][3])) { # only create link if there is an url
$url1 = "<a href='{$products[$i][3]}'>";
$url2 = "</a>";
}
# write one lie of articles
if($products[$i][2] == 0){
$retval .= "<tr><th colspan='5' style='text-align:center;background-color:#dddddd'>$url1{$products[$i][0]}$url2</th></tr>";
} else if($products[$i][2] == -1){
$retval .= "<tr><th colspan='5' style='text-align:left;background-color:#CBD2E0;font:#98A5C2'>$url1{$products[$i][0]}$url2</th></tr>";
} else {
$retval .= "<tr><td style='text-align:left' nowrap>$url1{$products[$i][0]}$url2</td>"
."<td nowrap>{$products[$i][1]}</td><td nowrap>¥$text_singleprice {$lang['currency']}</td>" # 円
."<td nowrap><input size='5' type='text' name='pieces[$i]' value='{$pieces[$i]}' style='text-align:right'></td>"
."<td nowrap>¥{$price[$i]} {$lang['currency']}</td></tr>";
}
$sum += ($pieces[$i] * $products[$i][2]); # calc a sum for the prices
$amount = $amount + $pieces[$i]; # calc a sum for number of articles
}
$retval .="<tr><td colspan='5' align='left'><br>メッセージ<br>";
$retval .="<textarea rows='3' cols='40' type='text' name='orgdev' value='{$orgdev}'>".$orgdev."</textarea><br>";
$retval .="</td></tr>";
$retval .= "<tr><td colspan='5'><hr noshade size='1'></td></tr>"; # 水平線を表示
$textsum = number_format($sum,$dec,$sep,$mil); # 合計料金表示フォーマット
$hasshipcosts = 0; # 配送料金のリセット
# 中間合計料金表示
$shipdrop .= ""; # . "<tr><td colspan='3'>{$lang['midsum']}</td><td>$amount</td>"
#."<td>¥$textsum {$lang['currency']}</td></tr>"
# create a dropdown for the shipping regions
#."";
for ($i=0;$i < count($shipping);$i++) { # iterate through the regions
$sel = "";
if ($shipcosts == $shipping[$i][1]) {
$sel = " selected"; # プリセレクト
}
$textshipping1 = number_format($shipping[$i][1],$dec,$sep,$mil); # 配送料金表示フォーマット
}
$textsum = number_format(($sum),$dec,$sep,$mil); # 最終料金
$retval .="$shipdrop" # write sum $ tax
."<tr><td colspan='3'><b>{$lang['sum']}:</b></td><td><b>$amount</b></td>"
."<td><b>¥$textsum {$lang['currency']}</b></td></tr>"
."</table><input type='hidden' name='sum' value='$sum'>"
."<input type='submit' name='action' value='{$lang['calculate']}'>";
if ($sum > 0) { # only allow checkout if there is a sum > 0
$retval .=" <input type='submit' name='action' value='{$lang['checkout']}'>";
}
$retval .= "</form></center>"; # close form, page
# 第2ステップ:清算の準備
} elseif ($action == $lang['checkout']) {
$itemlist .= "<tr><th>サービス名</th><th align='right'>単位</th><th align='right'>数量</th></tr>";
for ($i=0; $i < count($products); $i++) { # compile a list of articles
if ($pieces[$i] > 0) {
$itemlist .= "<tr><td nowrap>{$products[$i][0]}</td><td align='right' nowrap>{$products[$i][1]}</td><td align='right' nowrap>{$pieces[$i]}</td></tr>";
$sum += $pieces[$i] * $products[$i][2];
}
}
$itemlist = substr($itemlist, 0, -2); # remove final ', ' from item list
$textsum = number_format($sum,$dec,$sep,$mil); # format final sum
# write order and display form for money transfer 計算結果表示
$retval .= "<table align='center' width='90%'><tr><td colspan=3 style='text-align:center'><b>{$lang['review']}</b></td><td><tr><td> $itemlist </td></tr>"
// ."<tr><td nowrap style='text-align:right'><b>{$lang['sum']}:</b></td><td nowrap colspan=2> ¥$textsum {$lang['currency']} ({$lang['tax']} $vat {$lang['currency']})"
."<tr><td style='text-align:right'><b>{$lang['sum']}:</b></td><td colspan=2> ¥$textsum {$lang['currency']}"
."<tr><td colspan=3 style='text-align:left'>{$orgdev}</td></tr>"
."<tr><td colspan=3 style='text-align:center'>{$lang['conditions']}</td></tr>"
."<tr><td colspan=3 style='text-align:center'><form action='$pageurl' method='POST'><input type='submit' name='action' value='{$lang['transfer']}'>"
."<input type='hidden' name='shipcosts' value='$shipcosts'>";
for ($i=0; $i < count($products); $i++) { # write hidden form for items transfer to next form
$retval .="<input type='hidden' name='pieces[$i]' value='{$pieces[$i]}'>";
$retval .="<input type='hidden' name='orgdev' value='{$orgdev}'>";
}
# write paypal form
$retval .= "</form></tr></table></div></center>";
# 第3ステップ: 住所入力フォーム
} elseif ($action == $lang['transfer']) {
$retval .= "<center><br /><b>{$lang['address']}:</b><br>" # make form
."<form action='$pageurl' method='POST'>"
."<input type='hidden' name='action' value='{$lang['sendorder']}'>"
."<input type='hidden' name='shipcosts' value='$shipcosts'>";
for ($i=0; $i < count($products); $i++) { # make hidden list of items for next form
$retval .="<input type='hidden' name='pieces[$i]' value='{$pieces[$i]}'>";
}
$retval .="<input type='hidden' name='orgdev' value='{$orgdev}'>";
$retval .= "<table style='text-align:left'>" # write address fields
."<tr><th align='right'>{$lang['cname']}:</th><td><input type='text' name='address[0]' size='20'></td></tr>"
."<tr><th align='right'>{$lang['name']}:</th><td><input type='text' name='address[1]' size='20'>(必須)</td></tr>"
."<tr><th align='right'>{$lang['email']}:</th><td><input type='text' name='address[2]' size='20'>(必須)</td></tr>"
."<tr><th align='right'>{$lang['zip']}:</th><td><input type='text' name='address[3]' size='10'>例)123-4567</td></tr>"
."<tr><th align='right'>{$lang['city']}:</th><td><input type='text' name='address[4]' size='20'></td></tr>"
."<tr><th align='right'>{$lang['street']}:</th><td><input type='text' name='address[5]' size='40'></td></tr>"
."<tr><th align='right'>{$lang['phone']}:</th><td><input type='text' name='address[6]' size='20'>例)01-2345-6789</td></tr>"
."</table>"
."<input type='submit' value='{$lang['sendorder']}'>";
# 第4ステップ: 注文確定
} elseif ($action == $lang['sendorder']) {
if (!COM_isEmail( $address[2] )) { # E-mailフォーマットのチェック
$retval .= "<b>{$lang['invalidmail']}</b>";
} else {
for ($i=0; $i < count($products); $i++) { # make product list
$out2 .="<input type='hidden' name='pieces[$i]' value='{$pieces[$i]}'>";
if ($pieces[$i] > 0) {
$price = number_format($pieces[$i] * $products[$i][2],$dec,$sep,$mil);
$itemlist1 .= "{$products[$i][0]} x {$pieces[$i]} ({$products[$i][1]}) ¥$price {$lang['currency']}".LB;
$itemlist2 .= "<tr><td style='text-align:left'>{$products[$i][0]} x {$pieces[$i]} ({$products[$i][1]})</td><td>¥$price {$lang['currency']}</td></tr>";
$sum += $pieces[$i] * $products[$i][2];
}
}
$textsum = number_format($sum,$dec,$sep,$mil); # format final sum
$out1 .= LB."$address[0] $address[1]様".LB.LB."{$lang['ordercomplete']}".LB."{$lang['receipt']}".LB."{$lang['review']}".LB."$itemlist1" # write the complete message
."{$lang['sum']} ¥$textsum {$lang['currency']}".LB."{$orgdev}".LB
."{$lang['wesendto']}:".LB;
$out2 .= "<br>$address[0] $address[1]様<br><br><br>{$lang['ordercomplete']}<br>{$lang['receipt']}<br><br>{$lang['review']}<br><br><table style='text-align:right'>$itemlist2" # write the complete message
."<tr><td style='text-align:right'>{$lang['sum']}</td><td style='text-align:right'>¥$textsum {$lang['currency']}</td></tr></table>{$orgdev}<br>"
."<br><b>{$lang['wesendto']}:</b><br>";
for ($i=2; $i < count($address); $i++) {
$out1 .="{$address[$i]} "; # add receivers address
$out2 .="{$address[$i]} "; # add receivers address
}
$out1 .= LB.LB."{$lang['payment1']}".LB.LB."{$lang['sign']}";
$out2 .= "<br><br>{$lang['payment2']}";
$email1 = COM_mail( $owner_email, "{$lang['subject1']}", $out1, '', false); # オーナーあてメール
$email2 = COM_mail( $address[2], "{$lang['subject2']}", $out1, '', false); # 購入者へメール
if ($email1 && $email2) { # どちらの送信も成功したら
$retval = $out2;
} else {
$retval = $lang['ordererror']; # メール送信が失敗したら
}
}
}
Geeklog1.5での注意点
Geeklog1.5系から静的ページPHPの出力方法に若干の変更があり、1.4系とは最後の出力処理が変わりました。 「PHPを実行する(return)」の場合と、「PHPを実行する」の場合で、それぞれ対応方法が違います。 これらの対応をしない場合、まっしろなページが出力されることがありますので、中身が何も無い真っ白なページが出力されたら、この対応を行ってください。
※日本語版のGeeklog1.5.1、Geeklog1.5.2では日本版独自カスタマイズとして1.4のままでも動くようにしてあります。
「PHPを実行する」の場合
静的ページPHPのコードの末尾に
echo $retval;
を付加してください。
「PHPを実行する(return)」の場合
静的ページPHPのコードの末尾に
return $retval;
を付加してください。
