過去物/PukiWiki改造メモ

Top > 過去物 > PukiWiki改造メモ

本気でメモなので他人が読むようにはできていません。しかも古い。

Table of Contents

メモ

  • autoalias http://teanan.homeip.net/pukiwiki/?%BC%AB%BA%EE%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3%2Fautoalias.diff
  • <?php require_once(PLUGIN_DIR.'topicpath.inc.php'); echo plugin_topicpath_convert(); ?> ではなく do_plugin_convert (plugin.php を使用したほうがよさそう)
  • http://pukiwiki.sourceforge.jp/dev/?%CA%DD%BC%E9%A5%C4%A1%BC%A5%EB -- 2004-08-06 (金) 13:29:43
  • table レイアウトを float レイアウトにしないと pre { line-break:strict; word-break:break-all; word-wrap:break-word;} 利かない? いや、一応利いてはいるのか。-- 2004-07-18 (日) 02:16:04
  • iframe の scrolling="no" はスタイルシートで。
  • pukiwiki.sourceforge.jp:自作プラグイン/urlbookmark.inc.php -- 2004-07-01 (木) 23:27:29
  • ls2 のアクション使ってファイル名検索できてもいいよな。一覧開いてブラウザ検索じゃあね。でもあれははじまりだけか・・・正規表現部分変えないとか・・・うーん。-- 2004-06-25 (金) 18:16:19
  • timestamp を更新しないにチェックをつけても、次の日辺り or 他のファイルが更新されたとき?にタイムスタンプが更新される?ファイルの所有者がウェブサーバーじゃなくて自分の場合失敗する?といっても今変更できんしな。 -- 2004-06-21 (月) 00:45:24
  • comment2 を作ってみたが pcomment2 を作りたい。insert, article の改造・・・じゃだめだな。-- 2004-06-20 (日) 21:24:44
  • skin で MenuBar を常に表示するようにし、MenuBar に見出しを2つ以上書くと、一覧をみたときに Array という文字列がでてくる。どこで直すのやら。 -- 2004-05-29 (土) 22:43:40
  • $autolink = 5 にしてもファイル od はオートリンクされたな・・・わけわかめ。 -- 2004-05-24 (月) 23:52:55
  • autolink 単語単位にならんもんかね? -- 2004-05-24 (月) 23:52:18
  • list_unlimit.diff で ****** 見出しは ** と2つは表示されてしまうのを消したい。 -- 2004-05-22 (土) 04:56:38
  • areaedit で preview になるのをとめたい。edit でいい。いや、preview になるからどこからどこまでかわかるのか。ではせめてフォームを上に持っていきたい。いや、プレビュー機能そのまま使用しているから、本当のプレビューのときに困る。結論:そのまま -- 2004-05-22 (土) 04:55:44

参考になるページ

PyukiWiki/自作プラグイン:http://nekyo.hp.infoseek.co.jp/cgi-bin/wiki/wiki.cgi?PyukiWiki%2f%bc%ab%ba%ee%a5%d7%a5%e9%a5%b0%a5%a4%a5%f3 -- 2004-06-23 (水) 21:27:36

パッチ

とりあえずWikiのディレクトリに行って、 patch < hoge.diff

search.diff 検索の表示拡張

デフォルトでは検索文字列を含んだページを出力するだけだが、ページ内のマッチした行も出力するようにする。

dev:PukiWiki/1.4/ちょっと便利に/単語検索の結果表示を拡張 http://home.arino.jp/index.php?cmd=read&page=PukiWiki&word=search.diff

block_pre.diff 行頭<pre>〜行頭</pre>間を整形済みとする

convert_html.php

<pre>...</pre>

だったが、

#pre...#pre(end)

のほうがなんか見やすいと思うので、

class Body extends Block
function parse(&$lines)

の <pre>, </pre> を #pre, #pre(end) に変更。 この pre は文中でリンクなどを扱える特殊なものなので、

$this->tagblock($lines, '#pre2', '#pre2(end)', 'Pre_inline');
$this->tagblock($lines, '#pre', '#pre(end)','Pre');

のようにして、pre2 ならリンクなどを扱える。pre なら普通のテキスト整形に分けた。

list_unlimit.diff 見出しを5段まで、リスト階層を無制限に

pukiwiki.dev のほうは古いバージョンとの diff みたいで、パッチがマッチしませんでした。 しろくろのへやのほうはOK.

でも ****** とすると ** と2つ残るぞ。**** なら1つ。どこいじるのかわからん。

para_edit.diff 見出しごとの編集

edit アイコンの表示位置

plugin/edit.inc.php で function plugin_edit_inline() に

<img style="float:right;" src="image/edit.png" alt="Edit" title="Edit" />

となっているところがあるはずなのでそこで編集マークの位置を変える。

<img class="paraedit" src="image/edit.png" alt="Edit" title="Edit" />

として、以降はスタイルシートの img.paraedit と .anchor_super でいじることにした。 とりあえず print.ja.css に

.anchor_super{
   display:none;
}

convert_html.php, function getAnchor の &edit(,$id) ところで利用されている。

	function getAnchor($text,$level)
	{
		global $top,$_symbol_anchor;
		
		$anchor = (($id = make_heading($text,FALSE)) == '') ?
			'' : " &aname($id,super,full)\{$_symbol_anchor};";
		$edit = ($anchor == '') ? '' : " &edit(,$id);";
		$text = ' '.$text;
		$id = "content_{$this->id}_{$this->count}";
		$this->count++;
		$this->contents_last = &$this->contents_last->add(new Contents_UList($text,$level,$id));
		
		return array($edit . $text . $anchor, $this->count > 1 ? "\n$top" : '', $id);
	}

include.inc.php や calendar_viewer もいじる必要がある。 自分はページ名見出しにもつける。 pukiwiki.sourceforge.jp のようにしたい場合は org:続・質問箱/38 参照

MenuBar で para_edit アイコンがでないようにする

org:続・質問箱/132

plugin/menu.inc.php の

	return preg_replace('/<ul[^>]*>/','<ul>',convert_html(get_source($page)));

	$menutext = preg_replace('/^(\*{1,3}.*)\[#[A-Za-z][\w-]+\](.*)$/m', '$1$2', get_source($page));
	return preg_replace('/<ul[^>]*>/','<ul>',convert_html($menutext));

に変更

見出しのレベルに応じたパラグラフ単位の編集

http://home.arino.jp/index.php?%E8%B3%AA%E5%95%8F%E7%AE%B1%2F74

function plugin_edit_parts($id,&$source,$postdata='')
{
	$postdata = rtrim($postdata)."\n";
	$heads = preg_grep('/^\*{1,3}.+$/',$source);
	while (list($start,$line) = each($heads))
	{
		if (preg_match("/\[#$id\]/",$line))
		{
		$span = strspn($line,"\*");
		while(list($end,$line) = each($heads))
		{
			if(preg_match("/^\*{1,{$span}}(?!\*).+$/",$line))
			{
			return join('',array_splice($source,$start,$end - $start,$postdata));
			}
		}
		return join('',array_splice($source,$start,count($source)-$start,$postdata));
		}
	}
	return FALSE;
}

plugin

プラグイン、または既存プラグインの設定、改良。

画面分割プラグイン

div float による画面分割。

  • div レイアウトにしているので clear でおかしくなる・・・(IE,Opera)
  • さらに IE だと 50% が body の 50% ではなく全体の 50% になる。table レイアウトなら大丈夫なのか?
  • 逆にこのプラグインを table にしてみた。IE での 50% もbody 部分の 50% になるが、 整形済みテキストが 50% で word-break されない。

cookie

org:自作プラグイン/cookie.inc.php

cookie.js にしてスキンでとりこむ。

refpre 添付ファイルを pre で表示するプラグイン

Check it out

mailbbs プラグイン

iframe プラグイン 他サイトの HTML 等を iframe タグでとりこむ

とりこめるURLを限定できるように改造した。

kifubbs プラグイン

別に棋譜機能はいらんのだが(offにできるし)、普通の bbs チックに書き込める。

areaedit ページ内の指定領域のみを編集対象とするプラグイン

pukiwiki:自作プラグイン/areaedit.inc.php

<div style="margin:0px 0px 0px auto;text-align:right;" title="$areaedit_start_no">
...
</div>

<div class="areaedit" title="$areaedit_start_no">
...
</div>

に変えてスタイルシートで変更できるように。もっとある。

あとは「編集」とかを好きなように。

<img src="image/edit.png" alt="Edit" title="Edit" />

に変えた。

topicpath 階層表現のリンクを作る

階層表現のリンクを作るプラグインをインストール。 pukiwiki.sourceforge.jp:自作プラグイン/topicpath.inc.php

UNIXコマンド一覧/テキスト処理/less - ページャ

のようなものが表示される。リンクとともに。

#topicpath

のようにして使う。

pukiwiki.ja.skin.php を編集してページ名表示の部分にこれを使用することにした。 また、include の際にも使用するようにした。

filetopicpath.inc.php.diff

  • トップページの場合表示してくれなかった。
  • トップページが変わるたび、トップページの表示名の設定をしなければならないのは馬鹿っぽい。
  • また、
    //	自分のページに対するリンクを表示するかどうか
    define("PLUGIN_TOPICPATH_THIS_PAGE_DISPLAY",FALSE);
    で、ページ名そのものを出さないのではなく、そのページへのページ名は表示するがリンクはしない。というように変更。
  • また、引数を受け付けてほしいときがあった。

paraedit パラグラフ単位の編集(不要)

パラグラフ単位の編集ができるように paraedit プラグインをインストール
http://linux.s33.xrea.com:8080/SxWiki/index.php?ParaEdit#content_1_1
[edit] の表示は見出しの下にした。

また、

//define(_EDIT_LINK, '<div style="text-align: right; font-size: x-small; 
padding: 0px; "><a href="%s">[edit]</a></div>');

define(_EDIT_LINK, '<div class="paraedit"><a href="%s">[edit]</a></div>');

に変更して、default.ja.css のほうで変更することにした。

div.paraedit{
  text-align: right;
  font-size: x-small;
  padding: 0px;
}

にした。 本当をいうと、[edit] ではなく <h2><a>...</a></h2> のようにしたいが、 paraedit の中身を解析しないといけないようなので、とりあえず断念。

para_edit.diff のほうだと <h2>... <a>[edit]</a></h2> のような感じになる。こちらを採用。このプラグインは $body を解析して、表示を変えなおしているみたいだし。skin いじらないといけないし。 arg_check('edit') が paraedit には反応しないし。

標準プラグイン

plugin/diff.inc.php

差分表示時に先頭の空白をなくす。

せっかくなので、pukiwiki.ini.php 中の $preformat_ltrim を利用する。

+	global $preformat_ltrim;
	if (file_exists($filename)) {
		$diffdata = htmlspecialchars(join('',file($filename)));
-		$diffdata = preg_replace('/^(\-)(.*)$/m','<span class="diff_removed"> $2</span>',$diffdata);
+		$diffdata = preg_replace('/^(\-)(.*)$/m',' <span class="diff_removed">$2</span>',$diffdata);
-		$diffdata = preg_replace('/^(\+)(.*)$/m','<span class="diff_added"> $2</span>',$diffdata);
+		$diffdata = preg_replace('/^(\+)(.*)$/m',' <span class="diff_added">$2</span>',$diffdata);
+		if($preformat_ltrim)
+		{
+			$diffdata = preg_replace('/^ /m','',$diffdata);
+		}

plugin/pupular.inc.php

昨日のxx件も表示

#refpre(popular.inc.php.diff)

en.lng, ja.lng へ $_popular_plugin_yesterday_frame の追加も必要。

plugin/rename.inc.php

rename の際に管理者パスワードを求めない。

276 行目

	//if (md5($pass) == $adminpass)
	if (TRUE)
	{

ref attachの広告表示サーバ対応(失敗)

単純にファイルに直にリンクを貼るようにする。カウント機能は使えなくなる。

plugin/ref.inc.php

-		$file = UPLOAD_DIR.encode($page).'_'.encode($name);
+ 		$extension = strrchr($name,".");
+		$file = UPLOAD_DIR.encode($page).'_'.encode($name).$extension;

に変更。拡張子をつけないとブラウザがきちんと表示してくれないことが。

$pattern = "/^({$page_pattern})_((?:[0-9A-F]{2})+)\.[a-zA-Z]+{$age_pattern}$/";
-		$url = $script.'?plugin=attach&amp;openfile='.rawurlencode($name). '&amp;refer='.rawurlencode($page);
+		$url = dirname($script).$file;

直にファイルを指定する。Wiki のカウント機能は使えなくなる。

plugin/attach.inc.php

class AttachFile の function AttachFile の

		$this->filename = $this->basename . ($age ? '.'.$age : '');

		$extension = strrchr($this->file,".");
		$this->filename = $this->basename . ($age ? '.'.$age : '') . $extension;

に変更。function toString の

		return "<a href=\"$script?plugin=attach&amp;pcmd=open$param\" title=\"$title\">$label</a>$count$info";

		return "<a href=\"".dirname($script).$this->filename."\" title=\"$title\">$label</a>$count$info";

に変更。あれ?下の詳細がでなくなった・・・(´・ω・`)

xrea なので元に戻して .htaccess に IgnoreLayoutURI * を書くだけにした・・・(´・ω・`)

tracker.inc.php

質問箱の設置

http://home.arino.jp/?tracker.inc.php 参照

のように設定してあります。

ページ名を「質問箱/番号」から「質問箱/番号 - サマリ」に変更。

一覧や最新の10件をみてもどの質問のことがパッと見わからないので。

Index: plugin/tracker.inc.php
===================================================================
RCS file: /cvsroot/pukiwiki/pukiwiki/plugin/tracker.inc.php,v
retrieving revision 1.20
diff -u -r1.20 tracker.inc.php
--- plugin/tracker.inc.php	3 Dec 2003 12:36:02 -0000	1.20
+++ plugin/tracker.inc.php	23 Jun 2004 12:04:01 -0000
@@ -2,7 +2,7 @@
 /////////////////////////////////////////////////
 // PukiWiki - Yet another WikiWikiWeb clone.
 //
-// $Id: tracker.inc.php,v 1.20 2003/12/03 12:36:02 arino Exp $
+// $Id: tracker.inc.php,v 1.4 2004/06/19 05:32:58 Administrator Exp $
 //
 
 // tracker_listで表示しないページ名(正規表現で)
@@ -117,7 +117,7 @@
 	}
 	else
 	{
-		$real = is_pagename($name) ? $name : ++$num;
+		$real = is_pagename($name) ? $name : ++$num." - ".$post['summary'];
 		$page = get_fullname('./'.$real,$base);
 	}
 	if (!is_pagename($page))
@@ -125,11 +125,18 @@
 		$page = $base;
 	}
 	
-	while (is_page($page))
+	//while (is_page($page))
+	//{
+	//	$real = ++$num;
+	//	$page = "$base/$real";
+	//}
+	foreach (get_existpages() as $_page)
 	{
+		if( !ereg("^$base/",$_page) ) continue;
 		$real = ++$num;
-		$page = "$base/$real";
-	}
+		$page="$base/$real - ".$post['summary'];
+	} 
+    	
 	// ページデータを生成
 	$postdata = plugin_tracker_get_source($source);

config ファイル中で textarea なのに改行を指定できない。

class Tracker_field_textarea extends Tracker_field
{
	var $sort_type = SORT_STRING;
	
	function get_tag()
	{
		$s_name = htmlspecialchars($this->name);
		$s_cols = htmlspecialchars($this->values[0]);
		$s_rows = htmlspecialchars($this->values[1]);
		$s_value = htmlspecialchars($this->default_value);
+		$s_value = preg_replace('/&amp;br;/',"\n",$s_value);
		return "<textarea name=\"$s_name\" cols=\"$s_cols\" rows=\"$s_rows\">$s_value</textarea>";
	}

&br; で改行におきかわる。EUC だけね。

navi

$non_list(pukiwiki.ini.php)を除外する

// 除外するページ (正規表現で)
-define('NAVI_EXCLUDE_PATTERN','/\/_/');
+global $non_list;
-		if (NAVI_EXCLUDE_PATTERN != '')
-		{
-			$pages = array_diff($pages,preg_grep(NAVI_EXCLUDE_PATTERN,$pages));
-		}
+		if ( $non_list != '' )
+		{
+			$pages = array_diff($pages,preg_grep($non_list,$pages));
+		}

2回呼ぶと表示が異なるので同じにする。いや、下線が上線になるようにする。

Index: plugin/navi.inc.php
===================================================================
RCS file: /cvsroot/pukiwiki/plugin/navi.inc.php,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- plugin/navi.inc.php	19 Jun 2004 05:32:56 -0000	1.4
+++ plugin/navi.inc.php	20 Jun 2004 12:58:43 -0000	1.5
@@ -2,7 +2,7 @@
 /////////////////////////////////////////////////
 // PukiWiki - Yet another WikiWikiWeb clone.
 //
-// $Id: navi.inc.php,v 1.4 2004/06/19 05:32:56 Administrator Exp $
+// $Id: navi.inc.php,v 1.5 2004/06/20 12:58:43 Administrator Exp $
 //
 
 /*
@@ -56,8 +56,8 @@
 	
 	// 初回FALSE,2回目以降TRUE
 	$footer = array_key_exists($home,$navi);
-	if (!$footer)
-	{
+	//if (!$footer)
+	//{
 		$navi[$home] = array(
 			'up'=>'',
 			'prev'=>'',
@@ -122,17 +122,25 @@
 				}
 			}
 		}
-	}
+	//}
 
 	$ret = '';
 	if ($footer) // フッタ
 	{
-		$ret = <<<EOD
+/*		$ret = <<<EOD
 <hr class="full_hr" />
 <ul class="navi">
  <li class="navi_left">{$navi[$home]['prev1']}<br />{$navi[$home]['prev']}</li>
  <li class="navi_right">{$navi[$home]['next1']}<br />{$navi[$home]['next']}</li>
  <li class="navi_none">{$navi[$home]['home1']}<br />{$navi[$home]['up']}</li>
+</ul>
+EOD;*/
+		$ret = <<<EOD
+<hr class="full_hr" />
+<ul class="navi">
+ <li class="navi_left">{$navi[$home]['prev1']}</li>
+ <li class="navi_right">{$navi[$home]['next1']}</li>
+ <li class="navi_none">{$navi[$home]['home']}</li>
 </ul>
 EOD;
 	}

ls2

$non_list(pukiwiki.ini.php)を出力しない。

	foreach (get_existpages() as $_page)
	{
-		if (strpos($_page,$prefix) === 0)
+		if (strpos($_page,$prefix) === 0 
+		    and !preg_match("/$non_list/",$_page) )
		{
			$pages[] = $_page;
		}
	}

深さ指定、相対パス的表示、階層的 list 表示

#ls2_1(,1)
#ls2_1(,1-2)
#ls2_1(,-4)
#ls2_1(,2-)

のように深さ指定かのう。

#ls2_1(UNIX/,relative)

で(そのページで記述する場合は UNIX/ は省略可能 )

UNIX/コマンド
UNIX/コマンド/ls
UNIX/設定ファイル/test

となっていたのが、

コマンド
コマンド/ls
設定ファイル/test

になる。

#ls2_1(UNIX/コ,relative)

の場合もちゃんと

コマンド
コマンド/ls

になる。

#ls2_1(,hierarchy)

となる。

#ls2_1(,hierarchy,compact)

となる。

#ls2_1(,hierarchy,relative)

のようになってわかったようなわからないような表示なるので、

#ls2_1(,hierarchy,relative,compact)

のように compact 指定すべき。

filels2.inc.php.diff

include の見出しにも edit リンク、さらに topicpath

inlclue プラグインを使用したときの h1 見出しにも 編集アイコンをつける。 さらに改造した topicpath を使用する。

Index: plugin/include.inc.php
===================================================================
RCS file: /cvsroot/pukiwiki/pukiwiki/plugin/include.inc.php,v
retrieving revision 1.8
diff -u -r1.8 include.inc.php
--- plugin/include.inc.php	3 Jul 2003 06:12:17 -0000	1.8
+++ plugin/include.inc.php	24 Jun 2004 07:56:49 -0000
@@ -46,18 +46,20 @@
 	
 	$s_page = htmlspecialchars($page);
 	$r_page = rawurlencode($page);
-	$link = "<a href=\"$script?cmd=edit&amp;page=$r_page\">$s_page</a>";
-	if ($page == 'MenuBar')
-	{
-		$body = <<<EOD
-<span align="center"><h5 class="side_label">$link</h5></span>
-<small>$body</small>
-EOD;
-	}
-	else
-	{
-		$body = "<h1>$link</h1>\n$body\n";
-	}
+	//$link = "<a href=\"$script?cmd=edit&amp;page=$r_page\">$s_page</a>";
+	$link = "<a class=\"anchor_super\" 
href=\"$script?cmd=edit&amp;page=$r_page\"><img class=\"paraedit\" 
src=\"image/edit.png\" alt=\"Edit\" title=\"Edit\" /></a>";
+//	if ($page == 'MenuBar')
+//	{
+//		$body = <<<EOD
+//<h5 class="side_label">$s_page$link</h5>
+//$body
+//EOD;
+//	}
+//	else
+//	{
+		require_once(PLUGIN_DIR.'topicpath.inc.php');
+		$body = "<h1>".plugin_topicpath_convert($s_page,TRUE)."$link</h1>\n$body\n";
+//	}
 	
 	return $body;
 }

comment

form の前の <br /> はいらないと思う。

comment フォームをつけた際に、form の前に <br /> タグがあって気にくわなかったので、

plugin/comment.inc.php 内の form の前の <br /> を消去。

comment2(複数行フォーム)

デフォルトでは一行レスといったかんじなので、<input type="text" ... >を <textarea ...> に。またリスト表示するが、<hr> で区切るように完了。#comment2 で使えるようにする。

comment2.inc.php という名前にコピーし、function plugin_comment... を function plugin_comment2 に変更。

function plugin_comment2_convert() の

  <input type="hidden" name="plugin" value="comment" />

  <input type="hidden" name="plugin" value="comment2" />

に変更。

  <input type="text" name="msg" size="$comment_cols" />

  <textarea name="msg" cols="$comment_cols" rows="4"></textarea>

に変更。せっかくなので、表示周りを少しいじって、

  $nametags
  <input type="text" name="msg" size="$comment_cols" />
  <input type="submit" name="comment" value="$_btn_comment" />

  $nametags
  <input type="submit" name="comment" value="$_btn_comment" />
  <br />
  <textarea name="msg" cols="$comment_cols" rows="4"></textarea>

のようにした。

function plugin_comment2_action() の

			$postdata = rtrim($postdata)."\n-$comment\n";

			$postdata = rtrim($postdata)."\n----\n$comment\n";

に変更。そこの上の方の

	if (preg_match('/^(-{1,2})(.*)/',$post['msg'],$match))

	if (preg_match('/^(----\n)(.*)/',$post['msg'],$match))

に変更。さらに上の

$post['msg'] = preg_replace("/\n/",'',$post['msg']);

をコメントアウトしないと、改行がなくなってしまう。

コメントのフォーマット

define('COMMENT_FORMAT',"\x08MSG\x08 -- \x08NAME\x08 \x08NOW\x08");

define('COMMENT_FORMAT',"\x08MSG\x08\nRIGHT:\x08NAME\x08 \x08NOW\x08");

にしないと名前部分もWikiフォーマットに巻き込まれる可能性が。RIGHT: じゃなくてもよいが \n\n 相当は必要。filecomment2.diff

lookup

lookup プラグインの表示を変更。 plugin/lookup.inc.php

<form class="lookup_form" action="$script" method="post">
 $lwn:

