SOY CMS / SOY Shop

ブログトップ

カートページを表示する2

2014年03月29日

前回はページコントローラでカートを表示するところを説明しましたが、

肝心なカートのフォームの出力に関しては触れていません。

カートページを表示する1


今回は各カートの表示についてを説明します。

(各カート→bryonやsmartといった管理画面で設定するカートのこと)




前回の続きでSOYShopSiteController.phpのcommon_execute()を見ていきます。


common_executeは

/soyshop/webapp/src/base/site/SOYShopPageBase.phpにある関数で、

<head>内のmetaの置換を行う他、

パーツモジュール(shop:module)の実行も行います。

($this->buildModules()内で実行しています)


カートはカートのテンプレートに

<!-- shop:module="common.cart_applicatoin" /-->と記述することでフォームの箇所が表示されます。


このパーツモジュールのファイルである

/soyshop/webapp/src/module/site/common/cart_application.phpを見ると


<?php

function soyshop_cart_application($html, $htmlObj){
	$cartId = $htmlObj->getCartId();

	ob_start();
	include(SOY2::RootDir() . "cart/${cartId}/page.php");
	$html = ob_get_contents();
	ob_end_clean();

	echo $html;
}
?>

上記のコードにあるように、

/soyshop/webapp/src/cart/bryon/page.phpを読みに行きます。

(SOY2RootDir()では、/soyshop/webapp/srcを出力し、説明はディフォルト設定のbryonカートで進めます。)


bryonカートのpage.phpを見ると


<?php
//共通ロジックを使う
include_once(dirname(dirname(__FILE__)) . "/_common/page.php");
?>

_commonのpage.phpを読みに行きます。

(/soyshop/webapp/src/cart/_common/page.php)

カートのカスタマイズ カートの仕様


要点をまとめると


include_once(dirname(__FILE__) . "/classes.php");
SOY2HTMLConfig::PageDir(dirname(__FILE__) . "/pages/");

これでカートの各スクリプトは/_common/pages/以下のファイルから取得し、


$templateDir = SOYSHOP_SITE_DIRECTORY . ".template/cart/" . SOYSHOP_CURRENT_CART_ID . "/";
define("SOYSHOP_DEFAULT_CART_TEMPLATE_DIR",soy2_realpath(dirname(dirname(__FILE__))."/".SOYSHOP_CURRENT_CART_ID) . "pages/");
if(file_exists($templateDir)){
	define("SOYSHOP_MAIN_CART_TEMPLATE_DIR", $templateDir);
}else{
	define("SOYSHOP_MAIN_CART_TEMPLATE_DIR", SOYSHOP_DEFAULT_CART_TEMPLATE_DIR);
}

HTMLファイルは/bryon/pages/以下のファイルから取得する。


$pageId = $cart->getAttribute("page");
if(is_null($pageId)) $pageId = "Cart01";

今開いているカートが何ページ目か?を調べ

(顧客情報はCart02、支払方法の選択がCart03)


try{
	$page = SOY2HTMLFactory::createInstance($pageId . "Page");
	$page->display();
}catch(Exception $e){
	$cart->clearAttribute("page");
	$page = SOY2HTMLFactory::createInstance("ErrorPage");
	$page->display();
}

フォームのページを指定して/_common/pages/以下から該当するページのPHPファイルを取得、

/bryon/pages/以下からHTMLファイルを取得して表示します。