ネットゲーム系でちょっとでも人の多いwikiには、RMT業者が広告を、ウィルス配布者がアカウントハックウィルスを含むファイル(主に*.exe)へのURLをバシバシ貼り付けてきます。
URLが貼り付け放題のwikiにおいて、閲覧者がおかしなサイトに飛ばないようにwiki管理者側で制限をかけることを実現します。
ランキングには以下の4タイプを用意します。
wiki内のリンクは以下のように表示されます。
内部リンクは、(自身に自信がある限り)安全であり、警告などを表示しません。
前:http://inner.site/ 後:http://inner.site/
認可リンクは、おそらく安全なので警告はしませんが、外部サイトである旨は表示します。
前:http://approve.site/ 後:http://approve.site/[→]
禁止リンクは、その場所に危険なURLが貼られたことを表示し、リンクは表示しません。
前:http://forbid.site/ 後:(この場所に危険なリンクが貼られました。他の部分も信用しないで下さい。)
未知のリンクは、外部サイトであることを表示し、危険性が不明である旨を警告します。
前:http://unknown.site/ 後:http://unknown.site/[→](このサイトは危険かもしれません)
pukiwiki1.4.7で実施しています。
やることは大きく4箇所です。
まず/rules.ini.phpに、以下のようにランキング判断情報を追加。設定はもちろん各自用に変更してください。
この変数は単純な配列で、その要素は連想配列が入っています。この連想配列の内容は以下の通りです。
次に、ランキング判断functionを作成します。/lib/make_link.php内のどこかに、以下のfunctionを貼り付けて作成完了です。長いのでテキストファイルで。
そして、<a>タグを自作している部分を、上記functionを通して作成するように変更します。/lib/make_link.php内には3箇所の該当個所があるので、すべて改造します。
class Link_url extends Link ~略 function toString() { ~略 //return '<a href="' . $this->name . '"' . $rel . '>' . $this->alias . '</a>'; return checkOuterSiteURL($this->name,$this->alias); }
class Link_url_interwiki extends Link ~略 function toString() { //return '<a href="' . $this->name . '" rel="nofollow">' . $this->alias . '</a>'; return checkOuterSiteURL($this->name,$this->alias); }
class Link_mailto extends Link ~略 function toString() { //return '<a href="mailto:' . $this->name . '" rel="nofollow">' . $this->alias . '</a>'; return checkOuterSiteURL('mailto:'.$this->name,$this->alias); }
最後に外部マークの定義ですが、cssの編集になります。/skin/pukiwiki.css.phpを開き、以下のように付け加えます。
div#body a.external{ padding-left:16px; background:url(outside.png) no-repeat left bottom; }
そして、outside.png(外向きリンクであることを示す画像)を適切な位置にアップロードすれば準備完了です。なお、「div#body」を付けるのを忘れると、メニューバーにも外部サイトマークがついてしまうので場合によっては不便です。付けておけば、本文部だけにマークがつきます。
でぃあばぁさんの cubic9.com:PukiWiki/改造/内部・外部リンクを区別する を改造させていただきました。m(_ _)m