知人に頼まれて被リンクされているページ一覧から指定の階層を含むページの一覧を表示するpukiwikiプラグインを作ってみた。
<?php
/**
* related_in plugin
*
* @author halt <halt.hde@gmail.com>
*/
function plugin_related_in_convert()
{
global $vars;
global $script;
global $non_list;
global $defaultpage;
global $whatsnew;
$args = func_get_args();
$word = $args[0] . '/';
$_page = isset($vars['page']) ? $vars['page'] : '';
if ($_page == '') $_page = $defaultpage;
// Get related from cache
$data = links_get_related_db($_page);
if (! empty($data)) {
// Hide by array keys (not values)
$non_list_pattern = '/' . $non_list . '/';
foreach(array_keys($data) as $page)
if ($page == $whatsnew ||
preg_match($non_list_pattern, $page)){
unset($data[$page]);
}
}
// Result
$r_word = rawurlencode($_page);
$s_word = htmlspecialchars($_page);
$retval = '';
//$retval = '<a href="' . $script . '?' . $r_word . '">' .
'Return to ' . $s_word .'</a><br/>'. "\n";
if (empty($data)) {
$retval .= '<ul><li>No related pages found.</li></ul>' . "\n";
} else {
// Show count($data)?
ksort($data);
$retval .= '<ul>' . "\n";
foreach ($data as $page=>$time) {
if ( strpos($page, $word) !== false) {
$r_page = rawurlencode($page);
$s_page = htmlspecialchars($page);
$passage = get_passage($time);
$retval .= ' <li><a href="' . $script . '?' . $r_page . '">' . $s_page .
'</a> ' . $passage . '</li>' . "\n";
}
}
$retval .= '</ul>' . "\n";
}
return $retval;
}
?>
relatedプラグインをコピーして、指定の階層が含まれるものだけを抽出するように変更しただけ。
やらなきゃいけない事がある時に限って他ごとしたくなりませんか?
Related posts: