自動リンク化
コメントに URL が入力されたり、メールアドレスが入力されたりしたら、自動的にリンクされるようにします。
plone では各アイテムにコメントをつけることができますが、基本的にコメントはテキストのみです。
そこで、URL っぽい文字列を入れたら勝手にリンクしたりとか、ISBN(国際標準図書番号)を入力したら amazon へのリンクをはったりとかするようにしました。
目次
- できること[goal]
- DiscussionTool.py を書き換え[discussion]
- comment_parser 作成[parser]
- 参考[reference]
できること[goal]
コメントで下記のような記述をすると、自動的にリンクがはられるようになります。
http://takanory.netのように URL を書く → http://takanory.netwww.asahi.comのように www. からはじまる URL を書く → www.asahi.comftp.ring.gr.jp/pub/のように ftp. からはじまる URL を書く → ftp.ring.gr.jp/pub/foo@takanory.netのようにメールアドレスを書く → foo@takanory.netid:XXXXXXと書く → その plone のメンバーのホーム(/Members/XXXXXX)にリンクisbn:4756146090と書籍の番号を書く → isbn:4756146090 (amazon の商品へリンク)asin:B000BL84JMと amazon の商品コードを書く → asin:B000BL84JM"すらど":http://slashdot.jp/のように構造化テキストっぽく書く → すらど"plone ロゴ":img:http://plone.org/logo.jpgのように構造化テキストっぽく書く →
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.py と utils.py を zope に読み込ませます。
あとはためしにコメント書いたりして、リンクが作成されるか確認してください。
また、utils.py を見てもらえばわかるのですが、変換処理は基本的にこんな感じで単純です。
- 正規表現でパターンマッチ
- パターンがみつかったら置換
- 同じパータンにパッチするものがないか探す
- なくなるまでさがしたら次のパターンに
なので、それぞれの環境にあわせて、マッチする正規表現を変えたり、あたらしいパターンを追加したりとかもできると思います。
参考[reference]
下記のサイトとコードを参考にしました。