Jan 18
ややこしいタイトルだ ^^;
以前から、NP_TrackBack 等の外部プラグインから createLink() のグローバルファンクションが呼び出されたときに、呼び出したプラグインによってその挙動を変えたいと思ってたんですが、その為にはタイトルのような関数が必要でこれをずっと探してたんですが、最近やっと見つけました
見つけたというか、これは発想の転換で、ふとしたことからデバッグ用の組み込み関数を使った方法を見つけたので、さっそく NP_CustomURL に組み込んでみました
debug_backtrace() というのがそれで、こいつが返してくる中身の class と function を見て挙動を変えてやればいいわけです
例えば、現在 NP_TrackBack 用のトラックバックURLを表示する為に NP_TrackBack 本体を改造したり、<%CustomURL(trackback)%> とスキンやテンプレートに記述しなければならなかったりするんですが、何もしなくても NP_TrackBack の短縮トラックバックURLが正しく出力されるようになります
php4 と php5 で、戻ってくる値に大文字小文字の違いがあったりしてややこしかったんですが、これは strtolower() で簡単に解決
あとはローカルトラックバックの受信部分がなんとかなれば、どこも改造しなくて済むようになるんだけど、ローカルトラックバックの時はURL使わずに
以下に、肝心の NP_TrackBack から呼び出された時にはアイテムのURLに『.html』を付けずに返す為のコードを載せますが、php のバージョンによっては上手く動かない場合があるかもしれません
このコードを、NP_CustomURL.php の 『function event_GenarateURL()』 の最後の最後、『return $data;』 とだけ書いてある行の前の行に挿入してください
Apache、php4.4.4、php5.2.0 で動作確認しました
以前から、NP_TrackBack 等の外部プラグインから createLink() のグローバルファンクションが呼び出されたときに、呼び出したプラグインによってその挙動を変えたいと思ってたんですが、その為にはタイトルのような関数が必要でこれをずっと探してたんですが、最近やっと見つけました
見つけたというか、これは発想の転換で、ふとしたことからデバッグ用の組み込み関数を使った方法を見つけたので、さっそく NP_CustomURL に組み込んでみました
debug_backtrace() というのがそれで、こいつが返してくる中身の class と function を見て挙動を変えてやればいいわけです
例えば、現在 NP_TrackBack 用のトラックバックURLを表示する為に NP_TrackBack 本体を改造したり、<%CustomURL(trackback)%> とスキンやテンプレートに記述しなければならなかったりするんですが、何もしなくても NP_TrackBack の短縮トラックバックURLが正しく出力されるようになります
php4 と php5 で、戻ってくる値に大文字小文字の違いがあったりしてややこしかったんですが、これは strtolower() で簡単に解決
あとはローカルトラックバックの受信部分がなんとかなれば、どこも改造しなくて済むようになるんだけど、ローカルトラックバックの時はURL使わずに
$this->handleLocalPing($itemid);だけじゃダメなんでしょうか? > hsurさん
以下に、肝心の NP_TrackBack から呼び出された時にはアイテムのURLに『.html』を付けずに返す為のコードを載せますが、php のバージョンによっては上手く動かない場合があるかもしれません
このコードを、NP_CustomURL.php の 『function event_GenarateURL()』 の最後の最後、『return $data;』 とだけ書いてある行の前の行に挿入してください
Apache、php4.4.4、php5.2.0 で動作確認しました
$tempdeb=debug_backtrace();
foreach($tempdeb as $k => $v){
if (strtolower($v['class']) == 'np_trackback' && strtolower($v['function']) == 'gettrackbackurl') {
$tb = 1;
}
}
if ($tb == 1 && $data['type'] == 'item' && $isItem) {
$data['url'] = substr($data['url'], 0, -5);
}
1 Response to “ 関数の呼出元の関数を取得する関数 ”
Leave a Reply
OpenID を使ってログインすることができます。
このエントリにトラックバックはありません
この記事のトラックバックURL
http://shizuki.kinezumi.net/item_421.trackback(右クリックで'ショートカットの保存')
トラックバックするにはこの記事へのリンクhttp://shizuki.kinezumi.net/item_421.htmlが必要です

January 19th, 2007 at 14:20:07 あー、なんか寝ぼけたこと書いてましたね
$this->handleLocalPing($itemid);じゃぁping先のitemidわかんないですね ^^;
で、CustomURLの方で対応する方法を思いついたんで現在実験中です