に変更して、default.ja.css の方で .lookup_form を設定。 また、$lwn が邪魔 ( #lookup(Search,検索,) の場合 Search が出力される) なので消去。

http://pukiwiki.sourceforge.jp/index.php?%E8%B3%AA%E5%95%8F%E7%AE%B1%2F221

本体

html.php

新規ページ作成時に自動挿入されるリンクの抑制

http://pukiwiki.sourceforge.jp/index.php?%E8%B3%AA%E5%95%8F%E7%AE%B1%2F361

html.php 内の edit_form() の↓の部分をコメントアウト

if (array_key_exists('refer',$vars) and $vars['refer'] != '') {
        $refer = '[['.strip_bracket($vars['refer'])."]]\n\n";
}

編集のときの「読み込む」を消す

ページが多くなってくるとページのリストが多くなり、 遅く、重くなってしまうと思われるので消す。

html.php 中の form検索して、 $template という変数を消す。

編集モードの改造

html.php 中の form検索。もしくは pukiwiki.skin.ja.php の方で編集したければ $body の上か下あたりに

<?php if (arg_check('edit')) { ?>
<?php } ?>

みたいな。 $body は2箇所ある。

make_link.php

自動リンクと手動リンクの外観を変える

org:続・質問箱/127

make_link.phpのクラスLink_autolinkのtoStringメゾットを、

function toString()
{
    return '<span class="autolink">' .
    make_pagelink(
    $this->name,
    $this->alias,
    '',
    $this->page
    ) . '</span>';
}

.autolink a {} なスタイルシートを a:link などの下で定義すること(?)

init.php

英語化

define('LANG','en');

スキン

pukiwiki のスキンというか表示にかかわるところ関係。

英語スキン、日本語スキンの統一化

init.php で LANG を切り替え、別のスキンファイルを使用するわけだが、 1つのスキンファイルに統一して、メニュー文字列は切り替えられるようにする。

ja.lng, en.lng 中にて skin で使用する文字列を定義し、 LANG にかかわらず pukiwiki.skin.ja.php(もちろん別ファイルでもよい。その場合はスキン中の css ファイルの名前を変えることになるかもしれない)を使用するようにする。

default.ini.php

 /////////////////////////////////////////////////
 // スキンファイルの場所
-define('SKIN_FILE',SKIN_DIR.'pukiwiki.skin.'.LANG.'.php');
+define('SKIN_FILE',SKIN_DIR.'pukiwiki.skin.ja.php');

ja.lng (以下のメッセージは pukiwiki のデフォルトメニューメッセージとは多少異なる)

///////////////////////////////////////
// skin message
$_skin_top = "トップ";
$_skin_backup = "バックアップ";
$_skin_deleted = "削除一覧";
$_skin_whatsnew = "更新履歴";
$_skin_search = "検索";
$_skin_filelist = "ファイル名一覧";
$_skin_list = "一覧";
$_skin_help = "ヘルプ";
$_skin_newpage = "新規";
$_skin_edit = "編集";
$_skin_diff = "差分";
$_skin_upload = "添付";
$_skin_source = "ソース";
$_skin_template = "複製";
$_skin_rename = "改名";
$_skin_unfreeze = "凍結解除";
$_skin_freeze = "凍結";
$_skin_read = "参照";
$_skin_referer = "リンク元";
$_skin_move = "移動";
$_skin_rss = "最終更新のRSS";

en.lng

///////////////////////////////////////
// skin message
$_skin_top = "Top";
$_skin_backup = "Backup";
$_skin_deleted = "Deleted pages";
$_skin_whatsnew = "Recents";
$_skin_search = "Search";
$_skin_filelist = "List of page files";
$_skin_list = "List";
$_skin_help = "Help";
$_skin_newpage = "New";
$_skin_edit = "Edit";
$_skin_diff = "Diff";
$_skin_upload = "Upload";
$_skin_source = "Source";
$_skin_template = "Copy";
$_skin_rename = "Rename";
$_skin_unfreeze = "Unfreeze";
$_skin_freeze = "Freeze";
$_skin_read = "Read";
$_skin_referer = "Referer";
$_skin_move = "Move";
$_skin_rss = "RSS of Recent changes";

pukiwiki.skin.jp.php

<?php
global $_skin_top,$_skin_backup,$_skin_deleted,$_skin_whatsnew,$_skin_search,
$_skin_filelist,$_skin_list,$_skin_help,$_skin_newpage,$_skin_edit,$_skin_diff,
$_skin_upload,$_skin_source,$_skin_template,$_skin_rename,$_skin_unfreeze,
$_skin_freeze,$_skin_read,$_skin_referer,$_skin_move,$_skin_rss;
?>

あとはそれぞれスキン中の文字列を

<?php echo $_skin_top ?>
<?php echo $_skin_backup ?>
<?php echo $_skin_deleted ?>
<?php echo $_skin_whatsnew ?>
<?php echo $_skin_search ?>
<?php echo $_skin_filelist ?>
<?php echo $_skin_list ?>
<?php echo $_skin_help ?>
<?php echo $_skin_newpage ?>
<?php echo $_skin_edit ?>
<?php echo $_skin_diff ?>
<?php echo $_skin_upload ?>
<?php echo $_skin_source ?>
<?php echo $_skin_template ?>
<?php echo $_skin_rename ?>
<?php echo $_skin_unfreeze ?>
<?php echo $_skin_freeze ?>
<?php echo $_skin_read ?>
<?php echo $_skin_referer ?>
<?php echo $_skin_move ?>
<?php echo $_skin_rss ?>

に置き換える。

default.ini.php

dl,ul,ol のマージン

/////////////////////////////////////////////////
// リスト構造の左マージン
$_ul_left_margin = 0;   // リストと画面左端との間隔(px)
$_ul_margin = 16;       // リストの階層間の間隔(px)
$_ol_left_margin = 0;   // リストと画面左端との間隔(px)
$_ol_margin = 16;       // リストの階層間の間隔(px)
$_dl_left_margin = 0;   // リストと画面左端との間隔(px)
-$_dl_margin = 16;        // リストの階層間の間隔(px)
+$_dl_margin = 0;        // リストの階層間の間隔(px)
$_list_pad_str = ' class="list%d" style="padding-left:%dpx;margin-left:%dpx"';

スタイルシートでない理由は dev:BugTrack/30の続編 か?

ユーザ定義ルール

ユーザ定義ルール(コンバート時に置換)に

"__(?!')((?:(?!__).)*)__" => 
'<span style="color:white; background-color:black;">$1</span>',

を追加して、

__AHO__

で見た目反転表示になるようにした。どっかで必要だったので・・・

'&amp;bar;' => '|',

を追加して table 中でも

&bar;

で | が出るように。

pukiwiki.ini.php

変更した点

  • $defaultpage
  • $modifier
  • $modifierlink
  • $page_title
  • $nowikiname = 1;
  • $autolink = 2;
  • $read_auth = 1; //参照制限利用
  • $lastmode = 1;
  • $fixed_heading_anchor = 1; //para_edit.diff のため
  • $preformat_ltrim = 1;
  • $non_list
  • $search_non_list = 0;

ezweb (WAP2対応用) 対応

$agents = array(
	array('name'=>'jphone','pattern'=>'#^J-PHONE.+(Profile/)#'),
	array('name'=>'jphone','pattern'=>'#^J-PHONE#'),
	array('name'=>'i_mode','pattern'=>'#DoCoMo/(1\.0)/(?:[^/]+/c([0-9]+))?#'),
	array('name'=>'i_mode','pattern'=>'#DoCoMo/(2\.0) [^(]+\(c([0-9]+)#'),
	array('name'=>'i_mode','pattern'=>'#DDIPOCKET;JRC/[^/]+/(1\.0)/0100/c([0-9]+)#'),
	array('name'=>'i_mode','pattern'=>'#UP\.Browser#'),
);

一覧に含めないページ名

$non_list = '^\:|^MenuBar$|\/template$|\:$';

として template はでないように。 また、最後に : でも可能なように。このほうが draft 書きやすい(templateを使えるので。) おまけで MenuBar

template

hoge/fuga/moge のページを作成した場合, 同階層のテンプレート hoge/fuga/template があればそちらを、 なければ1つ上の階層の hoge/template を読み込むようにした。

/////////////////////////////////////////////////
// ページ名に従って自動で、雛形とするページの読み込み
$auto_template_func = 1;
$auto_template_rules = array(
'((.+)\/([^\/]+))' => '\2/template',
'((.+)\/([^\/]+\/[^\/]+))' => '\2/template'
);

1番目のルールが適用されたなら、template 中の置換文字列は以下のようになる。

$1 = hoge/fuga/moge
$2 = hoge/fuga
$3 = moge

2番目のルールが適用された場合、

$1 = hoge/fuga/moge
$2 = hoge
$3 = fuga/moge

print.ja.css

display:none

.anchor_super{
    display:none;
}
.print_display_none{
    display:none;
}

を追加。print_display_none は今後のため。.anchor_super は見出しの横に自動的に作られるアンカー用のスタイルシート。

div#footer{
    display:none;
}

