本文へジャンプ

PowerCMS X で本文内のワードに自動リンクをする
(Keywordsプラグイン)

この記事は「PowerCMS X Advent Calendar 2021」の13日目です。

RIDE HIのサイトでも活用しているKeywordsプラグイン
本文中の特定のワードに、「バイク用語辞典」へのリンクを自動で張ってもらうっていう機能を使っています。

先日リリースされた PowerCMS X ver3.0でこのプラグインに新しくタグが追加されたので、 どう使っていいか検証してみます。

ブロックタグ「<mt:AutoKeywords>」

ブロックタグ<mt:AutoKeywords>で囲われた内容に対して、keywordモデル内のキーワードに合致したテキストをリンク化します。
この機能を利用して、RIDE HIのサイトでも記事本文中の各種バイク用語に対して、「バイク用語辞典」へのリンクを作成しています。

テンプレート

<mt:AutoKeywords>
ABSって知ってますか?absではありません。大文字で「ABS」です。
motoGPではなく、正しくはMotoGPです。
</mt:AutoKeywords>

※keywordモデルには、「ABS」「MotoGP」が登録されている。

出力結果

ABSって知ってますか?absではありません。大文字で「ABS」です。
motoGPではなく、正しくはMotoGPです。

大文字・小文字を区別する「case_sensitive」

「case_sensitive="1"」で、大文字・小文字を区別します。
例えば以下の場合、keyword登録は「ABS」なので「abs」にはリンクをつけません。

テンプレート

<mt:AutoKeywords case_sensitive="1">
ABSって知ってますか?absではありません。大文字で「ABS」です。
motoGPではなく、正しくはMotoGPです。
</mt:AutoKeywords>

出力結果

ABSって知ってますか?absではありません。大文字で「ABS」です。
motoGPではなく、正しくはMotoGPです。

初登場のキーワードのみリンクをつける「replace_once」

指定した場合、1つ目のキーワードのみリンクします。
何度も同じキーワードリンクができてしまうのが問題であれば「replace_once」を指定しましょう。

テンプレート

<mt:AutoKeywords replace_once="1">
ABSって知ってますか?absではありません。大文字で「ABS」です。
motoGPではなく、正しくはMotoGPです。
</mt:AutoKeywords>

出力結果

ABSって知ってますか?absではありません。大文字で「ABS」です。
motoGPではなく、正しくはMotoGPです。

その他、文中のキーワードリンク調整系

word_boundary="1"

単語境界と隣接するキーワードのみを置き換える。
※word_boundary属性は日本語などマルチバイト文字列に対しては有効に機能しません。

指定のある時「BIKE GATHERING」「BIKE GATHERING!」「BIKE GATHERING?」は対象になりますが「BIKE GATHERING2」はリンクになりません。

※keywordモデルに、「BIKE GATHERING」が登録されている。

min_length="数字"

指定した文字数以上のワード"のみ"をリンクに置き換えます。
例えば"2"だと1文字のキーワードはリンク化されません。
※ PowerCMS X ver3.0で追加。

環境変数「keywords_use_mecab」

MeCabがインストールされている状態で、環境変数「keywords_use_mecab」を指定すると、
タグの判別に「MeCab」を使用します。
より柔軟にkeywordの判定をしてくれます。

リンクタグの前後に文字を追加する「prefix」「postfix」

リンクの前後に指定した文字を追加できます。
使いどころとしては、【】をつけるとかでしょうか。
※ PowerCMS X ver3.0で追加。

テンプレート

<mt:AutoKeywords prefix="【" postfix="】">

出力結果

【キーワードリンク】

HTMLタグも使える

そのままではhtmlタグなどは使えませんが、
いったん変数に置き換えれば指定することは可能です。

テンプレート

<mt:SetVarBlock name="SET_tag_01a"><span class="keywords"></mt:SetVarBlock>
<mt:SetVarBlock name="SET_tag_01b"></span></mt:SetVarBlock>
<mt:AutoKeywords prefix="$SET_tag_01a" postfix="$SET_tag_01b">

出力結果ソース

<span class="keywords"><a href="../dictionary/anti-lock-braking-system.html" title="ABS">ABS</a></span>って知ってますか?

リンクを指定した文字列で囲う「enclosure」

「prefix」「postfix」では、個別に指定しましたが、「enclosure」は前後に同じものを追加します。
キーワードの前後に、半角スペースなどを入れたい場合などにいいかもしれません。
※ PowerCMS X ver3.0で追加。

テンプレート

<mt:SetVarBlock name="SET_enclosure"><span class="space"></span></mt:SetVarBlock>
<mt:AutoKeywords enclosure="$SET_enclosure">
ABSって知ってますか?absではありません。大文字で「ABS」です。
motoGPではなく、正しくはMotoGPです。
</mt:AutoKeywords>

出力結果ソース

<span class="space"></span>
<a href="../dictionary/anti-lock-braking-system.html" title="ABS">ABS</a>
<span class="space"></span>
って知ってますか?

※一部省略しています。

リンクタグ内部に属性を追加する「add_attr 」

外側ではなく、内部に追加したい場合は「add_attr」属性を使用してください。
classをつけたりするのに便利です。

テンプレート

<mt:SetVarBlock name="SET_add_attr">class="keywords"</mt:SetVarBlock>
<mt:AutoKeywords add_attr="$SET_add_attr">
ABSって知ってますか?absではありません。大文字で「ABS」です。
motoGPではなく、正しくはMotoGPです。
</mt:AutoKeywords>

出力結果ソース

<a href="../dictionary/anti-lock-braking-system.html" title="ABS" class="keywords">ABS</a>って知ってますか?

※一部省略しています。

その他

  • 「no_title」:リンクに title属性を追加しない
  • 「target_blank」リンクに'target="_blank"'を追加する

「keyword」モデル以外でも使えるようになりました

PowerCMS X ver3.0以降では、keywordモデル以外も指定できるようになりました。
簡単なところで言えば「タグ」を使いたい場合、model="tag"と指定すれば、リンク先は「タグ」モデルになります。

RIDE HIで言えば、リンク先は「バイク用語辞典」なので、バイク用語辞典モデルを指定できます。
今までののように別途keywordモデルを更新しなくていいので手間が省けて助かります。

  • model :モデル名を指定します。
  • name : keywordモデルの「name」にあたるカラム名を指定します。
  • url : keywordモデルの「url」にあたるカラム名を指定します。
  • title : keywordモデルの「title」にあたるカラム名を指定します。
  • class : classカラムのある時その値でフィルタします。

まとめ

今回は、メディアサイトにはよくある機能である、自動リンク機能をご紹介しました。
jsやphpで処理するとクライアントの負荷になってしまいますが、CMSの出力側で処理することでページの表示も早くできると思います。

「Keywordsプラグイン」には、ほかにも本文から「概要文」や「タグ」を自動で抽出して入力欄に設定してくれる機能もあります。 任意での入力に自信がない場合などは使える機能ではないでしょうか。

標準の機能なのでぜひ使ってみてくださいね。

PowerCMS Xの構築ご依頼お待ちしております。

「PowerCMS X」は、どんどんバージョンが上がっていって追加機能を把握するのも大変ですが、そのぶん使いやすくなっているので面白いCMSです。オススメです。

MONSTER DIVEでは、おなじみMovable TypeからPowerCMS Xまで構築経験がありますので、ぜひご相談くださいませ。
Movable Type カスタマイズ構築サービス

Recent Entries
MD EVENT REPORT
What's Hot?