[PHP] PukiWikiでページのランダムリンクを表示するプラグイン

2016年8月5日(更新: 2017年7月24日)

PukiWikiで登録されているページの中からランダムにリンクを生成するプラグインです。ありそうですが見当たらなかったので作ってみました。

オープンソースの Wiki である PukiWiki については下記のサイトをご覧ください。

FrontPage – PukiWiki-official

プラグインの動作サンプル

このように存在するページへのリンクをランダムに生成して横に並べます。

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でランダムにページのリンクを生成するプラグインのソースコードでした。

[PHP] PukiWikiでページのランダムリンクを表示するプラグイン」への4件のフィードバック

  1. はじめまして

    はじめまして
    使おうとしましたが使えません
    #randomlist(5,1)としてプラグインを使おうとしましたが、動きません
    randomlist.ini.php はpluguinフォルダに入れてあります

    返信
  2. はじめまして

    誤字しました
    pluginフォルダに入れてあります
    #randomlist(5,1)として使用しようとしても何も反応せず
    #randomlist(5,1)がそのまま表示されます

    返信
    1. JoyPlot 投稿作成者

      不具合のご報告をいただきありがとうございます。
      見直してみたところ、記事中に誤りがございました。

      ソースを保存するファイル名の部分が randomlist.ini.php となっていましたが、正しくは randomlist.inc.php でした。ini ではなく inc です。現在は記事中の誤りも修正されています。

      また、ソースコードも第二引数が省略可能なように修正を行いました。お手数ですが、最新のソースコードをコピーしていただければと思います。

      お手数をお掛けしてしまい、申し訳ございません。

      返信
  3. はじめまして

    お早い回答ありがとうございました
    おかげさまでランダム表示をすることができるようになりました

    本当にありがとうございました。プラグインを活用させていただきます

    返信

コメントを残す

メールアドレスが公開されることはありません。