home ホーム search 検索 -  login ログイン  | reload edit datainfo version cmd icon diff delete  | help ヘルプ

YakiBiki/Cookbook/Permalinkを作りたい場合

YakiBiki/Cookbook/Permalinkを作りたい場合

YakiBiki / Cookbook / Permalinkを作りたい場合
id: 11 所有者: msakamoto-sf    作成日: 2008-11-26 23:49:26
カテゴリ: YakiBiki 

2008/11時点でのYakiBikiは、デフォルトではPermalinkをサポートしていません。
これはmod_rewrite相当の機能が搭載されていないWebサーバーでも実行できるようにするために、やむなく断念しました。*1

ですが折角mod_rewrite相当の機能が搭載されているのであれば、使いたいよね・・・ということで、早速自分で調整してみました。


1. とりあえず.htaccessを修正する。

.htaccessにこんな感じのmod_rewriteの設定を付け足しました。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .* - [L]
RewriteRule ^$ index.php [QSA,L]

RewriteCond %{REQUEST_FILENAME} !-f

# view mode
RewriteRule ^view\/([0-9]+)$ index.php?mdl=view&id=$1 [L]
RewriteRule ^view\/([0-9]+)\/$ index.php?mdl=view&id=$1 [L]

RewriteRule ^(.*)$ index.php [QSA,L]

</IfModule>

viewモジュール・・・つまり通常のページ詳細表示の場合だけに対応を絞り込みました。YakiBiki内での「記事へのリンク」は通常、viewモジュールへのリンクになるからです。
この段階でURLから ".../view/10" とかしたりして、ちゃんと表示されるか確認してみます。

2. URL生成のカスタマイズフックを作成

yakibikiの plugins/hook ディレクトリに

yb_hook_make_url.php

というのがありますが、これがYakiBiki内のURLを生成する関数のデフォルト実装です。

plugins/hook 以下にはユーザが挙動をカスタマイズ出来るようなフックポイントを置く・・・筈なのですが、2008/11時点の 0.0.1-alpha3 時点ではまだこれ1つだけなんです・・・。

とまれ、まずはこれをコピーし、適当な名前にします。今回であれば

yb_hook_my_make_url.php

とします。

続いてyb_hook_my_make_url.phpの中の関数名を直します。

function yb_hook_make_url()
→
function yb_hook_my_make_url()

細かいコードの説明は省きますが、コピーした方で関数からreturnする直前を次のように修正します。
【修正前】

    if (count($_params) > 0) {
        $base .= $_query;
    }

    return $base;

【修正後】

    if (count($_params) > 0) {
        $base .= $_query;
    }

    // ここのifブロックを挿入
    if ($module == 'view') {
        if (isset($query_params['id']) && is_numeric($query_params['id'])) {
            $base = _YB('url') . 'view/' . $query_params['id'];
        }
    }

    return $base;

3. config.phpを修正してフックを付け替える。

追加した新しいmy_make_urlフックに付け替えるには、config.phpに以下の行を付け足します。

_YB('hook.convert.make_url', 'my_make_url');

少し解説します。フックを使用する場合、次のようにyb_Util::hook()を実行します。(2008/11, 0.0.1-alpha3時点)

$ret = yb_Util::hook('フック名', $args);

ここで _YB('hook.convert.フック名') が指定されていない場合、

plugins/hook/yb_hook_フック名.php

をロードして、

yb_hook_フック名()

を実行します。
もしも _YB('hook.convert.フック名') が指定されていて、'my_フック名'となっていれば、

plugins/hook/yb_hook_my_フック名.php

をロードして、

yb_hook_my_フック名()

を実行します。

この仕掛けを使用して、''YakiBikiのデフォルト実装を残したまま''、ユーザーのカスタマイズフックを有効化できます。

以上でviewモードについてはPermalinkを作る事が出来ました。YakiBikiは内部リンクについては全て動的に生成していますのでWikiキャッシュの影響はありません(=キャッシュクリアは不要)。

*1: 実は0.0.1のalpha-2の時点ではviewやrawモジュールに対しpermalinkになるような.htaccessが添付されていた・・・が、alpha-2ではmod_rewriteを前提にしてしまっていた。IISどうするよとか、mod_rewriteがたまたま入ってないWeb鯖上で実行したい時どうするよとか考え出した結果、mod_rewriteによるpermalinkは実装しないことにalpha-3では変更した。

プレーンテキスト形式でダウンロード
現在のバージョン : 2
更新者: msakamoto-sf
更新日: 2009-01-24 19:34:28
md5:719a85c9d8043a77a4a40967ab644cac
sha1:14bb8969749e5d78c277215a0ceea0c40af50c37
コメント
コメントを投稿するにはログインして下さい。