Blogヘルパの getPostLinkUrl() では、記事のURL変更が効かないため、ビュー側で aタグ内の文字列を調整し、postTitle()(or getPostTitle())がそのまま利用できるカタチにします。
想定している対象者
- baserCMSでウェブサイトを制作をしている方
- baserCMSでプラグインを制作している方
発生状況
- getPostLinkUrl() でブログ記事のURLを表示している際
- オプショナルリンクプラグインの機能で、URL書換え処理を指定しても、URLが変更されない
環境
- baserCMS 3.0.10
原因
getPostLinkUrl() では、URL書換えに必要な beforeGetLink、afterGetLink イベントが走らないため。
対処例
ビュー側で aタグ内の文字列を調整し、postTitle()(or getPostTitle())がそのまま利用できるカタチにします。
<ul>
<?php if ($posts): ?>
<?php foreach ($posts as $key => $post): ?>
<?php $links = ''; ?>
<li>
<?php
$links .= '<div class="img-eyecatch">'. $this->Blog->getEyeCatch($post, array('link' => false)) .'</div>';
$links .= '<div class="txt-date">'. $this->Blog->getPostDate($post, 'Y.m.d') .'</div>';
$links .= '<div class="txt-title">'. $this->Blog->getPostTitle($post, false) .'</div>';
$post['BlogPost']['name'] = $links;
?>
<?php $this->Blog->postTitle($post) ?>
</li>
<?php endforeach; ?>
<?php else: ?>
<li class="no-data">記事がありません</li>
<?php endif ?>
</ul>
記事概要を含む場合、記事タイトル箇所のみ特定のタグで囲う場合
- 記事概要を含む場合は、trim() で前後の余分な空白を削除する
- 記事タイトル箇所のみ特定のタグで囲う場合は、一時的に実体参照変換を掛けて全て文字列扱いとし、その後、表示の際に decode して戻して必要なhtmlタグを反映させる
- 記事に「URL: リンクなし」指定時に正しく動作しないため
<?php if ($posts): ?>
<?php foreach ($posts as $key => $post): ?>
<dl>
<dt><?php echo $this->Blog->getPostDate($post, 'Y.m.d') ?>
<?php if (Hash::get($post, 'BlogCategory.id')): ?>
<span class="icon icon_<?php echo Hash::get($post, 'BlogCategory.name') ?>">
<?php echo Hash::get($post, 'BlogCategory.title') ?>
</span>
<?php endif ?>
</dt>
<dd>
<?php
$links = '';
$links .= '<string>' . $this->Blog->getPostTitle($post, false) . '</string>';
$links = htmlspecialchars($links);
$links .= trim(strip_tags(Hash::get($post, 'BlogPost.content')));
$post['BlogPost']['name'] = $links;
?>
<?php echo htmlspecialchars_decode($this->Blog->getPostTitle($post)) ?>
</dd>
</dl>
<?php endforeach; ?>
<?php else: ?>
<dl>
<dt class="no-data">記事がありません</dt>
</dl>
<?php endif ?>