XOOPS Cube Legacy の URI

XOOPS Cube であと気になっているのが URL が格好悪い点。
格好悪いだけでなく、サイトをPHP以外のCMSに換えたりした場合にもパーマリンクが切れるなど、よろしくありません。

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)

ただこれは、システムでどうこうというよりもモジュール作者の間でのお約束になると思います。Feature Request にも上がっていますが、結局、Legacy でどうこうするのは難しいので Wikimod_rewrite の書き方をモジュールごとに提示していくというところに落ち着きました。

ちなみに XOOPS Cube Legacy のモジュールではこんな感じのURLになっています(実際はモジュールによって様々)。

{XOOPS_URL}/modules/news/index.php?action=StoryView&story_id=112

XOOPSのモジュールの場合、その多くはディレクトリ名、テーブル名、primary key の id の三つの情報が分かればデータを特定出来ます。上のケースでは、ディレクトリ名 news, テーブル名 story, primary key の id 112 となります。
表示用のテーブルがひとつしか無いモジュールであれば、ディレクトリ名、primary key の id の二つの情報で事足ります。

そして、できればこのURLをこんな感じにしたいですよね。

例1) news モジュール の story テーブルの story_id=112 を表示する場合

{XOOPS_URL}/news/112

mod_rewrite 利用の前提でこれを実現するにはいくつかお約束を決めてモジュールを作ることになります(守らないと、mod_rewrite の変換コードをモジュールごとに考えて、だらだらと書かなければならない)。

まず必要なお約束は、

  • 各モジュールのフロントのphpファイルの名前を統一する(index.phpなど)。

です。その他、

  • mod_rewrite を使って {XOOPS_URL}/modules/news/index.php?primary_key_id=112 のような変換を行う。
  • テーブルの指定がないので story テーブルを指定されたものとして扱う。
  • story テーブルの primary key(story_id)に 112 が指定されたものとして扱う

例2) newsモジュールのcategoryテーブルのid=6を表示する場合

{XOOPS_URL}/news/category/6
  • mod_rewrite を使って {XOOPS_URL}/modules/news/index.php?target_data_name=category&primary_key_id=112 のような変換を行う。
  • テーブルに category が指定されたものとして扱う
  • category テーブルの primary key に 12 が指定されたものとして扱う

(3)ニュースモジュールのstoryテーブルのid=112を編集する場合

{XOOPS_URL}/news/story/112/edit
  • mod_rewrite を使って {XOOPS_URL}/modules/news/index.php?target_data_name=category&primary_key_id=112&target_action=edit のような変換を行う。
  • テーブルに story が指定されたものとして扱う
  • story テーブルの primary key に 112 が指定されたものとして扱う
  • 編集(edit)として扱う。


実際には primary_key_id, target_data_name, target_action は統一されていて被らなければ何でも構いません。

mod_rewrite は多分こんな感じ。

RewriteEngine On
RewriteBase /
RewriteRule ^jp/(\w+)/(\d+)$ /home/html/modules/$1/index.php?primary_key_id=$2 [L]
RewriteRule ^jp/(\w+)/(\w+)/(\d+)$ /home/html/modules/$1/index.php?target_data_name=$2&primary_key_id=$3 [L]
RewriteRule ^jp/(\w+)/(\w+)/(\d+)/(\w+)$ /home/html/modules/$1/index.php?target_data_name=$2&primary_key_id=$3&target_action=$4 [L]

とりあえず、TubsonP ジェネレータで生成するモジュールは対応できるよう、近々改良する予定です。