31 Октябрь 2012 г. 21:34:25 пользователь Brion Vibber ([email protected]) написал:

On Wed, Oct 31, 2012 at 6:53 AM, Daniel Barrett <[email protected]> wrote:

> Is there any easy way (via extension) to modify the "src" attribute of
> images on wiki pages?
>
> I see hooks for modifying href values - LinkBegin and LinkEnd.    But I
> don't see something similar for images, whose URLs seem to be produced via
> File::getUrl().
>
> Purpose: I want to add a querystring parameter onto the ends of the URLs,
> turning <img src="foo.jpg"/> into <img
> src="foo.jpg?timestamp=xxxxxxxxxxx"/> to aid with caching.
>

There's not a great hook point for this I think, but you could probably add
one in.

Custom hooks are quite hard to get into "master" repository, unless one is a 
Wikimedia programmer. I had one custom hook in EditPage, used by my extension; however it 
wasn't possible to include it into core.

ThumbnailImage::toHtml() in includes/media/MediaTransformOutput.php is the
function that actually produces the <img> tag. You could probably stash
something there, or on the constructor for the class, to modify the URL.

I use the following trick to get thumbnail html (albeit with surrounding div's)

if ( $wgParserConf['class'] !== 'Parser' ) {
        die( 'Extension:PrettyPhoto cannot override non-default Parser' );
}
$wgParserConf['class'] = 'PrettyPhotoParser';

class PrettyPhotoParser extends Parser {

        function makeImage( $title, $options, $holders = false ) {
                return PrettyPhoto::apply( parent::makeImage( $title, $options, 
$holders ) );
        }

} /* end of PrettyPhotoParser class */

Where extension's own PrettyPhoto::apply() method modifies content of generated 
image html via DOMDocument / xpath.

What bothers me, how much reliable parser class override is.

However, if another class "factories" were as flexible as Parser factory, one 
could imagine something like this:
$wgDefaultClass['ThumbnailImage'] = 'MyThumbnailImage';

class MyThumbnailImage extends ThumbnailImage {
   function toHtml( /* args */ ) {
     $html = parent::toHtml( /* args */ );
     ...
   }
}

I wish PHP has "monkey patching", so classes could be manipulated and extended 
dynamically but unfortunately it does not. __get(), __set(), __call() are optional and 
quite slow.
Dmitriy

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

Reply via email to