[NIKOの週末プログラミング日記]

NP_TagEXをちょっと改造

2006-03-20(月) 22:59:25 - programming
Nucleusにタグ機能を追加するプラグイン、とっても便利に使わせてもらってます。
で、便利に使えば使うほど、どうしても細かいところが気になってくるもので・・・
少し中身をいじくってみました。

NP_TagEX バージョン0.4 @ nakahara21

ハック対象はNP_TagEX.phpのバージョン0.4。
大きく二つについてまとめておきます。

『アイテム追加/編集画面で、追加/編集対象ブログに登録されたタグのみを表示』
『タグリストの並び順に、「タグ文字列順」と「ランダム」を追加』


アイテム追加/編集画面で、追加/編集対象ブログに登録されたタグのみを表示

アイテム追加/編集画面で、全ブログに登録された全タグが表示されてしまうので、
タグが増えてくると探すのが少し面倒。
というわけで、追加/編集対象ブログに登録されたタグのみが表示されるようにしてみた。

まず、265行目付近、function scanExistItemを、引数に$blogidを取れるように変更。
以下、赤字部分が編集箇所。
function scanExistItem($narrowMode=0,$blogid=0) {
global $manager, $CONF, $blog, $catid, $archive ;

if($blogid>0){
$b =& $manager->getBlog($blogid);
}else
if($blog){
$b =& $blog;
}else{
$b =& $manager->getBlog($CONF['DefaultBlog']);
}

次に、360行目付近、function scanExistTagsを、引数に$blogidを取れるように変更。
function scanExistTags($narrowMode=0, $amount=99999999, $sortmode=0, $blogid=0) {
// $narrowMode=0: all blogs
// $narrowMode=1: currentblog only
// $narrowMode=2: narrowed with catid/subcatid

$existInumsIn = ($existInums = $this->scanExistItem($narrowMode,$blogid))? ' WHERE inum in (' . @join(',', $existInums) . ')': '';

でもって、イベント処理を行う以下の2つの関数それぞれについて、
$blogidを取得して、scanExistTagsするように変更。

function event_AddItemFormExtras
63行目付近
function event_AddItemFormExtras($data) {
global $blogid;
88行目付近
if($existTags = $this->scanExistTags(1,99999999,1,$blogid)){
$existTags = array_keys($existTags);
}

function event_EditItemFormExtras
96行目付近
function event_EditItemFormExtras($data) {
$id = $data['variables']['itemid'];
$blogid = getBlogIDFromItemID($id);
126行目付近
if($existTags = $this->scanExistTags(1,99999999,1,$blogid)){
$existTags = array_keys($existTags);
}

これで無事に、アイテム追加/編集画面で、
追加/編集対象ブログに登録されたタグのみが表示されるようになるはず。

タグリストの並び順に、「タグ文字列順」と「ランダム」を追加

タグリストの並び順バリエーションを増やしてみた。
変更は、338行目付近、function sortTagsのみ。
function sortTags($tags, $sortmode=0) {
// sortMode 0:none
// sortMode 1:max first
// sortMode 2:min first
// sortMode 3:tag's order
// sortMode 4:random


if(!$tags || $sortmode==0) return $tags;

foreach($tags as $tag => $inums){
$tagCount[$tag] = count($inums);
}
if($sortmode==1) arsort($tagCount);
if($sortmode==2) asort($tagCount);
if($sortmode==3){
$idx = 0;
foreach($tagCount as $tag => $cnt){
$tagtbl[$idx] = $tag;
$tmpcnts[$idx] = $cnt;
$tmptags[$idx] = strtolower($tag);
$idx ++;
}
asort($tmptags);
unset($tagCount);
$tagCount = array();
foreach($tmptags as $idx => $tag){
$tagCount[$tagtbl[$idx]] = $tmpcnts[$idx];
}
}
if($sortmode==4){
srand ((float) microtime() * 10000000);
$tmp_key = array_rand($tagCount,count($tagCount));
unset($tagCount);
$tagCount = array();
foreach($tmp_key as $k=>$v){
$tagCount[$v] = 0;
}
}


// $result = array_merge_recursive($tagCount, $tags);
foreach($tagCount as $k=>$v){
$r[$k] = $tags[$k];
}

return $r;
}
ちょっと冗長かも・・・
特に、『大文字小文字を区別せずに』連想配列をキー順でソートするあたりは、
もっとうまいことまとめられそうだなぁ。。。
ま、とりあえず動いてるみたいだからヨシとしておく。


というわけで、以上、備忘録まで。
ご意見、ご要望、ご指摘などありましたらお気軽にコメント下さい。

コメント

コメントはありません

コメントを追加





トラックバック

トラックバックURL:
しづきの独り言。 及び備忘録 pinged on 2006/04/19 15:03
件の「出力結果がおかしくなる件」について、昨日書いた((phpはわからないけど、書き出してるのは解る))こともフォーラムに書き足してきたけど、まだ((06/04/19 1350時点))誰からも返事もらえてません(´・ェ・`) ...

ローカルトラックバック

ローカルトラックバックはありません