トラックバックURLをNP_CustomURLの表示にするカスタマイズ Nucleus 3.23sp3 と NP_LatestWritebacks
Sep 13
昨日に引き続き、NP_TrackBack の改造です
昨日の改造だけでは、書き換えた URL にローカルからトラックバックした時に「そんなアイテム無い」って言われてローカルトラックバックが届きません
で、もうちょっとだけ改造します
じつは藤崎さんからトラックバックをもらって、そこ見に行って書いてないの思い出しました

NP_TrackBack v2.0.3jp4 の 2479行目あたりからの、
	function handleLocalPing($itemid, $title, $excerpt, $blog_name, $ping_url){
global $manager;
$ping_url = trim($ping_url);

中略

// save data in the DB
$query = 'INSERT INTO ' . sql_table('plugin_tb_lc') . " (tb_id, from_id) VALUES ('".$tb_id."','".$itemid."')";
$res = @mysql_query($query);
if (!$res)
return 'Could not save trackback data, possibly because of a double entry: ' . mysql_error();
}
のブロックに、NP_CustomURL 用のコードを追加します
上のブロックの中ほどの1行何も書かずに改行されているところ、
		} elseif ( preg_match("/itemid=([0-9]+)/",$ping_url,$idnum) ){
$tb_id = intval($idnum[1]);
}

		if ( (!$manager->existsItem($tb_id,0,0) ) && ($this->getOption('CheckIDs') == 'yes'))
return _ERROR_NOSUCHITEM . "[ $tb_id ]";
の間に、次のコードを挿入します
		if ($manager->pluginInstalled('NP_CustomURL')) {
$plugin =& $manager->getPlugin('NP_CustomURL');
$tmp_url = parse_url($ping_url);
$$tmp_url['path'] = trim($tmp_url['path'], '/');
$path_arr = explode("/", $$tmp_url['path']);
$i = count($path_arr) - 1;
if (substr($path_arr[$i], -5) == '.html') {
$item_name = $path_arr[$i];
$trush = array_pop($path_arr);
} elseif (substr($path_arr[$i], -10) == '.trackback') {
$item_name = (substr($path_arr[$i], 0, -10)) . '.html';
}
$trush = array_pop($path_arr);
$blog_url = $tmp_url['scheme'] . '://' . $tmp_url['host'] . '/' . implode('/', $path_arr);
$blog_url = preg_replace('|[^a-zA-Z0-9-~+_.?#=&;,/:@%]|i', '', $blog_url);
$tbbid = quickQuery('SELECT bnumber as result FROM '.sql_table('blog').' WHERE burl = "'.$blog_url.'"');
$tbbid = intval($tbbid);
if (!empty($tbbid) && $plugin->getBlogOption(intval($tbbid), 'use_customurl') == 'yes') {
$item_name = preg_replace('|[^a-zA-Z0-9-_.]|i', '', $item_name);
$que = 'SELECT obj_id as result FROM %s WHERE obj_param = "item" AND obj_name = "%s" AND obj_bid = %d';
$tbiid = quickQuery(sprintf($que, sql_table('plug_customurl'), $item_name, intval($tbbid)));
if (!empty($tbiid)) $tb_id = intval($tbiid);
}
}

このコードを追加で、「/trackback/item_123.html」「/item_123.trackback」の両方に対応できます

一応やってる事の説明
まず、トラックバック先に指定された URL を成分分解してトラックバック先アイテムのパス名を取り出して、使った分を配列から破棄
残ったものをつなげて対象となるブログの URL を生成し、その URL から BlogID を取得
取得した BlogID とアイテムのパス名を組み合わせて対象アイテムの ItemID を取得

とまぁ、めんどくさい事をやってます
サイト全体で一意な名前の付け方じゃなくって、ブログ毎に一意だから、BlogID が解らないとアイテムが特定できないのでこんなややこしい事になってしまいました

もっとスマートなコード募集中

No Responses to “ カスタマイズしたURLでローカルトラックバック ”

Leave a Reply

OpenID を使ってログインすることができます。

Identity URL:



Web Services by Yahoo! JAPAN

このエントリにトラックバックはありません

この記事のトラックバックURL
http://shizuki.kinezumi.net/item_302.trackback(右クリックで'ショートカットの保存')
トラックバックするにはこの記事へのリンクhttp://shizuki.kinezumi.net/item_302.htmlが必要です