めもりば

メモ書きの延長線みたいなものです

PukiWikiにWYSIWYGエディタを取り入れるのお話

はじめに

正直なことを言うと導入方法とか、使用して思ったことを書こうとは思っていません。少し躓いたところを補足的な感じで書いていきます。

使用したもの

使用したもの バージョン
PutiWiki 1.5.1(UTF-8版)
PHP 7.1.10(built: Sep 26 2017 20:04:32)
tinymceedit 0.1.3
OS Windows 10
ブラウザ Chrome 65.0.3325.181

WYSIWYGエディタプラグインOxyさんのtinymceeditをお借りしました。

導入

上記リンクを参照ください。しかし、私の環境ではすべて終わった後にエラーが出たので、私なりの解消法をおおざっぱに書きます。

Parse error: syntax error, unexpected 'new' (T_NEW) in ...\plugin\wiki2xhtml.php on line xxx

plugin\wiki2xhtml.phpのエラーが出た箇所の= &=だけにする。

これで編集ができるようになったが、更新時にエラー

Fatal error: Uncaught Error: [] operator not supported for strings in ...\plugin\xhtml2wiki.php:xxx

plugin\xhtml2wiki.phpのエラーが出た行

$this->body[] = $head . $line . $foot . "\n";

の上に

if ($this->body == ''){
    $this->body = array();
}

これで動くようになった。

もうちょっと

ここまででしっかり動くのですが、これだけだと通常編集時(元からあるWYSIWYGではないほう)のレイアウトが少し気になってしまった。

lib/html.php

$body = <<<EOD
<div class="edit_form"><form style="margin-bottom: 0px;" action="$script" method="post">$template
$addtag
<input name="cmd" type="hidden" value="$cmd" />
<input name="page" type="hidden" value="$s_page" />
<input name="digest" type="hidden" value="$s_digest" />
<textarea id="tinymce" cols="$cols" name="msg" rows="$rows">$s_postdata</textarea>

<textarea id="tinymce" style="display: none;" cols="1" name="original" rows="1">$s_original</textarea>
<div style="float: left;"><input accesskey="p" name="preview" type="submit" value="$btn_preview" />
<input accesskey="s" name="write" type="submit" value="$_btn_update" />
$add_top
$add_notimestamp</div>
</form><form style="margin-top: 0px;" action="$script" method="post"><input name="cmd" type="hidden" value="$cmd" />
<input name="page" type="hidden" value="$s_page" />
<input accesskey="c" name="cancel" type="submit" value="$_btn_cancel" /></form></div>
EOD;

に変更した所を

if ( $vars['cmd'] == "edit" ){
    $editorbreak = "<br />";
} elseif ( $vars['cmd'] == "tinymceedit" ){
    $editorbreak = "";
}
$body = <<<EOD
<div class="edit_form"><form style="margin-bottom: 0px;" action="$script" method="post">$template
$addtag
<input name="cmd" type="hidden" value="$cmd" />
<input name="page" type="hidden" value="$s_page" />
<input name="digest" type="hidden" value="$s_digest" />
<textarea id="tinymce" cols="$cols" name="msg" rows="$rows">$s_postdata</textarea>
{$editorbreak}
<textarea id="tinymce" style="display: none;" cols="1" name="original" rows="1">$s_original</textarea>
<div style="float: left;"><input accesskey="p" name="preview" type="submit" value="$btn_preview" />
<input accesskey="s" name="write" type="submit" value="$_btn_update" />
$add_top
$add_notimestamp</div>
</form><form style="margin-top: 0px;" action="$script" method="post"><input name="cmd" type="hidden" value="$cmd" />
<input name="page" type="hidden" value="$s_page" />
<input accesskey="c" name="cancel" type="submit" value="$_btn_cancel" /></form></div>
EOD;

に変更しなおすことでちょっとすっきりした感じになった。めでたしめでたし。

参考にしたサイトのトップ

oxynotes.com