Help us understand the problem. What is going on with this article?

[baserCMS]オプショナルリンク利用時、リンク中にブロック要素を含む場合のサンプル

More than 3 years have passed since last update.

Blogヘルパの getPostLinkUrl() では、記事のURL変更が効かないため、ビュー側で aタグ内の文字列を調整し、postTitle()(or getPostTitle())がそのまま利用できるカタチにします。

想定している対象者

  • baserCMSでウェブサイトを制作をしている方
  • baserCMSでプラグインを制作している方

発生状況

  1. getPostLinkUrl() でブログ記事のURLを表示している際
  2. オプショナルリンクプラグインの機能で、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 ?>
materializing
Cakeをもぐもぐ。。。 https://github.com/materializing
http://www.materializing.net/
e-catchup
国産オープンソース baserCMS を世に送り出したWeb技術のプロフェッショナル集団です。
https://catchup.co.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした