v1.5

How to use

プラグインと銘打っていますが、ブロックプラグイン、インラインプラグインとしては動作しません。 スキンから php 関数として呼び出すことを前提としています。

<?php exist_plugin('wikinote'); ?>

のようにして require_once し、クラス PluginWikinote を使用してください。

PluginWikinote

PluginWikinote::PluginWikinote() - コンストラクタ

書式

object PluginWikinote (array $options = array() )

解説

wikinote オブジェクトを作成します。

引数

array $options

以下のオプションをキーとして持つ連想配列です。

オプションデータタイプデフォルト説明
prefix文字列Note/本文ページに対してノートページに付加される prefix。(例:PukiWiki -> Note/PukiWiki)
except文字列(正規表現)除外ページを正規表現で指定。除外ページとは wikinote を適用しないページのこと。
ヒント:デフォルトで $non_list で設定されるページや、RecentChanges, RecentDeleted, MenuBar などの特殊ページが除外ページに指定されています。
noautobooleanFALSE(自動作成の意)ノートページを自動で作成しない。
備考:wikipedia 的にはこちら。私はデフォルトで #comment を設置したかった。

返り値

object - wikinote オブジェクト

<?php 
$wikinote = new PluginWikinote(array(
    'prefix' => 'Note/',
    'except' => '^$',
    'noauto' => FALSE,
));
?>

PluginWikinote::is_valid()

PluginWikinote::is_valid() - wikinote を使用するページかどうか。

書式

boolean is_valid()

説明

現在ページが wikinote を使用するページなら TRUE を、そうでないなら FALSE を返します。上の except 参照。

引数

なし

返り値

boolen - 現在ページが wikinote を使用するページなら TRUE、そうでないなら FALSE

<?php
$wikinote = new PluginWikinote();
if ($wikinote->is_valid()) {
    echo 'wikinote!';
}
?>

PluginWikinote::show_links()

PluginWikinote::show_links() - wikinote リンクの表示

書式

string show_links(array $options = array('main' => 'Article', 'note' => 'Comment'))

説明

wikinote リンクを表示します。

引数

array $options

以下のオプションをキーとして持つ連想配列です。

オプションデータタイプデフォルト説明
main文字列本文ページへのリンクを表示します。リンク表示文字列を値として指定します。
note文字列ノートページへのリンクを表示します。以下同文
その他文字列edit や diff などの cmd を指定、それへのリンクを表示します。以下同文

返り値

string - <ul class="wikinote"><li>リンク</li><li>リンク</li>...</ul> のように生成された文字列

<?php
$wikinote = new PluginWikinote();
if ($wikinote->is_valid()) {
    echo $wikinote->show_links(array(
              'edit'=>'Edit',
              'diff'=>'Diff',
              'main'=>'Article',
              'note'=>'Comment',
    ));
}
?>

Sample

pukiwiki 本家デフォルトスキンでは次のように設置すると良いかもしれません。 せっかく隙間があるので topicpath も表示させています。

wikinote.jpg

skin/pukiwiki.skin.php

  <td valign="top">
   <div id="body"><?php echo $body ?></div>
  </td>

  <td valign="top">
   <?php exist_plugin('wikinote'); ?>
   <?php $wikinote = new PluginWikinote(array('prefix'=>'Note/')); ?>
   <?php if ($wikinote->is_valid()) {
       echo $wikinote->show_links(array(
           'edit'=>'編集',
           'diff'=>'差分',
           'main'=>'本文',
           'note'=>'コメント',
       )); 
   } ?>
   <?php if (arg_check('read') && exist_plugin_inline('topicpath')) { 
     echo '<div class="topicpath">' . do_plugin_inline('topicpath') . '</div>'; 
   } ?>
   <?php if ($wikinote->is_valid()) { echo '<div style="clear:both;"></div>'; } ?>
   <?php if ($wikinote->is_valid()) { echo '<div id="wrap_body">'; } ?>
   <div id="body"><?php echo $body ?></div>
   <?php if ($wikinote->is_valid()) { echo '</div>'; } ?>
  </td>

日本語を label に使用する場合は pukiwiki.skin.php の文字コードを pukiwiki に合わせてください(EUC or UTF-8)。

pukiwiki.css.php

