PloneでURL redirectをする

投稿: 2009年2月23日

Ploneには元々Linkというタイプのコンテンツがある。これは、タイトル、説明、URLからなるコンテンツで、そのコンテンツそのものをクリックした場合、あるいはそのコンテンツそのもののURLにアクセスした場合、そのタイトルと説明とURLを表示するページが出てくるだけで、あまり便利なものではない。これを、そのコンテンツをクリックすると登録されているURLにredirectされるようにする方法。

以下はPlone 3.2.1で確認。

  1. ZMIで、サイトのトップ→portal_skins→customとたどる
  2. Select type to add... のプルダウンで``Script (Python)''を選んでAdd
  3. 追加するScript (Python)は、IDとして``redirect_view''を指定して、その内容は以下のようにして保存する:
    # Use portal_membership tool for checking permissions 
    mtool = context.portal_membership 
    checkPermission = mtool.checkPermission 
    
    # checkPermissions returns true if permission is granted 
    if checkPermission('Modify portal content', context): 
      return context.link_view() 
    else: 
      return context.REQUEST.RESPONSE.redirect(context.getRemoteUrl())
    
    
  4. ZMIで、portal_typesに移動
  5. Linkを変更する場合はLinkをクリック、新たなタイプを作る場合は、Linkをコピーして適当な名前に変更した後にそれをクリック
  6. Aliasesのタブを表示
  7. ``(Default)''が``(dynamic view)''となっているのを、``redirect_view''に変更して保存

この後作られたリンク (もしくは新しく作ったタイプのコンテンツ) は、そのコンテンツの変更権限がある場合は従来と同じ動作、そうでない場合は登録されているURLにリダイレクトされるようになる。変更権限がある場合に従来の動作になるのは、そうしないとそのコンテンツを編修したい場合に大変なため。

これでサイト内のコンテンツの別名を作ったり、古いコンテンツを移動した時にリダイレクトさせたりなどなどが簡単にできる。