modxのMobileTemplateSwitcherへPCテンプレート強制表示機能を追加しました

modxへスマホでアクセスした際に、スマホ用テンプレートを読み込み表示してくれる便利なプラグイン「[MobileTemplateSwitcher](http://modx.com/extras/package/mobiletemplateswitcher)」へ、強制的にPCテンプレートで表示させる機能を追加しました。

MobileTemplateSwitcherは、スマホユーザーがアクセスした際に、スマホテンプレートを表示させる事しかできませんでしたが、この機能を追加することにより、スマホユーザーがPCテンプレートとスマホテンプレートを自由に切り替えることができるので、サイトの利便性が増します。

##仕様

スマホテンプレートが表示されている時に、URL後ろに「?template=pc_temp」を追加したリンクをクリックすると、PCテンプレートへ切り替わります。

URL例
http://example.com/?template=pc_temp
http://example.com/content.html?template=pc_temp

PCテンプレートへ切り替えた情報は7日間クッキーに保存されます。
そして、ユーザーが明示的にスマホテンプレートへ切り替えしないかぎり、modx内のどのページを見ても、スマホユーザーにはPCテンプレートが表示されます。

逆に、スマホユーザーがPCテンプレートからスマホテンプレートへ戻したいときには、URL後ろに「?template=sp_temp」を追加したリンクをクリックするとスマホテンプレートに切り替わります。

URL例
http://example.com/?template=sp_temp
http://example.com/content.html?template=sp_temp

クッキーに記録しておいたPCテンプレートへ切り替えた情報が上書き削除されますので、MobileTemplateSwitcherのデフォルトの状態に戻ります。

このような仕様で、スマホユーザーへ、スマホ・PCテンプレートを自由に切り替えさせてます。

##MobileTemplateSwitcherのコードを置き換え

まず、[MobileTemplateSwitcher](http://modx.com/extras/package/mobiletemplateswitcher)でダウンロードできるコードの内、以下の箇所を置き換えてください。

**置き換え前**
`if(!strstr($modx->documentContent, "donotswitch")) { // this page is not switchable
	if(mobile_device_detect(true,true,true,true,true,true,false,false)){
		$overrideTemplate = $template;
	} else if (isset($_COOKIE['template']) && $usecookie == 'true') {
		$overrideTemplate = $_COOKIE['template']; 
	}
	if (isset($overrideTemplate)) {
		$table = $modx->getFullTableName("site_templates");
		$result = $modx->db->select("id, content",$table,"templatename = '".$overrideTemplate."'");
		if($modx->db->getRecordCount($result) == 1) {
			$row = $modx->db->getRow($result);
			$modx->documentObject['template']=$row['id'];
			$modx->documentContent = $row['content'];
		} else {
			$this->messageQuit("Error retrieving template.");
		}
		if($usecookie == 'true') {
			setcookie("template",$overrideTemplate,time()+604800, "/", "", 0);
		}
	}
}`

**置き換え後**
`if(!strstr($modx->documentContent, "donotswitch")) { // this page is not switchable
	if($_GET['template'] && ($_GET['template'] == 'pc_temp'|| $_GET['template'] == 'sp_temp')){
		setcookie("template",$_GET['template'],time()+604800, "/", "", 0);
	}
	if(mobile_device_detect(true,true,true,true,true,true,false,false)){
		$overrideTemplate = $template;
	} else if (isset($_COOKIE['template']) && $usecookie == 'true') {
		$overrideTemplate = $_COOKIE['template']; 
	}
	if((isset($_COOKIE['template']) && $_COOKIE['template'] == 'pc_temp' && $_GET['template'] != 'sp_temp')||($_GET['template']== 'pc_temp')){
	} else if (isset($overrideTemplate)) {
		$table = $modx->getFullTableName("site_templates");
		$result = $modx->db->select("id, content",$table,"templatename = '".$overrideTemplate."'");
		if($modx->db->getRecordCount($result) == 1) {
			$row = $modx->db->getRow($result);
			$modx->documentObject['template']=$row['id'];
			$modx->documentContent = $row['content'];
		} else {
			$this->messageQuit("Error retrieving template.");
		}
		if($usecookie == 'true') {
			setcookie("template",$overrideTemplate,time()+604800, "/", "", 0);
		}
	}
}`


##スマホテンプレートに表示させるリンク

MobileTemplateSwitcherで読み込んているスマホ用テンプレートへ、例えば以下のコードを挿入することで、PCテンプレートへの切り替えが可能です。

`<p id="switch_temp"><a href="[(site_url)][~[*id*]~]?template=pc_temp">PC版表示へ</a></p>`

##PCテンプレートに表示させるリンク

スニペット名「switch_temp」でスニペットを新規作成します。
スマホでPCテンプレートヘアクセスした時だけ、スマホテンプレート切り替えリンクが表示されるよう、スニペットには、以下のコードを貼り付けます。

`<?php
if(mobile_device_detect(true,true,true,true,true,true,false,false)){
echo '<p id="switch_temp"><a href="[(site_url)][~[*id*]~]?template=sp_temp">スマホ版表示へ</a></p>';
}
?>`

そして、すべてのPC用テンプレートへ、[[switch_temp]]を記載すれば、スマホテンプレート切り替えリンクが表示されます。