#author("2020-02-09T15:15:10+09:00","default:kanateko0404","kanateko0404")
RIGHT:&tag(カスタマイズ);

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

まだ書きかけ

#contentsx

*追加した機能 [#addon]

**AutoAlias [#autoalias]
:概要|指定した文字列を自動的にリンクに変換する。[[詳細>https://pukiwiki.osdn.jp/dev/?BugTrack/2002]]
:参考|
#ogp(https://pukiwiki.osdn.jp/?%E8%B3%AA%E5%95%8F%E7%AE%B1/4436,noimg)
:備考|RecentにAutoAliasNameを表示したくなかったのでpukiwiki.ini.phpの$non_listに追加。
対象とするページの設定いじった方が良かった気もする (先頭にコロン追加)。
&br;
変更前
#prism(php){{
// Regex of ignore pages
$non_list = '^\:';
}}
変更後
#prism(php){{
// Regex of ignore pages
$non_list = '^\:|^AutoAliasName';
}}

**タグ入力支援 [#instag]
:概要|編集時にボタン1つで様々なタグを入力できるようにする。
:参考|
#ogp(https://dexlab.net/pukiwiki/index.php?Software%2Fwiki%BC%AB%BA%EE%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3%2Finstag.inc.php,noimg)
:備考|スキンのheadに追加する記述で、paraeditを使っていないので代わりにseceditとareaeditを追加
&br;
変更前
#prism(php){{
<?php if ($_GET['cmd']=='edit'|| isset($_POST['preview']) || isset($_POST['template']) || $_GET['cmd']=='paraedit' ) { ?>
}}
変更後
#prism(php){{
<?php if ($_GET['cmd']=='edit'|| isset($_POST['preview']) || isset($_POST['template']) || $_GET['cmd']=='secedit' || $_GET['plugin']=='areaedit' ) { ?>
}}
**スパムフィルタ [#spam]
:概要|Akismet等を利用した1.5.2用汎用スパムフィルタ。
:参考|
#ogp(https://dajya-ranger.com/pukiwiki/setting-mail-form/)
:参考|recaptchalib.phpが同梱されていなかったので別途用意。
seceditとareaeditをAkismetの対象に指定すると誤検知しまくるのでどうにかしたいところ。
メニューバーを編集しても誤検知しまくる。なぜ。

**URL短縮 [#url]
:概要|日本語ページなど長過ぎるURLを短い文字列に置換する。
:参考|
#ogp(https://dajya-ranger.com/pukiwiki/embed-url-shortener/)
:備考|編集を完了した後だと元々のURLが表示される。

**OGPタグ [#ogp]
:概要|ページ内容から自動的にOGPを出力する。
:参考|
#ogp(https://dora.bk.tsukuba.ac.jp/~takeuchi/?%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%2Fpukiwiki%2FOpen%20Graph%20Protocol%20%28OGP%29)
:備考|・Descriptionの改変。
・1.5.2でページ内のURLが相対パスで出力されるようになったので画像のパスを修正 (このやり方であっているのだろうか)。
・各見出しに使用するparaedit.pngなどimageフォルダ内の画像を除外するよう調整。
・ついでに画像がないページは設定したアイキャッチが表示されるようにしてみる。
&br;
などを経て最終的にこうなった
#prism(php){{
<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プラグイン>自作プラグイン/slideshow]]で使っているもの。
**各種SNSボタン [#sns]
:概要|ページ上部に各種SNS用のシェアボタンを表示する。
:参考|
#ogp(https://fit-jp.com/sharebtn/)
:備考|レスポンシブ対応の一環でモニタサイズによってデザインが変わるようCSSで調整。

**スライドメニュー [#menu]
:概要|ボタンを押すと横からスライドしてくるサイドメニュー。
:参考|
#ogp(https://www.webopixel.net/javascript/1289.html)
:備考|スマホ用。画面上部に常に表示。
スクロールボタンとか加えたほうが良いかも。

**PC/スマホ切り替えボタン [#q46fdd82]
:概要|PC/スマホでページの幅を切り替えるボタン
:参考|
#ogp(https://okodukai-cho.com/website/switch.html,noimg)
:備考|正直あんまり存在意義が感じられない機能。

**ajaxを利用したプレビュー [#gd38abee]
:概要|編集時、画面遷移せずに使えるプレビュー機能。
:参考|
#ogp(https://qiita.com/lioneo/items/491984392220c0f24ad0)
#ogp(https://ginpen.com/2013/05/07/jquery-ajax-form/)
:備考|
プレビュー時にいちいちエディタのスクロールリセットされるのが煩わしかったのでなんとかしてみた。
ajax、というかJavascriptの知識は全然なかったので少し勉強になった。
そのうちリアルタイムプレビューも欲しいかな。
*追加したプラグイン [#plugin_add]
インストール自体はしてあるが使っていない(非推奨)ものは除く。
**alias.inc.php [#add_alias]
:概要|あるページを他のページの別名にするプラグイン。
:参考|
#ogp(http://tomose.dynalias.net/junk/index.php?pukiwiki%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3/alias,noimg,base)
:備考|aliasを使ったページを管理するaliaslist.inc.phpも導入。
導入に際して[[rename.inc.php>プラグインの変更箇所/rename.inc.php]]を編集。
また、[[アンカーに対応させるための記述を追加>プラグインの変更箇所/alias.inc.php]]

**attachref.inc.php [#add_attach]
:概要|添付した画像をその場に置き換えるプラグイン。
:参考|
#ogp(https://pukiwiki.osdn.jp/?%E8%87%AA%E4%BD%9C%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3/attachref.inc.php,noimg)
:備考|PHP7に対応させるためsplit関数をexplodeに置換。
attach.inc.phpと同様最大ファイルサイズを512KBに。
**contentsx.inc.php [#add_toc]
:概要|標準contentsプラグインの拡張版。
:参考|
#ogp(http://pukiwiki.sonots.com/?Plugin%2Fcontentsx.inc.php,noimg)
:備考|[[開閉機能を追加>プラグインの変更箇所/contentsx.inc.php]]。

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


**iframe.inc.php [#add_iframe]
:概要|iframe埋め込み用プラグイン。
:参考|
#ogp(http://pukiwiki.sonots.com/?Plugin%2Fiframe.inc.php,noimg)
:備考|1.5.1以前でもHTML5用に改造してたのでobjectを使わず普通にiframeで埋め込み。
今の所SteamストアとDiscordのウィジェット、あとはSpreadsheetくらいしか許可していない。

**includex.inc.php [#add_includex]
:概要|他のページの内容を表示するプラグイン。
:参考|
#ogp(http://pukiwiki.sonots.com/?Plugin%2Fincludex.inc.php,noimg)
:備考|特になし。

**lsx.inc.php [#add_lsx]
:概要|ページをリストするためのプラグイン。
:参考|
#ogp(http://pukiwiki.sonots.com/?Plugin%2Flsx.inc.php,noimg)
:備考|同氏作成のincludex.inc.php及びcontentsx.inc.phpが必要。

**nop.inc.php [#add_nop]
:概要|指定部分のPukiWiki記法やリンクを無効にするプラグイン。
:参考|
#ogp(https://pukiwiki.osdn.jp/?%E8%B3%AA%E5%95%8F%E7%AE%B1/3323,noimg)
:備考|部分的にオートリンクしたくない文字列用に導入。

**null.inc.php [#add_null]
:概要|指定部分を空文字に置き換えるプラグイン。
:参考|
#ogp(https://pukiwiki.osdn.jp/?%E8%87%AA%E4%BD%9C%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%2Fnull.inc.php,noimg)
:備考|複数行のコメントアウトやテーブル内でのコメントアウト等に使用。

**ogp.inc.php [#add_ogp]
:概要|リンクをブログカード風に表示するプラグイン。
:参考|
#ogp(https://oncologynote.com/?c7fc224f04)
:備考|
XSS対策や機能追加などいろいろと改造 [[プラグインの変更箇所/ogp.inc.php]]
作者さんにも伝えといたほうがいいとは思うもののどこからコンタクトを取ったものか・・・
*プラグインの変更箇所 [#plugin_edit]
#lsx(プラグインの変更箇所)