5月1日、baserCMS2正式版がリリースされました。
このサイトも早速 baserCMS2 にアップデートさせて頂き、特に大きな問題もなく動作しております。
ユーザー会の皆様をはじめ開発等に関わっていらっしゃる皆様に感謝申し上げます。
さて本題ですが、baserCMS 2.0.0では「ContentsName」と「getContentsName」関数でスマートフォンサイト(公開してませんが携帯サイトも同様)のページのカテゴリ名(ID)が取得できませんでした。
そこで、ヘルパー(bc_baser.php)を修正して対応しましたのでその方法をご紹介します。
はじめに
「ContentsName」と「getContentsName」関数の不具合は、スマホ・携帯サイトの固定ページの問題で、PCサイトでは正常にページのカテゴリ名(ID)を取得できます。スマホまたは携帯サイトを公開する場合で、この関数を使用する場合にご活用ください。また、ページのカテゴリ名(ID)が取得方法は、『[baserCMS] 特定のカテゴリに条件を適応する方法』に記載しております。
なお、掲載したプログラムの修正は当サイトでは問題なく動作しておりますが、「bc_baser.php」の設置や修正は自己責任でお願いします。
bc_baser.php の複製および修正内容
bc_baser.php の複製
BaserCMSは「baser」ディレクトリ内は触らないというのが基本(アップデートで上書きされるから)で、「app」にコピーすることでそのファイルが優先され読み込まれる仕様です。
そこでまずは「baser/views/helpers/」ディレクトリの「bc_baser.php」を「app/views/helpers/」へコピーしました。
bc_baser.php の修正(1)
bc_baser.php を修正しない場合の「ContentsName」の出力結果は、スマホ・携帯ともにすべての固定ページが「Pages」と出力され、「ContentsName(true)」の出力結果は、スマホは「PagesSmartphoneDisplay」、携帯は「PagesMobileDisplay」と出力されます。なお、ブログとメールフォームに関してはスマホ・携帯ともに正常に取得できます。
そこで、bc_baser.php 1144行目辺りの「 } else { 」の直前に下記ソースを追記し対応しました。
// スマホの場合(CoreDesign 追記)
} elseif($controller=='pages' && $action=='smartphone_display') {
if(strpos($pass[0], 'pages/') !== false) {
$pageUrl = str_replace('pages/','', $pass[0]);
} else {
$pageUrl = h($this->params['url']['url']);
$pageUrl = str_replace('s/','', $pageUrl);
}
if(preg_match('/\/$/', $pageUrl)) {
$pageUrl .= 'index';
}
$pageUrl = preg_replace('/\.html$/', '', $pageUrl);
$pageUrl = preg_replace('/^\//', '', $pageUrl);
$aryUrl = split('/',$pageUrl);
// 携帯の場合(CoreDesign 追記)
} elseif($controller=='pages' && $action=='mobile_display') {
if(strpos($pass[0], 'pages/') !== false) {
$pageUrl = str_replace('pages/','', $pass[0]);
} else {
$pageUrl = h($this->params['url']['url']);
$pageUrl = str_replace('m/','', $pageUrl);
}
if(preg_match('/\/$/', $pageUrl)) {
$pageUrl .= 'index';
}
$pageUrl = preg_replace('/\.html$/', '', $pageUrl);
$pageUrl = preg_replace('/^\//', '', $pageUrl);
$aryUrl = split('/',$pageUrl);
bc_baser.php の修正(2)
baserCMS2では、トップページの場合「Home」を出力する仕様になっていますが、(1)だけでは「Default」と出力されます。
そのため、1186行目辺りの「 } else { 」の直前にも下記ソースを追記しました。
// スマホ・携帯のトップページの場合に「Home」を出力(CoreDesign 追記)
} elseif(count($aryUrl) == 1 && $aryUrl[0] == '') {
$contentsName = $home;
以上、お役に立てれば幸いです。