を有効化

プリントの際のtable の枠組み

table{
    border-collapse:collapse;
}
.style_table,.style_th,.style_td,.style_calendar,.style_td_caltop, 
.style_td_today,.style_td_sat,.style_td_sun,.style_td_blank, .style_td_day,
.style_td_week,.vote_label,.vote_td1,.vote_td2
{
    border-width:1px;
    border-style:solid;
}

pukiwiki.png

まず pukiwiki.png を変更。ファイル名を変えたい場合は pukiwiki.skin.[ja|en].php を編集する。

ja.lng

日本語表示の場合の表示される文字の定義ファイル。「編集」とか。

「↑」を消す。

$_msg_content_back_to_top = '<div class="jumpmenu"><a href="#navigator">&uarr;</a></div>';

を消した。上へ戻るアンカー。ところどころに「↑」とあったやつ。めざわり。

pukiwiki.skin.ja.php

float レイアウト

float レイアウトといっても、

  1. 左 width を px 指定。かつ右 width を px 指定。
  2. 左 width のみ px 指定。右 width は指定しない。
  3. 左 width を % 指定。かつ右 width を % 指定(width を指定しないよりは指定したほうが楽)。 の3通りがあると思われる。
1.
<div style="width:145px;float:left">
menu
</div>
<div> style="width:630px">
body
</div>
<div style="clear:both;"></div>

テストしてはいないが、幅はスクロールバーもいれて 800 になるようにするのが普通。 最低解像度 800x600 でも表示できるように。 たまにスクロールバーを考慮せずに 800 にしているサイトがあって意味ないじゃん。と思う。

2.
<div style="width:145px;float:left;">
menu
</div>
<div style="margin-left:150px;">
body
</div>
<div style="clear:both;"></div>

margin-left がコツ。3ペインのときも同様に margin-right も指定することでできる。 margin-left をあえて小さくして、menu の下に回り込ませるようなレイアウトもあり。 テーブルレイアウトの代わり目的なので margin-left 指定。

3.
<div style="width:10%;float:left;">
menu
</div>
<div style="width:88%;>
body
</div>
<div style="clear:both;"></div>

自分的にはメニューの幅が % 指定は好きじゃない。 width:88% の代わりに 2. と同様に margin-left:10% もできるはず。

またブラウザ毎の表示の違いも意識する必要がある。 たとえば IE での width の扱いはボーダーまでを含んだ width となる。 Mozilla, Opera は W3C 通りボーダーまでは含まない。 この辺の関連で(?) width と padding を同時に指定するとブラウザによって表示が変わるので

<div style="width:145px;padding:0px;margin:10px;border:1px solid #aaa">
<div style="margin:10px;padding:0px;">
menu
</div>
</div>

のように内側にもう一つブロックを作成し、margin で padding の代わりをしてやる必要がある。 ちなみに margin は border の外側(余白)、padding は border の内側(詰め物)。

あと textarea 内の文字の大きさがデフォルト状態ではブラウザによって異なる。 mozilla は親ブロックの大きさだったが、IE, Opera はそれとは違うデフォルトの大きさというのがあるようだ。確認はしていない。

あとは Opera の場合 float の扱いが少し違う?

