先日、フレームワークに『jQueryMobile』を使用したスマートフォン専用サイトを公開しましたが、『baserCMS』でスマホサイトを制作する際にいくつか問題点がありましたので参考までに記載します。
この記事は「baserCMS 1.6.15」に関する情報です。(2012.05.08追記)
Ajaxによるページ切り替えができない
『jQueryMobile』の売りでもある『Ajaxによるスムーズなページ切り替え』ですが、『baserCMS』のページコンテンツでは、『undefined』となります。(ブログのコンテンツでは問題なし)
色々調べましたが、原因が不明だったため『Ajaxによるページ切り替え』を諦め遷移を止めました。
「baserCMS 2.0.0」でも問題は解消されていませんでした。(2012.05.08追記)
Ajaxページ遷移を止める
下記のJSを『jquery.mobile-1.0.1』を読み込む前に記述します。
$(document).bind("mobileinit", function(){
$.mobile.ajaxEnabled = false;
$.mobile.pushStateEnabled = false;
})
カテゴリ名(ID)を取得できない
これは、『jQueryMobile』だけでなく『Smartphone』全体の問題ですが、「ContentsName」関数でページのカテゴリ名(ID)が取得できません。
また、『[baserCMS] 特定のカテゴリに条件を適応する方法』で書いたパッチを当てるとブログとメールフォームに関しても取得できなくなります。
「ContentsName」関数での出力結果
コンテンツ | パッチあり | パッチなし |
---|---|---|
ページ | SmartphoneS | Pages |
ブログ | SmartphoneBlogBlog | 正常に取得できる |
メールフォーム | SmartphoneMailMail | 正常に取得できる |
そのため、baserCMSの「ContentsName(true)」関数(詳細な名称までを取得できる)とPHPの正規表現によるマッチングを行う「preg_match」関数を用いてカテゴリを特定しました。
「ContentsName(true)」でそのカテゴリに共通する文字列を洗い出す
まず、「ContentsName(true)」で詳細な名称までを取得し、そのカテゴリに共通する文字列を洗い出します。
baserCMS2 の場合は、「$baser」を「$bcBaser」に変更してください。
また、『[baserCMS2] スマホ・携帯サイトでカテゴリ名を取得』をあわせてご参照ください。(2012.05.08追記)
<?php $baser->ContentsName(true) ?>
「preg_match」と「ContentsName(true)」でカテゴリを特定
あとは「preg_match」関数で、共通する文字列をマッチングさせ、カテゴリを特定します。
<?php if (preg_match("/カテゴリに共通する文字列/", $baser->getContentsName(true))): ?>
そのカテゴリにだけに適用する内容をhtml等で記述
<?php endif ?>