XOOPS Cube Legacy の URI
XOOPS Cube であと気になっているのが URL が格好悪い点。
格好悪いだけでなく、サイトをPHP以外のCMSに換えたりした場合にもパーマリンクが切れるなど、よろしくありません。
Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)
- 作者: 山本陽平
- 出版社/メーカー: 技術評論社
- 発売日: 2010/04/08
- メディア: 単行本(ソフトカバー)
- 購入: 143人 クリック: 4,320回
- この商品を含むブログ (183件) を見る
ただこれは、システムでどうこうというよりもモジュール作者の間でのお約束になると思います。Feature Request にも上がっていますが、結局、Legacy でどうこうするのは難しいので Wiki で mod_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 の変換コードをモジュールごとに考えて、だらだらと書かなければならない)。
まず必要なお約束は、
です。その他、
- 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 ジェネレータで生成するモジュールは対応できるよう、近々改良する予定です。