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]]を記載すれば、スマホテンプレート切り替えリンクが表示されます。