この記事の概要
むかし日本語版に入れてもらった独自コード(ブログ間を移動したアイテムURLを自動修正)がFancyURLsの識別キー・カスタマイズに対応してなかった。ので、そのコードを書いてみる。
あとCustomURL、MultipleCategories v0.38がらみのもの。
// if a different blog id has been set through the request or selectBlog(),
// jump to correct url
//if ($blogid && (intval($blogid) != $obj->iblog))
// doError(_ERROR_NOSUCHITEM);
if ($blogid && (intval($blogid) != $obj->iblog)) {
if (!headers_sent()) {
$b =& $manager->getBlog($obj->iblog);
/*_hack for url key */
/*
$correctURL = $b->getURL();
if ($CONF['URLMode'] == 'pathinfo') {
if (substr($correctURL,strlen($correctURL)-1,1)=='/')
$correctURL .= 'item/' . $itemid;
else
$correctURL .= '/item/' . $itemid;
}
else
$correctURL .= '?itemid=' . $itemid;
*/
$CONF['ItemURL'] = $b->getURL();
if ($CONF['URLMode'] == 'pathinfo' and substr($CONF['ItemURL'],-1) == '/')
$CONF['ItemURL'] = substr($CONF['ItemURL'], 0, -1);
$correctURL = createItemLink($itemid, '');
/*_hack end */
redirect($correctURL);
exit;
}
else doError(_ERROR_NOSUCHITEM);
}
まあ自分的にはURL修飾にはCustomURLを使う予定なので、その点ではこのコードは意味なさそうだけど・・・うそ、意味あった。createItemLink()に渡せばURL修飾対応になるし、selector()が呼ばれる前にglobalfunctions.phpで$itemidもセットされるんだった。
階層化カテゴリーがコアに組み込まれればブログ分けを階層化カテゴリーの代わりに利用することも少なくなりそうなので、このおせっかいコードはあまり存在意義がなくなるかも。
コアに導入されるのを待ってたマルチ・サブカテゴリー機能。待ちきれずMultipleCategoriesを試用中。サブカテゴリーの無限階層は必要ないのでv0.38jで。katsumiさんのハックを適用。 マルチカテゴリー機能は使わず、別途タグプラグインを使う予定。
カテゴリーの階層化ってカテゴリー同士の親子関係を管理してるのかと思ったら、ちょっと違っててサブカテゴリーはサブカテゴリーとして管理してた。既存のカテゴリーA、B、Cをまとめカテゴリーの子としてぶら下げるようなことができないので、既存サイトに階層化を適用するには作業がけっこう大変そうだ。
CustomURLをMultipleCategories v0.38に対応させてみる。単に親カテゴリーを問い合わせるところをそのまま返しておけばOKみたい。
function getParents($subid)
{
return $subid; //_hack
(以下略)
あとMultipleCategories v0.38のPHP5対応。doSkinVar()の途中でJOINがらみのエラーが起きてたのでFROMのテーブル名のところをカッコで囲う。
$query = 'SELECT i.inumber as itemid, i.ititle as title, i.ibody as body, m.mname as author, m.mrealname as authorname, UNIX_TIMESTAMP(i.itime) as timestamp, i.itime, i.imore as more, m.mnumber as authorid, c.cname as category, i.icat as catid, i.iclosed as closed' ;
//$query .= ' FROM '.sql_table('item').' as i, '.sql_table('member').' as m, '.sql_table('category').' as c';
$query .= ' FROM ('.sql_table('item').' as i, '.sql_table('member').' as m, '.sql_table('category').' as c)'; //_hack for JOIN on MySQL5
でもどうやらAndyさんが次期Nucleus用のカテゴリー関係のコードをプラグインで用意してくれるらしい・・・ちょっと早まったか?