GAMERS Wiki

Pukiwikiカスタマイズ

Last-modified: 2020-03-10 (火) 10:09:05
: カスタマイズ

Pukiwiki1.5.1を弄りまくってたらPukiwiki1.5.2にバージョンアップするときにちょっと苦労したので変更箇所をメモ書き。

まだ書きかけ

目次[表示]

追加した機能

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の良心
参考
recaptchalib.phpが同梱されていなかったので別途用意。
seceditとareaeditをAkismetの対象に指定すると誤検知しまくるのでどうにかしたいところ。

URL短縮

概要
日本語ページなど長過ぎるURLを短い文字列に置換する。
参考
PukiWikiのクソ長いURLをURL短縮ライブラリを組み込んで解決する! | SEの良心
備考
編集を完了した後だと元々のURLが表示される。

OGPタグ

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


などを経て最終的にこうなった
<meta property="og:title" content="<?php echo $title ?>" />
<meta property="og:type" content="article" />
<meta property="og:url" content="<?php echo 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; ?>" />
<?php // descriptionを作成
	$str = $body;
	$str = preg_replace('/<table.*class="toc"(.|\n)*?<\/table>/', '', $str); // 目次を取り除く
	$str = preg_replace('/<h[1-6].*?<\/h[1-6]>/', '', $str); // 見出しを取り除く
	$str = preg_replace('/<script(.|\n)*?<\/script>/', '', $str); // スクリプトを取り除く
	$str = preg_replace('/<span.*class="tag".*?<\/span>/', '', $str); // tag.inc.phpを取り除く
	$str = preg_replace('/<\/td>|<\/th>/', '-', $str); // 表を変換
	$str = strip_htmltag($str, $all = TRUE); // タグを取り除く
	$str = htmlspecialchars($str); // & などをエスケープ
	$str = str_replace(array("\r\n","\r","\n","	"), '', mb_strcut($str,0,400,"UTF-8"));//改行を削除
?>
<meta property="og:description" content="<?php echo $str ?>" />
<meta property="og:site_name" content="<?php echo $page_title ?>" />
<meta property="og:image" content="<?php // imageフォルダの画像を除外して探す
   $str = $body;
	 $uri = get_base_uri(PKWK_URI_ABSOLUTE);
	 $result = preg_match_all('/<img.*?(data-lazy|src)=(["\'])\.\/(.+?)\2.*?>/i', $str, $imgurl);
   if($result) {
     echo $uri . htmlspecialchars_decode($imgurl[3][0]);
   } else {
     echo $uri . 'image/eyecatch.jpg';
   }
 ?>" />

ちなみにimgタグの属性"data-lazy"はSlideshowプラグインで使っているもの。

各種SNSボタン

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

スライドメニュー

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

PC/スマホ切り替えボタン

概要
PC/スマホでページの幅を切り替えるボタン
参考
スマホサイト・PCサイトの切り替えボタンを設置する方法|お小遣い稼ぎSite
備考
正直あんまり存在意義が感じられない機能。

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
備考
部分的にオートリンクしたくない文字列用に導入。

null.inc.php

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

ogp.inc.php

概要
リンクをブログカード風に表示するプラグイン。
参考
pukiwikiカスタマイズ箇所/ogp.inc.php - 腫瘍学レ点ノート
備考
XSS対策や機能追加などいろいろと改造 プラグインの変更箇所/ogp.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.in.cphp
備考
htmlとcssだけで作っているのでタブは3つまでしか作れない。
でも最近解決方法っぽいのを見つけたのでいくつでも作れるように作り変えたいところ。

tag.inc.php

概要
ページにタグを付けてカテゴリ分けするプラグイン。
参考
Plugin/tag.inc.php - Sonots' PukiWiki プラグイン
備考
個人的にページを階層化するよりスッキリすると感じたため導入。
指定タグが付いたページをリスト化するtaglistも便利。

プラグインの変更箇所