On 11-03-14 10:53 AM, Daniel Barrett wrote:
> What is the recommended way to get a parser tag like<foo>  and another hook 
> callback to communicate or have a shared state? Here's a simple use case:
>
> 1.      Use a<foo>  parser tag to generate some wikitext
> 2.      Use the SkinAfterBottomScripts hook to inject that wikitext at the 
> bottom of the page
>
> In this case, what's the best way for the callbacks for<foo>  and 
> SkinAfterBottomScripts to share information (in this case, the generated 
> wikitext)? I can think of a few places that<foo>  could put its generated 
> wikitext for SkinAfterBottomScripts to access :
>
> Method 1: Put the two callbacks in the same class and create a static 
> variable to hold the wikitext.  I don't like this method because it feels 
> like an ancient "shared memory" solution (with all the usual pitfalls&  
> risks).
>
> Method 2: Create a custom property in the ParserOutput object 
> ($parser->mOutput) and hang the generated wikitext there. This feels a little 
> better, but unfortunately the parameter list for the SkinAfterBottomScripts 
> hook doesn't include a Parser or ParserOutput object, so it can't access the 
> data. (Theoretically one could use $wgParser, but when I tried this, 
> something in between deleted my custom property.)
>
> This is just one example. The real question is: what's the best practice for 
> sharing data/state between two callbacks in a MediaWiki extension?
>
> Thank you very much.
> DanB
Method 1 is doomed to fail in situations where we fetch from the parser 
cache. Which is ideally most of the visitor page views.

You may be able to use a combination of the ParserCache and it's 
setProperty, OutputPageParserOutput, and BeforePageDisplay. iirc I used 
something like that in the Description2 extension.

SkinAfterBottomScripts looks annoying without an $out param though.

~Daniel Friesen (Dantman, Nadir-Seen-Fire) [http://daniel.friesen.name]


_______________________________________________
Wikitech-l mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/wikitech-l

Reply via email to