マイページを表示する2
前回はページコントローラでマイページを表示するところを説明しましたが、
肝心なマイページの各ページの出力に関しては触れていません。
今回はマイページ表示の詳細を見ていきます。
カートページ同様、
SOYShopSiteController.class.phpの242行目付近で、
マイページのテンプレートに記載した<!-- shop:module="common.mypage_applicaiton" /-->を読み込むことで各ページを出力します。
このパーツモジュールである
/soyshop/webapp/src/module/site/common/mypage_application.phpを見ると
function soyshop_mypage_application($html, $htmlObj){ $mypageId = $htmlObj->getMyPageId(); $args = $htmlObj->getPageArgs(); ob_start(); include(SOY2::RootDir() . "mypage/${mypageId}/page.php"); $html = ob_get_contents(); ob_end_clean(); echo $html; }
$mypageIdにはディフォルトでbryon、$argsには今見ているページ、
ログインページなら、/shop/user/loginのuserディレクトリ以下のloginが格納されており、
/soyshop/webapp/src/mypage/bryon/page.phpを読み込みます。
スクリプトのファイルは/_common/pages/以下から
HTMLファイルは/bryon/pages/以下からとカートページと大体同じですが、
読み込むファイルの取得方法はカートページと異なります。
page.phpの24行目付近で
//マイページロジックの設定 $myPage = MyPageLogic::getMyPage(SOYSHOP_CURRENT_MYPAGE_ID); if(SOY2HTMLFactory::pageExists($htmlObj->createPagePath(true)."Page")){ //Hoge.IndexPage $path = $htmlObj->createPagePath(true)."Page"; }else{ //HogePage $path = $htmlObj->createPagePath() . "Page"; } $path = MyPageLogic::convertPath($path); define("SOYSHOP_MYPAGE_PATH",$path);
$htmlObj->createPagePath(true)を使って読み込むファイルを取得しています。
たとえば、
ログインページだと、URLが/shop/user/loginでした。
このページを見ている時にcreatePagePathの値をダンプしてみると、login.Indexの値が格納されています。
この値から、
/_common/pages/login/IndexPage.class.phpを取得しにいくがファイルが存在しないため、
/_common/pages/loginPage.class.phpを読みにいく。
/shop/user/order/detail/3の場合は、
order.detail.Indexが格納されているため、
/_common/pages/order/detail/IndexPage.class.phpを取得しにいくがファイルが存在しないため、
/_common/pages/order/DetailPage.class.phpを読みにいく。
3は$argsに格納され、
try{ $page = SOY2HTMLFactory::createInstance($path, array("arguments" => $args)); }catch(Exception $e){ $page = SOY2HTMLFactory::createInstance("ErrorPage", array("arguments" => $args)); } $page->display();
取得したファイルのパスと$argsに放り込んだ値を元にマイページを表示します。
$argsの値は上記の注文詳細のように、
たくさんある注文の中から特定の注文を確認するときに使用する注文IDといった値が入っています。