自動リンク化

コメントに URL が入力されたり、メールアドレスが入力されたりしたら、自動的にリンクされるようにします。

takanori

plone では各アイテムにコメントをつけることができますが、基本的にコメントはテキストのみです。

そこで、URL っぽい文字列を入れたら勝手にリンクしたりとか、ISBN(国際標準図書番号)を入力したら amazon へのリンクをはったりとかするようにしました。

目次

できること[goal]

コメントで下記のような記述をすると、自動的にリンクがはられるようになります。

DiscussionTool.py を書き換え[discussion]

コメントの処理は CMFPlone/DiscussionTools.py の中で行っているのですが、これを書き換えます。

書き換えは ZMI からではなくソースコードを直接編集します。

まず、頭の方にあとで作成するコメント処理用の関数を import します。

変更前

from Products.CMFCore.utils import format_stx
from DocumentTemplate.DT_Util import html_quote

変更後

from Products.CMFCore.utils import format_stx
from DocumentTemplate.DT_Util import html_quote
from utils import comment_parser

次に、コメントを表示用に処理する部分で、import した comment_parser を使用するように変更します。

変更前は、html_quote を通して、改行があったら <br> タグに変更してました。:

    elif text_format == 'plain':
        reply.text = text
        reply.cooked_text = html_quote(text).replace('\n','<br>')

変更後は、その代わりに自作の comment_parser でコメントを処理するようになってます。:

    elif text_format == 'plain':
        reply.text = text
        reply.cooked_text = comment_parser(text)

comment_parser 作成[parser]

utils.py のソースコードをダウンロードして、CMFPlone の下におきます。

その後 zope を再起動して、修正した DiscuttionTools.pyutils.py を zope に読み込ませます。

あとはためしにコメント書いたりして、リンクが作成されるか確認してください。

また、utils.py を見てもらえばわかるのですが、変換処理は基本的にこんな感じで単純です。

  1. 正規表現でパターンマッチ
  2. パターンがみつかったら置換
  3. 同じパータンにパッチするものがないか探す
  4. なくなるまでさがしたら次のパターンに

なので、それぞれの環境にあわせて、マッチする正規表現を変えたり、あたらしいパターンを追加したりとかもできると思います。

参考[reference]

下記のサイトとコードを参考にしました。