この記事は「PowerCMS X Advent Calendar 2021」の13日目です。
RIDE HIのサイトでも活用しているKeywordsプラグイン。
本文中の特定のワードに、「バイク用語辞典」へのリンクを自動で張ってもらうっていう機能を使っています。
先日リリースされた PowerCMS X ver3.0でこのプラグインに新しくタグが追加されたので、 どう使っていいか検証してみます。
ブロックタグ<mt:AutoKeywords>で囲われた内容に対して、keywordモデル内のキーワードに合致したテキストをリンク化します。
この機能を利用して、RIDE HIのサイトでも記事本文中の各種バイク用語に対して、「バイク用語辞典」へのリンクを作成しています。
<mt:AutoKeywords> ABSって知ってますか?absではありません。大文字で「ABS」です。 motoGPではなく、正しくはMotoGPです。 </mt:AutoKeywords>
※keywordモデルには、「ABS」「MotoGP」が登録されている。
ABSって知ってますか?absではありません。大文字で「ABS」です。
motoGPではなく、正しくはMotoGPです。
「case_sensitive="1"」で、大文字・小文字を区別します。
例えば以下の場合、keyword登録は「ABS」なので「abs」にはリンクをつけません。
<mt:AutoKeywords case_sensitive="1"> ABSって知ってますか?absではありません。大文字で「ABS」です。 motoGPではなく、正しくはMotoGPです。 </mt:AutoKeywords>
ABSって知ってますか?absではありません。大文字で「ABS」です。
motoGPではなく、正しくはMotoGPです。
指定した場合、1つ目のキーワードのみリンクします。
何度も同じキーワードリンクができてしまうのが問題であれば「replace_once」を指定しましょう。
<mt:AutoKeywords replace_once="1"> ABSって知ってますか?absではありません。大文字で「ABS」です。 motoGPではなく、正しくはMotoGPです。 </mt:AutoKeywords>
ABSって知ってますか?absではありません。大文字で「ABS」です。
motoGPではなく、正しくはMotoGPです。
単語境界と隣接するキーワードのみを置き換える。
※word_boundary属性は日本語などマルチバイト文字列に対しては有効に機能しません。
指定のある時「BIKE GATHERING」「BIKE GATHERING!」「BIKE GATHERING?」は対象になりますが「BIKE GATHERING2」はリンクになりません。
※keywordモデルに、「BIKE GATHERING」が登録されている。
指定した文字数以上のワード"のみ"をリンクに置き換えます。
例えば"2"だと1文字のキーワードはリンク化されません。
※ PowerCMS X ver3.0で追加。
MeCabがインストールされている状態で、環境変数「keywords_use_mecab」を指定すると、
タグの判別に「MeCab」を使用します。
より柔軟にkeywordの判定をしてくれます。
リンクの前後に指定した文字を追加できます。
使いどころとしては、【】をつけるとかでしょうか。
※ PowerCMS X ver3.0で追加。
<mt:AutoKeywords prefix="【" postfix="】">
そのままでは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>って知ってますか?
「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」属性を使用してください。
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>って知ってますか?
※一部省略しています。
PowerCMS X ver3.0以降では、keywordモデル以外も指定できるようになりました。
簡単なところで言えば「タグ」を使いたい場合、model="tag"と指定すれば、リンク先は「タグ」モデルになります。
RIDE HIで言えば、リンク先は「バイク用語辞典」なので、バイク用語辞典モデルを指定できます。
今までののように別途keywordモデルを更新しなくていいので手間が省けて助かります。
今回は、メディアサイトにはよくある機能である、自動リンク機能をご紹介しました。
jsやphpで処理するとクライアントの負荷になってしまいますが、CMSの出力側で処理することでページの表示も早くできると思います。
「Keywordsプラグイン」には、ほかにも本文から「概要文」や「タグ」を自動で抽出して入力欄に設定してくれる機能もあります。 任意での入力に自信がない場合などは使える機能ではないでしょうか。
標準の機能なのでぜひ使ってみてくださいね。
「PowerCMS X」は、どんどんバージョンが上がっていって追加機能を把握するのも大変ですが、そのぶん使いやすくなっているので面白いCMSです。オススメです。
MONSTER DIVEでは、おなじみMovable TypeからPowerCMS Xまで構築経験がありますので、ぜひご相談くださいませ。
→ Movable Type カスタマイズ構築サービス