Pukiwikiカスタマイズ

2021-07-12 (月) 12:21:57
カテゴリ:

PukiWikiで手を入れた箇所の覚書。色々と足りてない。

追加した機能

AutoAlias

概要
指定した文字列を自動的にリンクに変換する。詳細
参考
質問箱/4436 - PukiWiki-official
備考
RecentにAutoAliasNameを表示したくなかったのでpukiwiki.ini.phpの$non_listに追加。
対象とするページの設定いじった方が良かった気もする (先頭にコロン追加)。


変更前
// Regex of ignore pages
$non_list = '^\:';
変更後
// Regex of ignore pages
$non_list = '^\:|^AutoAliasName';

1.5.3で標準搭載されるそうな。

タグ入力支援

概要
編集時にボタン1つで様々なタグを入力できるようにする。
参考
Software/wiki自作プラグイン/instag.inc.php - DEX Lab
備考
スキンのheadに追加する記述で、paraeditを使っていないので代わりにseceditとareaeditを追加


変更前
<?php if ($_GET['cmd']=='edit'|| isset($_POST['preview']) || isset($_POST['template']) || $_GET['cmd']=='paraedit' ) { ?>
変更後
<?php if ($_GET['cmd']=='edit'|| isset($_POST['preview']) || isset($_POST['template']) || $_GET['cmd']=='secedit' || $_GET['plugin']=='areaedit' ) { ?>

スパムフィルタ

概要
Akismet等を利用した1.5.2用汎用スパムフィルタ。
参考
PukiWiki1.5.2にスパム対策メールフォームを設置!Googleアドセンスに備える! | SEの良心
参考
Akismet使うと編集時に誤検知しまくるのでそれ以外を活用することに。

URL短縮

概要
日本語ページなど長過ぎるURLを短い文字列に置換する。
参考
PukiWikiのクソ長いURLをURL短縮ライブラリを組み込んで解決する! | SEの良心
備考
いくつかの既存のプラグインにも手を加えて短縮URLに対応させる必要あり。
あと未作成リンクから編集画面に飛ぶとページ名が短縮URLのままになるバグがあったので修正。

OGPタグ

概要
ページ内容から自動的にOGPを出力する。
参考
ソフトウェア/pukiwiki/Open Graph Protocol (OGP) - 武内@筑波大
備考
・Descriptionの改変。
・1.5.2でページ内のURLが相対パスで出力されるようになったので画像のパスを修正 (このやり方であっているのだろうか)。
・各見出しに使用するparaedit.pngなどimageフォルダ内の画像を除外するよう調整。
・ついでに画像がないページは設定したアイキャッチが表示されるようにしてみる。

などを経て最終的にこうなった (旧版)


2021-07-12追記:
目次やタグの出力を変えたためdescriptionの生成が以前のコードだと使えなくなってしまった。こういった変更があるたびにコードの除外部分に手を加えるのも面倒なので、必要なもの抜き出していく形に変更した。結果として大分スッキリしたコードになった。


以下はdescription部分のみ
<?php // descriptionを作成
	$str = preg_replace("/\r\n|\r|\n/", '', $body);
	preg_match_all('/<(p|dd|dt|li).*?>(.+?)<\/\1>/', $str, $matches);
	$str = implode($matches[2]);
	$str = strip_tags($str);
	$str = mb_substr($str, 0, 200, 'UTF-8');
?>
<meta property="og:description" content="<?php echo $str ?>" />
実際のコードはこれに加えてpやliを含むプラグインを除外するように少し手を加えてある。

各種SNSボタン

概要
ページ上部に各種SNS用のシェアボタンを表示する。
参考
シェアされるシェアボタンとは。CSSだけで作られた12のオリジナルレスポンシブシェアボタン【無料ダウンロード】–[FIT BLOG-フィットブログ]
備考
レスポンシブ対応の一環でモニタサイズによってデザインが変わるようCSSで調整。

スライドメニュー

概要
ボタンを押すと横からスライドしてくるサイドメニュー。
参考
レスポンシブでハンバーガーメニューになる固定サイドバー | webOpixel
備考
スマホ用。画面上部に常に表示。
編集ボタンとか加えたほうが良いかも。

ajaxを利用したプレビュー

概要
編集時、画面遷移せずに使えるプレビュー機能。
参考
AjaxでFormデータ送信する簡単な仕方 - Qiita
jQueryでフォームをAjax送信する際の基本パターンのチュートリアル。二重送信の防御とか。 | Ginpen.com
備考
プレビュー時にいちいちエディタのスクロールリセットされるのが煩わしかったのでなんとかしてみた。
ajax、というかJavascriptの知識は全然なかったので少し勉強になった。
個人的にはリアルタイムプレビューとかリッチエディタよりこれのほうがやりやすいなと。

追加したプラグイン

インストール自体はしてあるが使っていないもの(非推奨のものも含む)は除く。

alias.inc.php

概要
あるページを他のページの別名にするプラグイン。
参考
pukiwikiプラグイン/alias - Tomose's junkyard.
備考
aliasを使ったページを管理するaliaslist.inc.phpも導入。
導入に際してrename.inc.phpを編集。
また、アンカーに対応させるための記述を追加

attachref.inc.php

概要
添付した画像をその場に置き換えるプラグイン。
参考
自作プラグイン/attachref.inc.php - PukiWiki-official
備考
PHP7に対応させるためsplit関数をexplodeに置換。
attach.inc.phpと同様最大ファイルサイズを512KBに。

contentsx.inc.php

概要
標準contentsプラグインの拡張版。
参考
Plugin/contentsx.inc.php - Sonots' PukiWiki プラグイン
備考
開閉機能を追加

expand.inc.php

概要
指定した範囲を折りたたみ表示するプラグイン。
自作プラグイン/expand
備考
Edgeは対応してないけど目をつむることに。
プラグイン名summaryかdetailsにすればよかったと後悔。

iframe.inc.php

概要
iframe埋め込み用プラグイン。
参考
Plugin/iframe.inc.php - Sonots' PukiWiki プラグイン
備考
1.5.1以前でもHTML5用に改造してたのでobjectを使わず普通にiframeで埋め込み。
今の所SteamストアとDiscordのウィジェット、あとはSpreadsheetくらいしか許可していない。

includex.inc.php

概要
他のページの内容を表示するプラグイン。
参考
Plugin/includex.inc.php - Sonots' PukiWiki プラグイン
備考
特になし。

lsx.inc.php

概要
ページをリストするためのプラグイン。
参考
Plugin/lsx.inc.php - Sonots' PukiWiki プラグイン
備考
同氏作成のincludex.inc.php及びcontentsx.inc.phpが必要。

nop.inc.php

概要
指定部分のPukiWiki記法やリンクを無効にするプラグイン。
参考
質問箱/3323 - PukiWiki-official
備考
部分的にオートリンクしたくない文字列用に導入。
PHP7.4に上げた (というかレン鯖側で勝手に上げられた) ときに入れ子の部分でFatal Error吐かれてて焦った。

null.inc.php

概要
指定部分を空文字に置き換えるプラグイン。
参考
自作プラグイン/null.inc.php - PukiWiki-official
備考
複数行のコメントアウトやテーブル内でのコメントアウト等に使用。

ogp.inc.php

概要
リンクをブログカード風に表示するプラグイン。
参考
pukiwikiカスタマイズ箇所/ogp.inc.php - 腫瘍学レ点ノート
備考
XSS対策や機能追加などいろいろと改造 プラグインの変更箇所/ogp.inc.php

sortabletable

概要
表をソートできるようにするプラグイン。
参考
備考
プラグイン名は旧版のままだが中身は新しい方 (sortable_table) に挿げ替え。
旧版との互換性を持たせるためにいくらか改造 & 一部バグが有ったので修正。
プラグインの変更箇所/sortabletable.inc.php

splitbody.inc.php

概要
ページを縦に分割するプラグイン。
参考
Plugin/splitbody.inc.php - Sonots' PukiWiki プラグイン
備考
スマホで閲覧することを想定していない作りのため現在はあまり使わない。
レスポンシブ対応自体は簡単なはずなのでそのうち手を入れるかも。

style.inc.php

概要
任意の箇所にスタイルやクラスを指定するプラグイン。
参考
Plugin/style.inc.php - Sonots' PukiWiki プラグイン
備考
flex表示やinfobox (モドキ) の設置、テーブルの右寄せなど大活躍。
クラス作っておくだけなのでレスポンシブ対応も簡単。

tab.inc.php

概要
タブ形式で任意の範囲を表示切り替えできるプラグイン。
自作プラグイン/tab
備考
元々3個までしかタブを作れなかったが、改修して無制限に作れるようになった。

tag.inc.php

概要
ページにタグを付けてカテゴリ分けするプラグイン。
参考
Plugin/tag.inc.php - Sonots' PukiWiki プラグイン
備考
個人的にページを階層化するよりスッキリすると感じたため導入。
指定タグが付いたページをリスト化するtaglistも便利。
タグを単純にリストへ移動するためのリンクとして貼るtaglinkプラグインを追加で自作して運用中。

プラグインの変更箇所