baserCMSは、ブログなどに別のURLやレイアウトをあてがう「エイリアス」機能があります。
ブログを複数設置できるbaserCMSではあまり使用する機会は少ないかもしれませんが、サブサイトなどでエイリアスを使って本体サイトのブログを呼び出して使用したりする際に、サブサイトのレイアウトを使用したいときなどに使える機能です。
ただし、そのままだと記事へのリンクなどが元のブログのURLに変わってしまうため、少し工夫が必要になります。
ここでは、それらの問題を解消するちょっとした小ネタを紹介します。
この記事は、以下の環境で動作確認を行っております。
baserCMS version 5.0.11
ブログエイリアスのindexページの記事へのリンク
$this->Blog->getPostLinkUrl($post)
で、リンクURLが元のURLに戻ってしまうときは
index.phpのループの前に下記の記述をつけると現在いるコンテンツがセットされて、エイリアスの場合はエイリアスのURLで記事のリンクが出力されます。
$currentContent = $this->BcBaser->getCurrentContent();
// エイリアスの場合、エイリアスのコンテンツをURLにセット
//($this->Blog->currentContentで、元のBlogContentがセットされてしまいリンクが元URLに戻ってしまうため)
if (!empty($currentContent->alias_id)) {
$this->Blog->currentContent = $currentContent;
}
blogPosts
$this->BcBaser->blogPosts($blogname);
では、エイリアスを呼び出せないため
呼び出した先のブログ記事などのURLをエイリアスに変更したいときは
$contntUrl = {エイリアスのURL};
$contentTable = \Cake\ORM\TableRegistry::getTableLocator()->get('BaserCore.Contents');
$content = $contentTable->find()->where([
'Contents.url' => $contntUrl,
'Contents.type' => 'BlogContent',
'Contents.alias_id IS NOT' => null,
])->first();
if(!empty($content)) $this->Blog->currentContent = $content
これで
$this->Blog->getPostLinkUrl($post)
などのリンクURLがエイリアスのものに変わります。
ポイント
$this->Blog->currentContent = $XXXXXXXX;
でブログコンテンツの情報を変更できるので、色々試してみるのも面白いです。
年別アーカイブなど
/templates/element/blog_yearly_archives.php
をエイリアスでも共通で使用している時、
年別のURLが元のブログへのURLとなってしまうため
if (empty($currentContent)) $currentContent = $this->BcBaser->getCurrentContent();
でcurrentContentを取得して
リンクURLを
$this->BcBaser->getBlogContentsUrl($id) . 'archives/date/' . $postedDate['year']
↓↓
$currentContent->url . 'archives/date/' . $postedDate['year']
にしてやると元のBlogとエイリアスのどちらでもそれぞれのコンテンツのURLになります。
ポイント
$this->BcBaser->getCurrentContent();
でベースとなるURLをしっかり指定する。
エイリアスも使っていくとなかなか面白い機能なので、どんどん使っていきましょう。
注意
一部情報が古くなっている場合がございます。
その場合は、ご指摘ください。