I have a parser function #lookup that performs a database query, given a string
key. When a wiki page contains {{#lookup:MyKey}}, the callback function looks
up the associated value and uses StripState to place it into the article:
$parser->setFunctionHook('lookup', 'lookupCallback'));
...
function lookupCallback($parser, $key) {
$value = bigDatabaseQuery($key);
return $parser->insertStripItem($value);
}
This works fine, but when there are many #lookup calls on a single wiki page,
we are making many database calls. So I'd like to collect all the keys from all
the #lookup calls and perform a SINGLE database query "where key in ('key1',
'key2', ..., 'keyN')", then call insertStripItem() with each value. I can't
seem to figure out how to architect this.
The callback (lookupCallback) is the ideal place to call insertStripItem with
the looked-up values, since it places the UNIQ string in the right location in
the article. But it also seems to be the only place that I can collect all the
keys for performing the single SQL query. This is a chicken-and-egg problem. I
can't seem to do the SQL query earlier than lookupCallback because if I do,
this logic will run even when #lookup is not present.
Any advice on how to structure this?
Thanks,
DanB
_______________________________________________
Wikitech-l mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/wikitech-l