SOY CMS / SOY Shop

ブログトップ

SOY Shopで作成したサイトを表示する1

2014年03月27日

今までSOY Shopのプラグインやパーツモジュールの開発についてを記載してきました。

プラグインの開発には拡張ポイントを利用して、拡張ポイントごとのファイルに処理を書いていきます。

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


拡張ポイントでよく話題に挙がっていたのが、拡張ポイントが実行されるタイミングで、

実行のタイミングを理解するには処理の流れを把握しなければなりません。


今回は特定のページがどのような処理で表示されるのかを追って見ていきたいと思います。


※今回の内容は下記の内容の詳細になります。

情熱大陸放送後のサーバ側の裏話





詳細ページを開くとします。

このページのURLは/shop/item/detail/item-001.htmlとします。


URLの詳細は

shopサイトID(ショップID)

/item/detailがこのページで設定されているURL

item-001.htmlは今見ている商品の商品URLです。


上記のURLを読み込んだ時、

ドメイン以下のディレクトリ名がSOY Shopで作成したサイトのサイトID(ショップID)だった場合、

どのページであっても、/ルートディレクトリ/shop/index.phpを読みに行きます。


index.phpを開くと


<?php 
include("/ルートディレクトリ/{cmsディレクトリ}/soyshop/webapp/conf/shop/shop.conf.php");
include("/ルートディレクトリ/{cmsディレクトリ}/soyshop/webapp/conf/user.conf.php");
SOY2PageController::run();
?>

shop.conf.php、user.conf.phpを読み込んだ後にSOY2PageController::run();を実行しています。


shop.conf.phpはこのショップサイトで利用しているデータベースの設定が記載されており、

user.conf.phpでDSNの設定やSOY2フレームワークの諸々の設定を行った後、

SOY2PageController::run();で読み込みの処理を開始します。


表示の処理が開始されて始めに

/soyshop/webapp/base/SOYShopSiteController.class.phpが読み込まれ、

SOYShopSteControllerのexecute関数が実行されます。




処理を順に見ていくと、


SOY2::import("logic.cart.CartLogic");
SOY2::import("logic.mypage.MyPageLogic");

$dao = SOY2DAOFactory::create("site.SOYShop_PageDAO");

SOY Shopのどのページでも利用できるように、最初にCartLogicとMyPageLogicをインポートし、どのページを読み込むかを調べるためにSOYShop_PageDAOをコンストラクトしています。


/* init event */
SOYShopPlugin::load("soyshop.site.prepare");
SOYShopPlugin::invoke("soyshop.site.prepare");

ここでsoyshop.site.prepareという拡張ポイントを読み込みます。

処理を開始した直後で何かの処理を行いたい場合はsoyshop.site.prepareをご利用ください


$pathBuilder = $this->getPathBuilder();

//パスからURIと引数に変換
$uri  = $pathBuilder->getPath();
$args = $pathBuilder->getArguments();

次にアドレスバーに打ち込まれたURLから値を取り出します。

$uriにはitem/detailといった、データベースに登録されているどのページを参照するかの値を入れ、

$argsには詳細ページでどの商品を開くかの商品URLの値が入ります。


//消費税別モード
$config = SOYShop_ShopConfig::load();
define("SOYSHOP_CONSUMPTION_TAX_MODE", ($config->getConsumptionTax() == SOYShop_ShopConfig::CONSUMPTION_TAX_MODE_ON));
define("SOYSHOP_CONSUMPTION_TAX_INCLUSIVE_PRICING_MODE", ($config->getConsumptionTaxInclusivePricing() == SOYShop_ShopConfig::CONSUMPTION_TAX_MODE_ON));
		
//カート関連
$cartId = soyshop_get_cart_id();
define("SOYSHOP_CURRENT_CART_ID", $cartId);

//マイページ関連
$mypageId = soyshop_get_mypage_id();
define("SOYSHOP_CURRENT_MYPAGE_ID", $mypageId);

次にページの表示の際に利用する定数の設定を行います。


$doCartApplication = ($uri == soyshop_get_cart_uri()) ? true : false;
$doMypageApplication = ($uri == soyshop_get_mypage_uri()) ? true : false;

ここでは、今開いているページがカートとマイページのどちらであるかを調べています。


//カートページ、もしくはマイページを開いた場合
if($doCartApplication || $doMypageApplication){
	//省略
}

次の行で今開いているページがカートページ、もしくはマイページの場合の処理が書かれていますが、一旦省略して続けます。


//https → http
if(isset($_SERVER["HTTPS"]) && strpos(strtolower(soyshop_get_site_url(true)), "https") !== 0){
	if($uri != "_home") array_unshift($args, $uri);
	$args = implode($args,"/");
	SOY2PageController::redirect(soyshop_get_site_url(true) . $args);
	exit;
}

次の行でhttps周りのチェックを行い、


try{
	$page = $dao->getByUri($uri);
}catch(Exception $e){
	//存在しなければ404 NotFountを返す
	return $this->onNotFound();
}

ここでURLから取得した$uriを使ってSOY Shopで作成したどのページを見にいくかを調べます。


次回は今回取得したPageオブジェクトから表示までを見ていきます。