infoboxはwikipediaで右の方に出てくるボックスを生成するために使用される。
結構手間取ったのでメモ。
参考にしたページ
https://www.mediawiki.org/wiki/Manual:Importing_Wikipedia_infoboxes_tutorial
http://junkato.jp/ja/blog/2014/01/13/mediawiki-import-templates-from-wikipedia/
http://vanguardflight.xii.jp/wp/?p=313
1. ParserFunctionsの有効化
Special:VersionにてParserFunctionsの状態を確認する(デフォルトは向う)。
LocalSettings.phpにて以下を追加する。
require_once "$IP/extensions/ParserFunctions/ParserFunctions.php";
2. Luaをインストール
5.1系列をダウンロードして、インストールする(今回は5.1.4)。
5.3等をいれるとうまく動作しない。
cd ~/local/ wget http://www.lua.org/ftp/lua-5.1.4.tar.gz tar -zxvf lua-5.* cd lua-5.1.4 make freebsd make local cd bin ln -s lua lua-5.1.4
Scribuntoのインストール
↓ここを参考にする。
https://www.mediawiki.org/wiki/Extension:Scribunto/ja
extensionsフォルダに解凍し、LocalSettings.php の末尾に以下の文を追加する
require_once "$IP/extensions/Scribunto/Scribunto.php"; $wgScribuntoDefaultEngine = 'luastandalone'; $wgScribuntoEngineConf['luastandalone']['luaPath'] = '/home/username/local/lua-5.1.4/bin/lua';
4. wikipediaのTemplate:Infoboxをエクスポート・インポートする
※この方法だと依存するテンプレート等もダウンロードしてくれる。
Template:InfoboxだけコピーするとNG。
wikipediaのSpecial:Exportにアクセスする。
“Add pages manually:”のテキストボックス(大きい方)に”Template:Infobox”と入力し、下のチェックボックスに全てチェックを入れて(デフォルトではInclude templatesが外れている)、exportボタンを押し、ダウンロードする。
自分のwikiのSpecial:Importにアクセスし、ダウンロードしたファイルを読み込む。
5. 実行とエラー対策
Template:Infoboxにアクセスして、エラーが発生しなければ成功。
右寄せにするために以下を追加しておく。
<div style="float: right"> ・・・ </div>
エラー1
Fatal error: Call to undefined function pcntl_wifsignaled() in /extensions/Scribunto/engines/LuaStandalone/LuaStandaloneEngine.php on line 645
↓参考ページ
https://www.mediawiki.org/wiki/Topic:Sydxy2vfvr3m9qme
–enable-pcntlオプションをつけてphpをコンパイルしなおすか、luasandboxをインストールする。
さくらインターネットのスタンダードプランではどちらも難しい(luasandboxをインストールしても良いが、ライブラリの指定等が面倒)。
同じページにパッチが示されているのでこれをダウンロードする。
ここから https://www.mediawiki.org/wiki/Extension:Scribunto#LuaSandbox
これをダウンロード https://gerrit.wikimedia.org/r/cat/273173%2C4%2Cengines/LuaStandalone/LuaStandaloneEngine.php%5E0
解凍して、LuaStandaloneEngine.phpを置き換える(wikiのディレクトリ/extensions/Scribunto/engines/LuaStandalone/LuaStandaloneEngine.php)。
エラー2
#Lua エラー: 内部エラー: インタープリターはシグナル「1」により終了しました。
Luaのバージョンが5.3.2の場合に出たエラー。5.1系をインストールする。
エラー3
#Lua エラー: 内部エラー: インタープリターはシグナル「127」により終了しました。
Luaの実行ファイルパスを間違えている。LocalSettings.phpの以下のファイルパスが間違っていないか確認する。
$wgScribuntoEngineConf['luastandalone']['luaPath'] = '/home/username/local/lua-5.1.4/bin/lua';
6. まとめ
LocalSettings.phpには以下を追加する。
require_once "$IP/extensions/ParserFunctions/ParserFunctions.php"; require_once "$IP/extensions/Scribunto/Scribunto.php"; $wgScribuntoDefaultEngine = 'luastandalone'; $wgScribuntoEngineConf['luastandalone']['luaPath'] = '/home/username/local/lua-5.1.4/bin/lua';
基本的なテンプレートだが、導入は以外と面倒。pcntl_wifsignaled()まわりのエラーは改善される可能性有。