/* wikinote.inc.php */
ul.wikinote{
	float:right;
	list-style-type:none;
	padding:0;
	margin:0;
	line-height:2em;
	overflow:visible;
}
ul.wikinote li{
	display:inline;
}
ul.wikinote li a {
	border:1px solid black;
	text-decoration:none;
	background-color:#DDEEFF;
	margin:0 5px;
	padding:4px 10px 1em 10px;
}
ul.wikinote li a:hover {
}
ul.wikinote li.selected a {
	color:#000;
	position:relative;
	z-index:1;
	line-height:2em;
	background-color:#fff;
	border-bottom:none;
	padding-bottom:.45em;/*adjust me*/
	text-decoration:none;
}

div#wrap_body {
	position:relative;
	background:#fff;
	margin:0px;
	padding:0px;
	border-top:1px solid black;
	padding-top:5px;
}

ダウンロード: filewikinote.css

配置を変えるような修正をする場合は、インラインのタブ・メニュー を読んで動作理解をしてからの ほうが最終的には時間短縮になるかもしれません。

Reference

  • CSS Tabs | unraveled - ul で下線を引いて background-color 上書き可能に。そのため float:right; で下線が width:100%; 的にならず
  • インラインのタブ・メニュー -- z-index: を用いて線を上書き(position:relative;のとき有効になる)。こちら式。

Additional Configuration - template

ノートページ用テンプレートが利用できます。

テンプレートページが作成されていない場合、

#comment

が使用されます。

テンプレートページ名の定義は通常ページと同じく、pukiwiki.ini.php 中の $auto_template_rules が使用されます。 デフォルト

$auto_template_rules = array(
        '((.+)\/([^\/]+))' => '\2/template'
);

の場合、例えば本文ページ名が ほげほげ/ぶらぶら の場合、ノートページ名が Note/ほげほげ/ぶらぶら になりますので、 Note/ほげほげ/template が探索されることになります。

私は

$auto_template_rules = array(
        '((.+)\/([^\/]+))' => '\2/template'
        '(([^\/]+)\/(.+))' => '\2/template'
        '(()(.*))'         => 'template'
);

のようにして、Note/ 接頭辞のついた全ページに Note/template を適用可、 ついでに全ページ用のテンプレート template を用意可にしています。 本当は Note/ほげほげ/ぶらぶら/ぺけぺけ → Note/ほげほげ/ぶらぶら/template → Note/ほげほげ/template → Note/template → template としたいのですが、この pukiwiki の仕様では無理があります。

ついでに $non_list にも template を登録して、隠れるようにしています。

$non_list = '^:|(^|\/)template$'

参考

dev:PukiWiki/1.4/マニュアル/テンプレート

FAQ

  • 途中で prefix を代えたくなった場合は

    prefix を変更して設置し、 rename プラグインを用いてノートページ名を変更すると良いでしょう。 そのわずかな隙にノートページが作成されても上書きできます。

  • 本文ページとノートページを一緒に移動したい

    それも rename プラグインでできます。

  • ノートページは最終更新(recent) に載って欲しくない

    prefix を :Note/ とするか、pukiwiki.ini.php 中の $non_list を

    $non_list = '^:|^Note\/';
    とすると良いでしょう。
  • すでにできてしまったノートページの内容を変えたい

    replace プラグインや、../regexp.inc.php? を使用して、#comment の文字を置き換えると良いかもしれません。

Compatibility Check

Please join us to check compatibilities.

Compatible

Selection Vote
PHP4 1
PHP5 0
1.3.7 0
1.4.3 0
1.4.4 0
1.4.5_1 0
1.4.6 1
1.4.7 2
1.4.5plus-eucjp 0
1.4.6plus-u1-eucjp 1
1.4.6plus-u2-eucjp 1
1.4.5plus-u2-i18n 0
1.4.6plus-u1-i18n 0
1.4.6plus-u2-i18n 0
1.4.7plus-i18n 3
1.4.7plus-u2-i18n 1

Incompatible

Selection Vote
PHP4 1
PHP5 0
1.3.7 0
1.4.3 0
1.4.4 0
1.4.5_1 0
1.4.6 0
1.4.7 0
1.4.5plus-eucjp 0
1.4.6plus-u1-eucjp 0
1.4.6plus-u2-eucjp 0
1.4.5plus-u2-i18n 0
1.4.6plus-u1-i18n 0
1.4.6plus-u2-i18n 0
1.4.7plus-i18n 1
1.4.7plus-u2-i18n 1