レ点腫瘍学ノート

pukiwikiカスタマイズ箇所/2020/短縮URLを検索画面やリスト画面にも対応させる の履歴ソース(No.3)

#author("2020-09-15T08:16:36+09:00;2020-09-14T23:48:57+09:00","default:tgoto","tgoto")
#ref(https://oncologynote.com/img/27dbf117d9.jpg,nolink,短縮URLを検索画面やリスト画面にも対応させる)

*URL短縮スクリプトを検索画面やcmd=listにも対応させる

[[pukiwikiカスタマイズ箇所/2020]]の続きです。

ダジャレンジャーさんの[[PukiWikiのクソ長いURLをURL短縮ライブラリを組み込んで解決する!>https://dajya-ranger.com/pukiwiki/embed-url-shortener/]]で提供されているプラグインは非常に素晴らしいプラグインで、このサイトに書かれた方法ではほとんどのページのURLは短縮化されるのですが、cmd=listでのページ一覧画面とcmd=searchでの検索画面では短縮URLにならなかったため、これに対応させます。

まずダジャレンジャーさんのサイトの[[PukiWiki用URL短縮ライブラリ>https://dajya-ranger.com/sdm_downloads/short-url-library-pkwk153/]]から''shorturl_021.zip''をダウンロードしてきます。

この中には2つのフォルダ「shortener」「shortener_counter」が入っていますのでこれをPukiwikiフォルダにアップロードしておきます。

**shorturl.php

バージョン0.21から「ディレクトリ定義をDATA_HOMEからの指定に変更」されているようですが、なぜかこれがあるとうまく行かないので24行目と27行目を下記のようにDATA_HOMEを使わない方式に書き換えておきます。

>define('SHORT_URL_DIR', 'shortener'); //24行目
define('SHORT_URL_COUNTER_DIR', 'shortener_counter'); //27行目

**func.php

pagename_urlencodeとrawurlencodeが残っているところがURLが短縮されない部分なのでここを地道につぶしていきますが、''?''を含むと含まないの調整が必要です。rawurlencodeのほうで''?''を削るのはスマートにゆかず、不格好ですがsubstrを使って強引に1文字削っています。

>461行目
$r_page  = rawurlencode($page); //変更前
$rr_page  = get_short_url_from_pagename($page); //変更後
$r_page = substr($rr_page, 1); //変更後はこの1行を追加しておいて?を1文字削る

>552行目
$href = $script . '?'; //変更前。このはてなを外す必要がある。
$href = $script; //変更後

>558行目
$r_page  = pagename_urlencode($page); //変更前。これを短縮URLにする必要がある
$r_page  = get_short_url_from_pagename($page); //変更後

これでURL短縮スクリプトを検索画面やcmd=listにも対応させることができたはず。ほぼすべてのURLが短縮URLになったので、metaタグで指定するcanonical URLをこの短縮URLに指定しておくこともできそう。

*他プラグインへの応用

なお、このpagename_urlencode($page)をget_short_url_from_pagename($page)に書き換える方法は他のプラグインにも応用できます。

**rss.inc.php

RSSフィードを吐き出すrss.inc.phpは2カ所のpagename_urlencode($page)をget_short_url_from_pagename($page)に書き換えてやると短縮URLでのRSSを出力するようになります。ただし、そのままでは''?''が重なってエラーのあるリンクが出力されるので、56行目の<link>$self''?''$r_page</link>の''?''を削っておくことが必要です。

**sitemap.inc.php

サイトマップを作成するプラグインでも69行目から70行目に同様のpagename_urlencode($page)をget_short_url_from_pagename($page)に書き換えてやる改造を行います。なお、サイトマップはページを書き換えるたびに生成されるため、プラグインを修正後にサイトマップに修正を反映させるにはいずれかのページを書き換える必要があります。

#ogpi(https://oncologynote.com/?5b74253bf0)

&tag(pukiwiki,pukiwikiカスタマイズ,短縮URL);