StaticPagesMinishop14

提供: GeeklogJpWiki

[3]管理方法 > 管理者が導入後すぐ試せる簡単カスタマイズ > 静的ページPHPでページを作成する > ミニショップページを設置する

目次

ミニショップページを設置する

もじもじInput! SHOP

静的ページ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;

を付加してください。

個人用ツール