MediaWikiの基本的な拡張パーサに:ParserFunctionsってのがあるんだけど、これがどうも動かない。
SVNのRevision 35157 のParserFunctions.phpなんだけど、
<?php function ifexistCommon( &$parser, $frame, $title = '', $then = '', $else = '' ) { $title = Title::newFromText( $title ); if ( $title ) { if( $title->getNamespace() == NS_MEDIA ) { ... .zip ... } else { $pdbk = $title->getPrefixedDBkey(); $lc = LinkCache::singleton(); if ( !$this->incrementIfexistCount( $parser, $frame ) ) { return $else; } if ( $lc->getGoodLinkID( $pdbk ) ) {
どうも
if ( !$this->incrementIfexistCount( $parser, $frame ) ) {
があやしい。
この関数って、処理の重い関数を実行するたびに内部カウンタをあげて、一定数以上は処理しないってなってるんだけど。
<?php function incrementIfexistCount( $parser, $frame ) { // Don't let this be called more than a certain number of times. It tends to make the database explode. global $wgExpensiveParserFunctionLimit; $parser->mExpensiveFunctionCount++; if ( $frame ) { $pdbk = $frame->getPDBK( 1 ); if ( !isset( $parser->pf_ifexist_breakdown[$pdbk] ) ) { $parser->pf_ifexist_breakdown[$pdbk] = 0; } $parser->pf_ifexist_breakdown[$pdbk] ++; } return $parser->mExpensiveFunctionCount <= $wgExpensiveParserFunctionLimit; }
この最後の比較している
$parser->mExpensiveFunctionCount と $wgExpensiveParserFunctionLimit;
の値がないんだよね・・・・。
だから絶対falseになるんだが。
しょうがないから
<?php function incrementIfexistCount( $parser, $frame ) { return true; // Don't let this be called more than a certain number of times. It tends to make the database explode.
してしまった。