Table of Contents
PukiWikiで登録されているページの中からランダムにリンクを生成するプラグインです。ありそうですが見当たらなかったので作ってみました。
オープンソースの Wiki である PukiWiki については下記のサイトをご覧ください。
プラグインの動作サンプル
このように存在するページへのリンクをランダムに生成して横に並べます。
実際に使っているページはこちら。
プラグインの全コード
<?php
// Copyright (C) PukiWiki Developers Team
// License: GPL version 2
// 2016-2017 JoyPlot
// 第1引数: ランダムに表示するリンクの数
// 第2引数: 各リンクの右側に付く余白
define('USAGE', 'USAGE: #randomlist(numberOfShowingItem, rightMarginOfItem)');
function plugin_randomlist_convert() {
// 各リンクにつける右側の余白(デフォルト値)
$rightMarginOfItem = 16;
// 表示する用語の数
$showCount = 5;
if (func_num_args()) {
$args = func_get_args();
if (is_numeric($args[0])) {
// 第一引数から表示件数を読み込む
$showCount = $args[0];
if (is_numeric($args[1])) {
// 第二引数から項目の余白を取得
$rightMarginOfItem = $args[1];
}
} else {
return USAGE . '<br>';
}
}
// クエリを除いたページURL
$baseURL = get_script_uri();
// すべてのページのリストを取得
$allPages = get_existpages();
// 隠しページを取り除いた全ページを格納する配列
$pages = array();
// 隠しページを取り除く
foreach ($allPages as $page) {
if (check_non_list($page)) {
continue;
}
$pages[] = $page;
}
// 全ページ数
$allPageNum = count($pages);
// DOMの作成
$stylesheet = 'display: inline-block; margin-right: ' . $rightMarginOfItem . 'px;';
// 同じページへのリンクを生成しないように管理するための配列
$alreadyAddedItem = array();
$output = '<div class="randomList">';
for ($i = 0; $i < $showCount; $i++) {
$target = rand(0, $allPageNum - 1);
// 同じリンクを生成しようとしたらやり直し
$retry = false;
foreach ($alreadyAddedItem as $addedNum) {
if ($target === $addedNum) {
$retry = true;
break;
}
}
if ($retry) {
$i--;
continue;
}
// 作ったリンクを登録
$alreadyAddedItem[] = $target;
$targetPageName = current(array_slice($pages, $target, 1, true));
$r_page = pagename_urlencode($targetPageName);
$output .= '<span style="' . $stylesheet . '"><a href="' . $baseURL . '?' . $r_page . '">' . $targetPageName . '</a></span>';
}
$output .= '</div>';
return $output;
}
プラグインの使い方
ファイル名を randomlist.inc.php として pluginディレクトリ に保存してください。
表示したい部分で以下のように書きます。
#randomlist(表示するリンクの数, 各リンクの右側の余白);
第二引数は任意です。入力がなかった場合、デフォルト値である 16px が使用されます。
pukiwiki.ini.php で設定されている $non_list の正規表現に一致する隠しページ(デフォルトでは : から始めるページ)は表示されないようになっています。
以上、PukiWikiでランダムにページのリンクを生成するプラグインのソースコードでした。


はじめまして
使おうとしましたが使えません
#randomlist(5,1)としてプラグインを使おうとしましたが、動きません
randomlist.ini.php はpluguinフォルダに入れてあります
誤字しました
pluginフォルダに入れてあります
#randomlist(5,1)として使用しようとしても何も反応せず
#randomlist(5,1)がそのまま表示されます
不具合のご報告をいただきありがとうございます。
見直してみたところ、記事中に誤りがございました。
ソースを保存するファイル名の部分が randomlist.ini.php となっていましたが、正しくは randomlist.inc.php でした。ini ではなく inc です。現在は記事中の誤りも修正されています。
また、ソースコードも第二引数が省略可能なように修正を行いました。お手数ですが、最新のソースコードをコピーしていただければと思います。
お手数をお掛けしてしまい、申し訳ございません。
お早い回答ありがとうございました
おかげさまでランダム表示をすることができるようになりました
本当にありがとうございました。プラグインを活用させていただきます