On 2014-05-20, 2:25 PM, Bartosz DziewoĆski wrote:
There seem to be three popular ways:
- $IP/skins/SkinName.php for the main file plus $IP/skins/skinname/
for assets, using an autodiscovery mechanism to automagically make the skin available after the files are copied in the right place. This is used by all of the core skins (Vector has some special cases, but let's ignore that for now), as well as many external skins (e.g. Cavendish [2]), at a glance mostly older ones.
I wouldn't say it's popular. It's just the way it was done in core and the only way anyone without knowledge of large swaths of MediaWiki could figure out.
- $IP/skins/SkinName/ for both assets and PHP files
($IP/skins/skinname/SkinName.php etc.), using require_once in LocalSettings like extensions to load the skin, manually adding an entry to $wgValidSkinNames in the main PHP file. This seems to be the preferred method among "modern" skins, for example Erudite [3] or Nimbus [4].
You're misstating this pattern, the pattern goes:
* $IP/skins/skinname/skinname.php * $IP/skins/skinname/* (assets)
The directory name and entry file are both lowercase, not skins/SkinName/ nor skins/skinname/SkinName, this means:
* The skinname you require is the same one assigned to $wgValidSkins and set on $wgDefaultSkin and set on $skinname, and $stylepath. * For all skins using the old autoload pattern the assets directory remains them same, so nothing has to be re-cached. * The same "entry filename = dirname + .php" pattern we've worked to make extensions follow is followed by skins, which will also help implement special loading for skins.
This is the pattern described by the tutorial I wrote, used by Erudite, monaco-port, every custom skin I've developed for a client, and the pattern that should be used going forward. I had hoped to eventually add special behaviors in the loading of skins that would reduce the boilerplate needed to setup skins following this pattern.
- $IP/extensions/SkinName/ for everything, the rest as above. This
makes the skin work exactly like an extension. The only example I could find on mediawiki.org is the Nostalgia skin [5].
This was used for Nostalgia because the cluster didn't have any handling for $IP/skins/ like it does for $IP/extensions/. The only thing that should be using Nostalgia is https://nostalgia.wikipedia.org/. And no other skin should be using the pattern Nostalgia uses.
~Daniel Friesen (Dantman, Nadir-Seen-Fire) [http://danielfriesen.name/]