PloneのMyフォルダに簡単にブックマーク(サイトリンク)を追加する

■PloneのMyフォルダに簡単にサイトのブックマークをつけるスクリプト。

学生がリサーチの作業で、見つけたサイトを簡単に記録する仕組みがほしいという相談を受け、作成してみた。

参考になったのは、、Newsingといサイトで、ブックマークレットというものを自分のブラウザの「お気に入り」へ追加しておくことで簡単に登録ができる仕組だ。

お気に入りの中身は以下のようになっていた。
javascript:window.location=’http://newsing.jp/add
                               ?title=’+encodeURIComponent(document.title)+’&url=’
                                +encodeURIComponent(location.href);

javascriptを使って、今、みているサイトのタイトルとアドレスをクエリで送信しているのか。

 

ということで、今回は、自分のMyフォルダへbookmarkを追加するスクリプトを書いてみる。

 

○準備

  • Ploneのインスタンス作成:testsite
  • ブラウザへのお気に入り登録。
    javascript:window.location=’http://localhost:8080/testsite/bookmark
                                  ?title=’+encodeURIComponent(document.title)+’&url=’
                                   +encodeURIComponent(location.href);
    (今回は、localhost:8080/testsiteというところに、bookmarkというスクリプトを追加しました。)

 

○作業開始

1:portal_skins/customフォルダへ移動し、Scipt(Python)を新規追加する。

 

2:IDにbookmarkと入力して、「Add and Edit」をクリックする。

 

3:コードを入力して、saveをクリック。

from Products.CMFPlone.utils import base_hasattr
RESPONSE = context.REQUEST.RESPONSE
REQUEST = context.REQUEST
form = REQUEST.form
title = form['title']
url = form['url']

homeFolder=context.portal_membership.getHomeFolder()
if not homeFolder:
    return RESPONSE.redirect('%s' % (url, ))
if not base_hasattr(homeFolder, 'Bookmark'):
    homeFolder.invokeFactory('Folder', id='Bookmark', title='Bookmark')
    addable_types = ['Link']
    bk = homeFolder.Bookmark
    if base_hasattr(bk, 'setConstrainTypesMode'):
        bk.setConstrainTypesMode(1)
        bk.setImmediatelyAddableTypes(addable_types)
        bk.setLocallyAllowedTypes(addable_types)
targetFolder = homeFolder.Bookmark
new_id='bm_' + str(int( context.ZopeTime()))

targetFolder.invokeFactory('Link', id=new_id, title=title, remote_url=url)

return RESPONSE.redirect('%s' % (url,))

 ※解説

7,8行目でRequestオブジェクトのformからタイトルとURLを変数に代入しています。
11行目で、ユーザーのHomefolderのオブジェクトを取得しています。(この命令よく使います。)

13-15行目:homefolderがなかったら、スクリプトを終了して、元のURLにリダイレクトします。

17-14行目:homefolderにBookmarkフォルダがなければ、フォルダを作成します。その際、フォルダは、追加できるコンテンツタイプがLinkだけになるように設定しています。

26-28行目:Linkオブジェクトを作成します。27行目でオブジェクトのIDを生成しています。28行目でLinkオブジェクトの作成をし、タイトルとURLをセットしています。

31行目:元のURLにリダイレクトします。

 

4:ここから使い方です。まず、Ploneサイトにアクセスしてログインしておきます。
このブラウザでリサーチ作業をします。

 

5:このページをブックマークしたいと思ったら、準備で作成しておいたお気に入りをクリックします。

 

6:本当に追加されているかを確認してみる。Ploneのサイトへアクセスします。
My folderをクリックします。

Bookmarkというフォルダが出来上がっていました。さらにそのフォルダへ行きます。

 

7:ブックマークが作成されています。

 

■最後に

このスクリプトは、/portal_skins/plone_scripts/addtoFavorites を参考にしました。

現在、ログインしていないと登録できないので、次は、ログインしていなかったら、ログインページに飛ばしてみようかと思います。

それか、プロダクトを作るほうが勉強になるかな。