test
<div style="float:left;">
menu
</div>
body

としたばあい、body だけが menu の右側にまわりこむ(menu が body の左に回りこむ) はずなのだが、test も menu の右側に回りこんでいた。

test
<div></div>
<div style="float:left;">
menu
</div>
body

としたら回避できた。なんだこれは?

IE用スタイルシートに分ける。

IE の場合 ie5.ja.css に分ける。

<?php if (ereg("MSIE (3|4|5|6)", HTTP_USER_AGENT) == TRUE) { ?>
 <link rel="stylesheet" href="./skin/ie5.ja.css" type="text/css" media="screen" charset="Shift_JIS" />
<?php } else { ?>
 <link rel="stylesheet" href="./skin/default.ja.css" type="text/css" media="screen" charset="Shift_JIS" />
<?php } ?>

やっぱり編集するときめんどくさいのでやらない。

整形済みテキストで横スクロールが出ないように

IEの場合

line-break:strict;
word-break:break-all;
word-wrap:break-word;

Mozillaの場合

white-space:-moz-pre-wrap;

Operaの場合

white-space:-pre-wrap;

テーブルレイアウトのときはテーブルの右側は1画面におさまる。のような横スクロールがでていた。 float レイアウトに変えるしかない?

WWWC 更新時間の設定

まず、init.php で

