パーソナルツール
現在の場所: ホーム plone SNS風味 コメント 自動リンク化
書いた本
Plone 完全活用ガイド の Chapter 1, 2, 3, 11 を執筆しました。
plone のインストール、使い方から、機能・デザインのカスタマイズ、プロダクトの作り方まで、 plone のすべてがぎゅっと詰まっている書籍になっていると思います。
plone に興味がある人から、すでに使いこなしている方まで、ぜひ読んでみてください。
Plone 完全活用ガイドのサポートページ
ナビゲーション

 
文書操作

自動リンク化

作成者 takanori 最終変更日時 2006年02月04日 11時50分

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

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

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

目次

できること[goal]

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

  • http://takanory.net のように URL を書く → http://takanory.net
  • www.asahi.com のように www. からはじまる URL を書く → www.asahi.com
  • ftp.ring.gr.jp/pub/ のように ftp. からはじまる URL を書く → ftp.ring.gr.jp/pub/
  • foo@takanory.net のようにメールアドレスを書く → foo@takanory.net
  • id:XXXXXX と書く → その plone のメンバーのホーム(/Members/XXXXXX)にリンク
  • isbn:4756146090 と書籍の番号を書く → isbn:4756146090 (amazon の商品へリンク)
  • asin:B000BL84JM と amazon の商品コードを書く → asin:B000BL84JM
  • "すらど":http://slashdot.jp/ のように構造化テキストっぽく書く → すらど
  • "plone ロゴ":img:http://plone.org/logo.jpg のように構造化テキストっぽく書く → plone ロゴ

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]

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


Powered by vine linux, python, zope, plone, coreblog