3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-04-10

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

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?