define("RECENT_MOD",date("Y/m/d H:i:s", filemtime("./wiki/
526563656E744368616E676573.txt")));

RecentChanges の更新時間を取得している。
pukiwiki.skin.ja.php の <meta .... text/css> の下あたりに

<meta name="WWWC" content="<?php echo RECENT_MOD?>" />

を追加。

あとは WWWC 側で Meta タグを使ったチェックを行うようにする(アイテム右クリック→プロパティ→チェック)。

検索、移動フォーム

 <div class="form_menu">
  <form action="<?php echo $link_search?>" method="post" class="form_menu2">
   <div>
    <input type="hidden" name="encode_hint" value="ぷ" />
    <input type="radio" name="type" value="AND" checked="checked" class="button" />AND
    <input type="radio" name="type" value="OR" class="button" />OR
    <input type="text" name="word" size="12" value="" />
    <input type="submit" value="検索" class="submit" />
   </div>
  </form>
  <form action="<?php echo $script?>" method="post" class="form_menu1">
   <div id="menu">
    <input type="hidden" name="encode_hint" value="ぷ" />
    <input type="hidden" name="plugin" value="newpage" />
    <input type="hidden" name="refer" value="<?php echo urldecode($r_page)?>" />
    <input type="text" name="page" size="12" value="" />
    <input type="submit" value="移動" class="submit" />
   </div>
  </form>
 </div>

改行させずに横一列に並べたい場合は

style="display:inline;"

を利用する。

フッタ部 Link: related の編集

すごいことになっていたので、消去

<?php if ($related) { ?>
<div id="related">
 Link: <?php echo $related ?>
</div>
<?php } ?>

(default.ini.php の $related_link = 0; にすれば勝手に消えるようだ)

ヘッダ部 navigator の編集

<div id="navigator">
 [ <a href="<?php echo $link_top ?>">トップ</a>
<?php if ($do_backup) { ?>
 | <a href="<?php echo $link_backup ?>">バックアップ</a>
<?php } ?>
 | <a href="<?php echo "$script?cmd=deleted" ?>">削除一覧</a>
 | <a href="<?php echo $link_whatsnew ?>">更新履歴</a>
 | <a href="<?php echo $link_search ?>">検索</a>
<?php if (arg_check('list')) { ?>
 | <a href="<?php echo $link_filelist ?>">ファイル名一覧</a>
<?php } ?>
 | <a href="<?php echo $link_list ?>">一覧</a>
 | <a href="<?php echo $link_help ?>">ヘルプ</a>
 | <a href="<?php echo "$script?plugin=newpage&amp;refer=$r_page" ?>">新規</a>
 ]
<?php if ($is_page) { ?>
  
 [ <a href="<?php echo $link_edit ?>">編集</a>
 | <a href="<?php echo $link_diff ?>">差分</a>
<?php   if ((bool)ini_get('file_uploads')) { ?>
 | <a href="<?php echo $link_upload ?>">添付</a>
<?php   } ?>
 | <a href="<?php echo "$script?cmd=source&amp;page=$r_page" ?>">ソース</a>
 | <a href="<?php echo "$script?plugin=template&amp;refer=$r_page" ?>">複製</a>
 | <a href="<?php echo "$script?plugin=rename&amp;refer=$r_page" ?>">リネーム</a>
<?php   if ($is_read and $function_freeze) { ?>
<?php     if ($is_freeze) { ?>
 | <a href="<?php echo $link_unfreeze ?>">凍結解除</a>
<?php     } else { ?>
 | <a href="<?php echo $link_freeze ?>">凍結</a>
<?php     } ?>
<?php   } ?>
 ]
  
 [ <a href="<?php echo "$script?$r_page" ?>">参照</a> ]
<?php } ?>

に変更した。

lastmodified 移動

<?php if ($lastmodified) { ?>
<div id="lastmodified">
 Last-modified: <?php echo $lastmodified ?>
</div>
<?php } ?>

<?php echo $body ?>

があるところ(2箇所)あたりにもっていく。 ついでに、note, attach ももっていく。

編集画面でもMenuBar

http://pukiwiki.sourceforge.jp/dev/index?%BB%A8%C3%CC%2F1 のどっかのコメント参考

pukiwiki.skin.ja.php

<?php if (arg_check('read') and exist_plugin_convert('menu')) { ?>

これを

<?php if ((arg_check('read') or arg_check('edit')) and exist_plugin_convert('menu')) { ?>

に変更。常にでてくれるぐらいでいいので、

 <?php if (exist_plugin_convert('menu')) { ?>

ヘッダURL表示

上のヘッダ部分のURLがページ名が日本語だとどうせ URL エンコードされていて読めないくせに長くてうざいので

<?php if ($is_page) { ?>
 <a href="<?php echo "$script?$r_page" ?>"><span class="small"><?php echo "$script?$r_page" ?></span></a>
<?php } ?>

<?php if ($is_page) { ?>
 <a href="<?php echo "$script" ?>"><span class="small"><?php echo "$script" ?></span></a>
<?php } ?>

にしてページ名消去。むしろ削除。

ページ先頭にページ名を表示(h1タグ)、さらにpara_editマーク、さらにtopicpath

<div id="body">

のあるところに(2箇所)

<div id="body">
<?php if ($is_page){ ?><h1><?php echo $title ?></h1><?php } ?>

のように追加して、それぞれのページの先頭に h1 タグでページ名を表示するように変更。 これでわざわざ [*ページ名と同じ見出し] のような見出しを作らなくてすむかな。 さらに para_edit.diff にあわせて、

<?php if($is_page) { ?>
<h1><?php echo $title ?>
<?php if($is_read) { ?> 
<a class="anchor_super" href="<?php echo "$script?cmd=edit&amp;page=$r_page" ?>">
<img class="paraedit" src="image/edit.png" alt="Edit" title="Edit" /></a>
<?php } ?>
</h1>
<?php } ?>

として edit マークがでるようにした。 さらに topicpath もいれたので

<?php if($is_page) { ?>
<h1><?php require_once(PLUGIN_DIR.'topicpath.inc.php'); echo 
plugin_topicpath_convert(); ?>
<?php if($is_read) { ?>
<a class="anchor_super" href="<?php echo "$script?cmd=edit&amp;page=$r_page" ?>">
<img src="image/edit.png" alt="Edit" title="Edit" /></a>
<?php } ?>
</h1>
<?php } ?>

とすることにした。さらに RecentDeleted のときにでないように(RecentDeletedRecentChanges と違い、あくまでも通常ページだそうです)

<?php global $whatsdeleted; if($is_page and $_page != $whatsdeleted) { ?>
<h1><?php require_once(PLUGIN_DIR.'topicpath.inc.php'); echo 
plugin_topicpath_convert(); ?>
<?php if($is_read) { ?>
<a class="anchor_super" href="<?php echo "$script?cmd=edit&amp;page=$r_page" ?>">
<img class="paraedit" src="image/edit.png" alt="Edit" title="Edit" /></a>
<?php } ?>
</h1>

に変更。

default.ja.css

とりあえず pukiwiki開発サイトスキンをダウンした。css をコピー。http://pukiwiki.sourceforge.jp/dev/skin/ でもいいと思うけど。

あとは HTML ソースをみながら、いろいろ微調整。

table 関連がやっかいで、ie 標準表示と W3C 互換モードで表示が違うようだ。 そのために div.ie5 というのがあるようだ。左寄せする場合は、

 div.ie5{
-  text-align:center;
+  text-align:left;
 }
 .style_table{
-  margin:auto;
+  margin:auto auto auto 1em;
}

http://pukiwiki.sourceforge.jp/dev/?BugTrack%2F423

Menubar

MenuBar に移動フォームを表示。

InterWikiName

-[./?cmd=add&page= 新規]
-[./?cmd=add&page= New]

とあったのを

-[./?plugin=newpage&page= 新規]
-[./?plugin=newpage&page= New]
-[./?cmd=add&page= 追加]
-[./?cmd=add&page= Add]

に変更追加。

#lookup(新規,移動,)

で移動フォーム。plugin=newpage はすでにページがある場合は移動。ない場合は新規。 referer がつかないので、skin で HTML 書いたほうがよい。

MenuBar検索フォームを表示。

#lookup(Search,検索,)

を追加。Search は InterWikiName にある。 ついでに InterWikiName の Search の type を AND に変更
http://pukiwiki.sourceforge.jp/index.php?%E8%B3%AA%E5%95%8F%E7%AE%B1%2F221 参照

コメントアウトされていた

[[edit:http://設置場所/pukiwiki.php?cmd=edit&page=MenuBar]]

を編集して有効化。edit リンクがついて編集しやすくなる。ついでに RIGHT: で右寄せ

Menubar の最新の何件などを h5 タグから h2 に変更。

ja.lng 内の h5 を h2 に変更

$_recent_plugin_frame = '<h2>最新の%d件</h2>

default.ja.css に

td.menubar h1, td.menubar h2, td.menubar h3, td.menubar h4{
     font-size:100%;
}

を追加

InterWikiName

pukiwiki.dev の文字コードを utf8 から euc にしないと文字コードおかしい。

また、

[./cmd=source&page= Source]

を追加

バージョンアップ

改造しているので、最新版とマージしなければならない。org:CVS

cvs update

まず cvs で古いやつをもってくる。CVS/Entries 情報などが必要なので。

cvs -z3 -d:pserver:anonymous@cvs.sourceforge.jp:/cvsroot/pukiwiki
co -r r1_4_2 pukiwiki

これを改造していればよいが、zip のやつを使用していた場合はこのやつに上書きする。

cvs -z3 -d:pserver:anonymous@cvs.sourceforge.jp:/cvsroot/pukiwiki
update -r HEAD pukiwiki

HEADタグは最新リビジョン。-r HEAD はなくてもいいはず。 修正されたファイルは

.#hogehoge

のようなファイルにバックアップされる。衝突が起こったファイルには 二つのファイルAとBから の衝突の場合、

   <<<<<<< A
   lines from A
   =======
   lines from B
   >>>>>>> B

三つのファイルA,BそしてCからの衝突の場合、

   <<<<<<< A
   lines from A
   ||||||| B
   lines from B
   =======
   lines from C
   >>>>>>> C

のような印がつくので

grep -r '<<<<' pukiwiki/

のようにすればわかる。こうなったら手動で修正しなければならない。

cvs -z3 -d:pserver:anonymous@cvs.sourceforge.jp:/cvsroot/pukiwiki
update -r HEAD pukiwiki/auth.php

のように1つずつやることも可。やらないけど。

Wiki用ファイル名への変換(perl)

jcode::convert(\$filename,'euc');
$filename = unpack('H*0', $filename);
$filename =~ tr/a-z/A-Z/;
open(WIKI,">wiki/$filename.txt");
xrea