• 追加された行はこの色です。
  • 削除された行はこの色です。
#author("2020-01-06T01:31:15+09:00","default:kanateko0404","kanateko0404")
Pukiwiki1.5.1を弄りまくってたらPukiwiki1.5.2にバージョンアップするときにちょっと苦労したので変更箇所をメモ書き。
#author("2022-05-22T14:41:55+09:00;2022-05-21T20:34:59+09:00","default:kanateko","kanateko")
&tag(カスタマイズ);

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

#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)
[[質問箱/4436 - PukiWiki-official:https://pukiwiki.osdn.jp/?%E8%B3%AA%E5%95%8F%E7%AE%B1/4436]]
:備考|RecentにAutoAliasNameを表示したくなかったのでpukiwiki.ini.phpの$non_listに追加。
対象とするページの設定いじった方が良かった気もする (先頭にコロン追加)。
&br;
変更前
#prism(php,0){{
// Regex of ignore pages
$non_list = '^\:';
}}
変更後
#prism(php,0){{
// Regex of ignore pages
$non_list = '^\:|^AutoAliasName';
}}

PukiWiki 1.5.3から標準搭載された。

**タグ入力支援 [#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)
[[Software/wiki自作プラグイン/instag.inc.php - DEX Lab: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]]
:備考|スキンのheadに追加する記述で、paraeditを使っていないので代わりにseceditとareaeditを追加
&br;
変更前
#prism(php,0){{
<?php if ($_GET['cmd']=='edit'|| isset($_POST['preview']) || isset($_POST['template']) || $_GET['cmd']=='paraedit' ) { ?>
}}
変更後
#prism(php,0){{
<?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の対象に指定すると誤検知しまくるのでどうにかしたいところ。
[[PukiWiki1.5.2にスパム対策メールフォームを設置!Googleアドセンスに備える! | SEの良心:https://dajya-ranger.com/pukiwiki/setting-mail-form/]]
:参考|Akismet使うと編集時に誤検知しまくるのでそれ以外を活用することに。

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

:参考|[[BugTrack/2525 - PukiWiki-dev:https://pukiwiki.osdn.jp/dev/?BugTrack/2525]]
:備考|PukiWiki 1.5.4で実装されたURLカスタマイズ機能を使用。参考先の実動作サンプルの8と9を組み合わせる形で運用中。クエリが12文字以上の場合に10文字の英数字からなるIDに変換し、元のURLにアクセスした場合も短縮URLにリダイレクトするように。
**OGPタグ [#ogp]
:概要|Twitter用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)
:備考|各見出しに使用するparaedit.pngを除外するよう調整。
ついでに画像がないページは設定したアイキャッチが表示されるように。
[[ソフトウェア/pukiwiki/Open Graph Protocol (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;
#ac(などを経て最終的にこうなった (旧版)){{{
#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]]で使っているもの。
}}}
&br;
2021-07-12追記:
目次やタグの出力を変えたためdescriptionの生成が以前のコードだと使えなくなってしまった。こういった変更があるたびにコードの除外部分に手を加えるのも面倒なので、必要なもの抜き出していく形に変更した。結果として大分スッキリしたコードになった。
&br;
以下はdescription部分のみ
#prism(php,false){{
<?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]
:概要|ページ上部に各種SNS用のシェアボタンを表示する。
:参考|
#ogp(https://fit-jp.com/sharebtn/)
:備考|レスポンシブ対応の一環でモニタサイズによってデザインが変わるようCSSで調整。
//[[シェアされるシェアボタンとは。CSSだけで作られた12のオリジナルレスポンシブシェアボタン【無料ダウンロード】–[FIT BLOG-フィットブログ]:https://fit-jp.com/sharebtn/]]
~-

:備考|
2021年7月のサイトデザイン一新に伴って大幅に作り変え。
今はアイコンフォントを使わずSVGで直接表示している。

**スライドメニュー [#menu]
:概要|ボタンを押すと横からスライドしてくるサイドメニュー。
:参考|[[レスポンシブでハンバーガーメニューになる固定サイドバー | webOpixel:https://www.webopixel.net/javascript/1289.html]]
:備考|
スマホ用。開閉ボタンは画面右側に表示。
押しやすいように右側にボタン配置しているが、左からメニュー出てくるの違和感あるから下からスライドしてくるように変えたほうが良いかもしれない。

**非同期プレビュー [#gd38abee]
:概要|編集時、画面遷移せずに使えるプレビュー機能。
:参考|
#ogp(https://www.webopixel.net/javascript/1289.html)
:備考|スマホ用。画面上部に常に表示。
スクロールボタンとか加えたほうが良いかも。
[[【JS】Fetch APIでPOST送信してみる(Form送信との比較も) - クモのようにコツコツと:https://www.i-ryo.com/entry/2020/07/31/202219]]
[[fetchとかで取ってきた生HTMLからDOMを作ってqueryselector()をしたい。 - Qiita:https://qiita.com/narikei/items/df358e1baba85ebf3ec3]]
:備考|
プレビュー時に毎回スクロール位置がリセットされるのが煩わしかったのでなんとかしてみた。
2022年2月を堺にjQueryのAjaxからFetch APIに切り替え。
各プラグインの動作に必要なスクリプトなどをどう読み込むかが課題。
とりあえず現状一部のプラグイン以外はプレビュー時にも動作するはず。
*追加したプラグイン [#plugin_add]
気が向いたときに追記している程度なのでここに書かれていないプラグインも多くある。いつかマニュアルを整備したい……
[[自作プラグイン]]は別ページに。

**PC/スマホ切り替えボタン [#q46fdd82]
:概要|PC/スマホでページの幅を切り替えるボタン
**alias.inc.php [#add_alias]
:概要|あるページを他のページの別名にするプラグイン。
:参考|
#ogp(https://okodukai-cho.com/website/switch.html)
:備考|正直あんまり存在意義が感じられない機能。
[[pukiwikiプラグイン/alias - Tomose's junkyard.:http://tomose.dynalias.net/junk/index.php?pukiwiki%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3/alias]]
:備考|aliasを使ったページを管理するaliaslist.inc.phpも導入。
導入に際して[[rename.inc.php>プラグインの変更箇所/rename.inc.php]]を編集。
また、[[アンカーに対応させるための記述を追加>プラグインの変更箇所/alias.inc.php]]

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

**contentsx.inc.php [#add_toc]
:概要|標準contentsプラグインの拡張版。
:参考|
[[Plugin/contentsx.inc.php - Sonots' PukiWiki プラグイン:http://pukiwiki.sonots.com/?Plugin%2Fcontentsx.inc.php]]
:備考|[[開閉機能を追加>プラグインの変更箇所/contentsx.inc.php]]。
PHP8.0でも動くように修正。 (他のsonots氏製プラグインも同様)

**includex.inc.php [#add_includex]
:概要|他のページの内容を表示するプラグイン。
:参考|
[[Plugin/includex.inc.php - Sonots' PukiWiki プラグイン:http://pukiwiki.sonots.com/?Plugin%2Fincludex.inc.php]]
:備考|PHP8.0でも動くように修正。 (他のsonots氏製プラグインも同様)

**lsx.inc.php [#add_lsx]
:概要|ページをリストするためのプラグイン。
:参考|
[[Plugin/lsx.inc.php - Sonots' PukiWiki プラグイン:http://pukiwiki.sonots.com/?Plugin%2Flsx.inc.php]]
:備考|同氏作成のincludex.inc.php及びcontentsx.inc.phpが必要。
PHP8.0でも動くように修正。 (他のsonots氏製プラグインも同様)

**nop.inc.php [#add_nop]
:概要|指定部分のPukiWiki記法やリンクを無効にするプラグイン。
:参考|
[[質問箱/3323 - PukiWiki-official:https://pukiwiki.osdn.jp/?%E8%B3%AA%E5%95%8F%E7%AE%B1/3323]]
:備考|部分的にオートリンクしたくない文字列用に導入。
PHP7.4に上げた (というかレン鯖側で勝手に上げられた) ときに入れ子の部分でFatal Error吐かれてて焦った。

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

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

**sortabletable [#add_sortabletable]
:概要|表をソートできるようにするプラグイン。
:参考|
--[[PukiWikiで表をソートしたい | OXY NOTES:https://oxynotes.com/?p=175]]
--[[PukiWiki用ソートテーブル(表)プラグインを導入する! | SEの良心:https://dajya-ranger.com/pukiwiki/sortable-table-plugin/]]
:備考|
プラグイン名は旧版のままだが中身は新しい方 (sortable_table) に挿げ替え。
旧版との互換性を持たせるためにいくらか改造 & 一部バグが有ったので修正。
[[プラグインの変更箇所/sortabletable.inc.php]]

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

**tag.inc.php [#add_tag]
:概要|ページにタグを付けてカテゴリ分けするプラグイン。
:参考|
[[Plugin/tag.inc.php - Sonots' PukiWiki プラグイン:http://pukiwiki.sonots.com/?Plugin%2Ftag.inc.php]]
:備考|個人的にページを階層化するよりスッキリすると感じたため導入。
指定タグが付いたページをリスト化するtaglistも便利。
タグを単純にリストへ移動するためのリンクとして貼るtaglinkプラグインを追加で自作して運用中。
PHP8.0でも動くように修正。 (他のsonots氏製プラグインも同様)

*プラグインの変更箇所 [#plugin_edit]
#lsx(プラグインの変更箇所)
#space