ブログトップ
カートページを表示する2
2014年03月29日
前回はページコントローラでカートを表示するところを説明しましたが、
肝心なカートのフォームの出力に関しては触れていません。
今回は各カートの表示についてを説明します。
(各カート→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ファイルを取得して表示します。