modxへスマホでアクセスした際に、スマホ用テンプレートを読み込み表示してくれる便利なプラグイン「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でダウンロードできるコードの内、以下の箇所を置き換えてください。
置き換え前
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]]を記載すれば、スマホテンプレート切り替えリンクが表示されます。