この記事の概要
URL修飾(FancyURL)用のプラグインです。
今回のバージョンで、ノーマルURLからFancyURLへのリダイレクト、指定したアイテムリンクを出力するアイテム変数に対応しています。また、アイテムURLの生成方法を変更しています。
Download: NP_SimpleURL v0.3
Nucleus v3.31SP1 UTF-8、PHP5で確認。
インストール
- FancyURLモードをONにします。詳しい手順はNucleusのマニュアルを確認してください。mod_rewriteを利用した FancyURL-2 を使うほうが手間が省けてオススメです。
- Nucleusのプラグインディレクトリに simpleurl フォルダと、NP_SimpleURL.phpをアップロード。
- 管理画面のプラグインリストから「NP_SimpleURL」を選んで、インストール。
- プラグインリストのなるべく上のほうにこのプラグインを移動してください。
その後、下記の設定が必要になります(設定方法は後述します)。
- index.php、fancyurls.config.php に設定の記述をいくつか追加します。
- URL修飾に使われるブログやカテゴリーのエイリアス名(URLに含まれる別名)を設定・確認します。
以前のバージョンからアップデートする場合、ファイルの上書きでOKです。
生成されるURLの例
設定フラグによって多少異なりますが、代表的な例を挙げます。 下記はブログ名省略タイプ。後述しますが、index.phpにブログ情報を明記し、URLからブログ情報を省いています。
http://example.jp/
http://example.jp/category_alias/
下記はブログ名明示タイプ。ブログのエイリアスは、ブログのショートネームがそのまま使われます。カテゴリーのエイリアスはSimpleURLの管理画面で設定します。
http://example.jp/blog_alias/
http://example.jp/blog_alias/category_alias/
以上はブログやカテゴリーの「修飾キー」を省いてURLを短くするタイプです。
従来のFancyURLのようにキーと値を1対1で完全対応させるタイプもあります。こちらはURLが冗長になる分、URLパース時の処理が一番シンプルで正確になります。
http://example.jp/blog/blog_alias/
http://example.jp/category/category_alias/
下記はスキンタイプ別のURLの例です。
http://example.jp/archives.html
http://example.jp/archive/2008-07.html
http://example.jp/ItemTitle-123.html ※半角英数の題名の場合
http://example.jp/123.html ※半角英数以外が含まれる題名の場合
http://example.jp/member/member_name.html
http://example.jp/extra/skinpart_name.html
アーカイブタイプのURLは、月別アーカイブのみ対応してます。日別アーカイブは対応してません。 アイテムタイプのURLは、半角英数の題名の場合はそれを利用、日本語全角文字が含まれる場合は数字のみになります。
なお、Nucleus標準のページ送りや検索等のクエリ文字列は、静的に見せずにそのままクエリとして扱います。
http://example.jp/?startpos=5
設定
設定は、呼び出しファイルやfancy設定ファイルに $CONF['SimpleURL'] の各種設定を記述することで行います。
以下、次のタイプの設定を標準の例として解説を進めます。
- ブログ名を省略
- ブログ、カテゴリー、アイテムのキーを省略
- アイテムURLにカテゴリーを含める
コード中のショートネームやURL、ファイルパスは適切なものに変更してください。
index.php
$CONF = array();
$CONF['Self'] = 'http://example.jp/';
$CONF['SimpleURL']['selectBlog'] = 'ブログのショートネーム';
include('./fancyurls.config.php');
include('./config.php');
selectBlog('ブログのショートネーム');
selector();
※index.phpの記述中、"fancyurls.config.php" のところが "fancyurl.config.php"となっていたのを修正しました。
標準のFancyURLとは異なり、$CONF['Self']は末尾を「/」で終わる形にし、相対指定ではなく絶対指定でURLを記述します。URLにはファイル名は含まず、apache の DirectoryIndex(ファイル名が省略されたらindex.phpが呼ばれる)を活用する形にします。
上と下のブログ指定(selectBlog)は必ず合わせてください。この例では、複数ブログを運営する際に、ブログ毎にindex.phpが別々であることが前提になります。
index.phpが1つのみで複数ブログを扱う場合は、URLのほうにブログ情報を含める必要があります(後述の設定フラグを利用します)。
また、同じブログを異なる呼び出しファイル(index.php)からアクセスする場合にも対応しています。生成URLを(DBに登録してあるブログURLではなく)実際に呼び出した方のURLで組み立てるようになっています。
fancyurls.config.php
$CONF['ItemKey'] = 'item';
$CONF['ArchiveKey'] = 'archives';
$CONF['ArchivesKey'] = 'archive';
$CONF['MemberKey'] = 'member';
$CONF['BlogKey'] = 'blog';
$CONF['CategoryKey'] = 'category';
$CONF['SpecialskinKey'] = 'extra';
$CONF['NP_SimpleURL']['UseAlias'] = 1; //数字→エイリアス変換
$CONF['NP_SimpleURL']['DropKeys'] = 1; //修飾キーの省略(ブログ、カテゴリー、アイテムに限る)
$CONF['NP_SimpleURL']['ShowBlogAlways'] = 0; //ブログを常にURLに含む
$CONF['NP_SimpleURL']['ShowCategoryAlways'] = 1; //カテゴリーを常にURLに含む(アイテムの固定リンクで)
上段で修飾キーをセットしています。 下段でプラグインの設定フラグをセットしています。
複数の異なる index.php からインクルードされることを想定して、$CONF['Self'] は fancyurls.config.php ではなく index.php に記述するようにしています。
エイリアス名をセット
SimpleURLの管理画面(管理リンク)で、カテゴリーのエイリアスを設定します。初期値として「c1」等の文字列がセットされてますのでそれを変更します。 index.phpで適切にブログを指定していれば、異なるブログのカテゴリーに同じエイリアスがセットされていても正しく認識されます。
ブログ、メンバーはそれぞれのショートネームがエイリアスとして流用されます(設定はそれぞれのNucleus標準の管理画面で行います)。
アイテム変数
アイテム内に以下のように書くことで、指定アイテムのパーマリンク(固定リンク)を表示できます。
<%SimpleURL(100)%> //アイテムIDで指定したアイテムへのリンク
<%SimpleURL(100,リンクテキスト)%> //リンクテキストを独自に指定可能
注意点
誤動作にハマらないために次の点に注意してください。
- 実在するディレクトリ名と同じ名前を、URL修飾キーやエイリアスに使わない。
- スキンタイプ、URL修飾キーなどで予約済みの名前をエイリアスに使わない。
- ブログ間で同名のカテゴリーエイリアスを使う場合は index.phpに $CONF['NP_SimpleURL']['selectBlog']をセットする。
- インストールされているプラグインで直接 addLinkParams() を呼んでるものに注意。
※2の制約から解放されたい場合は DropKeys を無効にします。
※3の制約は ShowBlogAlways を有効にしてURLにブログ情報を必ず含めることでも解消できます。
※4 プラグインかコアのコードどちらかを修正する必要があります。プラグインのコードを、NP_SimpleURL::addLinkParams() に書き換えるか、コアのaddLinkParams() の宣言ブロックを NP_SimpleURL::addLinkParams()の宣言ブロックでそっくり置き換えるかします。
外部プラグインによる修飾拡張
別のプラグインから、URLパラメータの拡張が可能な作りにしています。
以下はその方法の解説です。
URL修飾に対応したいプラグインから、修飾キーをSimpleURLに登録。PostAuthenticationイベントを利用。
function event_PostAuthentication(&$data)
{
global $CONF, $manager;
if ($manager->pluginInstalled('NP_SimpleURL')) { //URL修飾キーを登録する
$CONF['HogeKey'] = 'hoge';
$obj =& $manager->getPlugin('NP_SimpleURL');
$obj->SetURLOrder($CONF['HogeKey'], 3);
}
}
例では、「hoge」という修飾キーと、URL生成時に考慮されるURLオーダーに「3」を指定しています。 URLオーダーについてはNP_SimpleURLの init() を参照してください。
URL生成は、次のように通常のリンク生成関数を呼ぶだけです。
$linkparams['hoge'] = 'fuga';
$url = createBlogidLink($blogid, $linkparams);
生成されるURLは次のようになります。
http://example.jp/hoge/fuga.html
プラグインから値を参照するには、$_REQUEST['hoge'] とするだけです(上記URLだと"fuga"が取得できます)。値は生のままで渡されますので、プラグイン側で値のチェックを忘れないようにしてください。
NP_SimpleTagなどで、この拡張を利用しています。