SOY CMS / SOY Shop

ブログトップ

マイページを表示する2

2014年04月01日

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

肝心なマイページの各ページの出力に関しては触れていません。

マイページを表示する1


今回はマイページ表示の詳細を見ていきます。




カートページ同様、

SOYShopSiteController.class.phpの242行目付近で、

マイページのテンプレートに記載した<!-- shop:module="common.mypage_applicaiton" /-->を読み込むことで各ページを出力します。

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


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

/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/以下からとカートページと大体同じですが、

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


読み込むファイルの取得方法はカートページと異なります。

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といった値が入っています。