SOY CMS / SOY Shop

ブログトップ

SOY Shopプラグインの解説 オーダーカスタムフィールド1

2015年02月12日

カートの配送・支払の選択画面で入力できる項目を増やしたいとします。

その時にカスタマイズ用のカートを用意して対応でも良いですが、

カートのカスタマイズ カスタマイズ用のカートの準備


オーダーカスタムフィールドの拡張ポイントで増やすことも可能です。

SOY Shopプラグインの解説 拡張ポイントについて


オーダーカスタムフィールドで増やすと、

POSTの処理をプラグインの中で行えるので大変便利です。




今回は同梱されているオーダーカスタムフィールドを元にコードを見ていきます。



オーダーカスタムフィールドは、

カートと管理画面でフィールド(フォーム)を追加するプラグインで、

soyshop.order.customfield.phpという拡張ポイントで処理を行います。


/soyshop/webapp/src/logic/plugin/extensions/soyshop.order.customfield.phpを見ると、


class SOYShopOrderCustomfield implements SOY2PluginAction{

	private $cart;

	/**
	 * セッションの削除
	 */
	function clear(CartLogic $cart){		
	}

	/**
	 * @param array $param 中身は$_POST["customfield_module"]
	 */
	function doPost($param){
	}
	
	/**
	 * 注文完了時に何らかの処理を行う
	 * @param CartLogic $cart
	 */
	function order(CartLogic $cart){
	}
	
	/**
	 * エラーチェック
	 * @return Boolean
	 */
	function hasError($param){
		return false;
	}

	/**
	 * カートで表示するフォーム
	 * ["name"]、["description"],["error"]を返す
	 * @param CartLogic $cart
	 * @return Array("name" => "", "description" => "", "error" => "")
	 */
	function getForm(CartLogic $cart){
	}
	
	/**
	 * 管理画面で表示する値
	 * ["name"]、["value"]を返す
	 * @param Integer OrderId
	 * @return Array array(array(("name" => "", "value" => ""))
	 */
	function display($orderId){
		
	}
	
	/**
	 * @param int $orderID
	 * @return Array labelとformの連想配列を格納 array(array("label" => "", "form" => ""))
	 */
	function edit($orderId){
		
	}
	
	/**
	 * saveする際のconfigを取得して返す
	 */
	function config($orderId){
		
	}

	function getCart() {
		return $this->cart;
	}
	function setCart($cart) {
		$this->cart = $cart;
	}
}

となっています。


各コードを見ていくと、



カートの配送・支払画面(CartPage03)でフォームを表示する為に

getFormを用意しています。


getFormでArray("name" => "", "description" => "", "error");の配列を返すことで、

項目とフォームを表示出来る様になります。

(1.16.0から必須項目の有無のisRequiredにも対応します。)


nameには新しく追加したフィールド名、

descriptionに説明の文章付のフォームのHTMLを入れることで、



この時、フォームのname属性には必ず、name="customfield_module[任意の名前]"にしておきましょう。




次のフォームで入力した値のPOSTですが、clear、hasError、doPostの順で読み込まれます。


clearはdoPostでセッションに入れた値の削除等の処理を書きます。


hasErrorでは、入力した値に間違いがないかチェックをして、Boolean値で返します。

その後、doPostが読み込まれ、モジュールの登録とCartLogicのセッションに値を保持します。

CartLogicのmoduleプロパティについて


この時、$cart->setAttribute("key", "value");で値を保持することで、フォームに入力した内容の保持となり、

$cart->setOrderAttribute("key", "label", "value");で値を保持することで、



お支払・配送方法の項目の末尾に追加されます。

この後、ご注文確定をクリックすることで、orderが読み込まれ、今回保持した値を注文情報に追加します。


次回は管理画面側の処理を見ていきます。