PukiWiki でパラグラフ単位でのページ編集ができる paraedit プラグインを使おうとしたら,PHPの関係でちょっと手直しが必要だったので,インストールの仕方を含めてメモ. 環境は次の通り.
- PukiWiki 1.5.0 UTF-8版
- paraeditプラグイン のリンク先の リンク切れ・消失 自作プラグイン - taru memo で公開されているバージョン0.8
- PHP 5.4.30
症状
リンク切れ・消失 自作プラグイン - taru memo の「設置方法」にしたがってインストールする(後述のように,PukiWikiのバージョンがあがってるせいで設定ファイルの修正の仕方が微妙に違うところがありますが)と,ウェブサーバのエラーログにPHPが
PHP Deprecated: Function split() is deprecated in /usr/local/www/pukiwiki-1.5.0-utf8/tlab/plugin/paraedit.inc.php on line 180
というエラーを吐く. PHP: split - Manual によると,split() は非推奨になったので,preg_split() か explode() を使ってね,ってことらしい.
対処込みのインストール方法
lib/pukiwiki.phpを書き換え
上記リンク先の「設置方法 lib/pukiwiki.php に次のコードを追加」の通りでもよいが,そのページの下の方のコメントを参考に,次のようにした.
///////////////////////////////////////////////// // Main
の直前に以下を挿入(↓のpreの箱,横にスクロールするかも).
///////////////////////////////////////////////// // for paraedit if (exist_plugin('paraedit')) { $post["msg"] = _plugin_paraedit_parse_postmsg($post["msg_before"], $post["msg"], $post["msg_after"]); }
lib/convert_html.phpを書き換え
「設置方法 convert_html() の書換え」と同じことをしたらよいのだけれど,PukiWikiのバージョンが違う(リンク先はたぶん1.4.7までを対象とした記述で,たかたかが入れようとしてるのは1.5.0)ので,convert_html.php のが微妙に変わっていた.たかたかはPHPをしゃべれる人ではないけれど,推測で次のようにしてみたらうまくいったみたい. class Heading extends Element 内の function toString() 内の
return $this->msg_top . $this->wrap(parent::toString(), 'h' . $this->level, ' id="' . $this->id . '"');
という2行を以下の4行に置き換え(1行目はただのコメント,2行目を追加,3行目は変更なし,4行目は書き換え).
// ParaEdit $paraedit_flag = (preg_match("/^content_1_/", $this->id)) ? ' paraedit_flag=on' : ''; return $this->msg_top . $this->wrap(parent::toString(), 'h' . $this->level, ' id="' . $this->id . $paraedit_flag . '"');
skin/pukiwiki.skin.phpを書き換え
// ------------------------------------------------------------ // Output
の直後に以下を挿入.
// ParaEdit if(exist_plugin('paraedit')) { $body = _plugin_paraedit_mkeditlink($body); }
paraedit.inc.php
入手した paraedit.inc.php を plugin ディレクトリに置き,次のように修正.
- split()をexplode()に書き換え paraedit バージョン 0.8 では2カ所,いずれも正規表現必要ないので preg_split() ではなく explode() でよい.
- function _plugin_paraedit_mkeditlink($body) 内の
$link = "$script?plugin=paraedit&parnum=$para_num&page=" . rawurlencode($vars[page]) . '&refer=' . rawurlencode($vars[page]); // v 1.4
という行の vars[page] の pageを 'page' に書き換える(2カ所). ここ書き換えなくてもエラーにはならないが,PHPが warning 出してた(たぶん).
おまけ
paraedit.inc.php 内の
// 編集リンクの挿入箇所を指定
の所を「</h2>の前」にしてみたら,セクションタイトルに改行が入って2行になってしまった. とりあえず次のようにしてみた.
// 編集リンクの文字列・スタイルを指定 // %s に URL が入る //define(_EDIT_LINK, '<div style="text-align: right; font-size: x-small; padding: 0px; "><a href="%s">[edit]</a></div>'); define(_EDIT_LINK, '<span style="float:right; font-size: small; font-weight: lighter; padding: 0px 0px 0px 1em; ">[<a href="%s">edit</a>]</span>');