#author("2022-03-25T23:06:46+09:00","","")
**[[質問箱/5443]] [#y61092c6]
|RIGHT:70|LEFT:410|c
|~カテゴリ|動作環境|
|~サマリ|RecentChangesに差分とバックアップのリンクを載せたい|
|~バージョン|1.5.3|
|~投稿者|[[名無し]]|
|~状態|完了|
|~投稿日|&new{2021-12-27 (月) 08:14:04};|
***質問 [#j61ee886]
RecentChanges(最終更新)のページは使いやすいものの、更新されたページのみの表示なのでいまいち変更箇所が分かりにくいです。
Wikipediaの最近の更新ページのように差分とバックアップのリンクを載せるのはどうしたらよいでしょうか。

***回答 [#t4527a37]

- file.phpの565行目にあるput_lastmodified()内の// Create RecentChangesのところを以下のように変更する。(608行目)
 	// Create RecentChanges
 	$file = get_filename($whatsnew);
 	pkwk_touch_file($file);
 	$fp = fopen($file, 'r+') or
 		die_message('Cannot open ' . htmlsc($whatsnew));
 	set_file_buffer($fp, 0);
 	flock($fp, LOCK_EX);
 	ftruncate($fp, 0);
 	rewind($fp);
 	foreach (array_keys($recent_pages) as $page) {
 		$time      = $recent_pages[$page];
 		$s_lastmod = htmlsc(format_date($time));
 		$s_page    = htmlsc($page);
 -		fputs($fp, '-' . $s_lastmod . ' - [[' . $s_page . ']]' . "\n");
 +		fputs($fp, '-' . $s_lastmod . ' - [ [[差分>Diff:' . $s_page . ']] | [[バックアップ>Backup:' . $s_page . ']] ] [[' . $s_page . ']]' . "\n");
 	}
 	fputs($fp, '#norelated' . "\n"); // :)
 	flock($fp, LOCK_UN);
 	fclose($fp);
−の行を+の行に置き換える。(+は消す)

- 以下のInterWikiNameを追加する
 -[./?cmd=diff&page= Diff]
 -[./?cmd=backup&page= Backup]
- これでどうでしょうか。 -- [[はいふん]] &new{2021-12-27 (月) 11:27:52};
-- 変更してどれか一つページを更新してみるとRecentChangesが以下のように表示されるはずです。
-2021-12-27 (月) 11:29:13 - [ [[差分>Diff:test3]] | [[バックアップ>Backup:test3]] ] [[test3]]
-2021-12-27 (月) 11:29:10 - [ [[差分>Diff:test2]] | [[バックアップ>Backup:test2]] ] [[test2]]
-2021-12-27 (月) 11:29:06 - [ [[差分>Diff:test1]] | [[バックアップ>Backup:test1]] ] [[test1]]
- ありがとうございました。出来ました。 -- [[名無し]] &new{2021-12-27 (月) 23:20:07};

- InterWikiを使わない方法を考えてみました。 -- はいふん
 +	$script = get_script_uri();
 	foreach (array_keys($recent_pages) as $page) {
 		$time      = $recent_pages[$page];
 		$s_lastmod = htmlsc(format_date($time));
 		$s_page    = htmlsc($page);
 -		fputs($fp, '-' . $s_lastmod . ' - [[' . $s_page . ']]' . "\n");
 +		fputs($fp, '-' . $s_lastmod . ' - [ [[差分>' . $script . '?cmd=diff&page=' . $s_page . ']] | [[バックアップ>' . $script . '?cmd=backup&page=' . $s_page . ']] ] [[' . $s_page . ']]' . "\n");
 	}
- ありがとうございます。 -- [[名無し]] &new{2021-12-28 (火) 00:19:05};
- ちなみに、Update the page 'RecentChanges'のところも変更しないとうまく動作しないようです。 -- [[名無し]] &new{2021-12-28 (火) 00:19:28};

- これで直りましたでしょうか?Update the page 'RecentChanges'の方も書いておきました。 -- [[はいふん]] &new{2021-12-28 (火) 00:27:11};
- file.php 555行目(foreach~)
 +	$script = get_script_uri();
 	foreach ($recent_pages as $_page=>$time)
 		fputs($fp, '-' . htmlsc(format_date($time)) .
 -			' - ' . '[[' . htmlsc($_page) . ']]' . "\n");
 +			' - ' . '[ [[差分>' . $script . '?cmd=diff&page=' . htmlsc($_page) . ']] | [[バックアップ>' . $script . '?cmd=backup&page=' . htmlsc($_page) . ']] ] [[' . htmlsc($_page) . ']]' . "\n");
- ありがとうございます! -- [[名無し]] &new{2021-12-28 (火) 00:47:34};
- 横から失礼します。wikipediaの更新ページみたいに差分分の文字数を表示させたり出来ますか?文字数がプラスされたら緑で文字数表示、文字数がマイナスだったら赤で文字数表示みたいな感じです。 -- [[匿名]] &new{2021-12-31 (金) 15:29:03};

-lib/file.phpの608行目辺り
 	$script = get_script_uri();
 	foreach (array_keys($recent_pages) as $page) {
 		$time      = $recent_pages[$page];
 		$s_lastmod = htmlsc(format_date($time));
 		$s_page    = htmlsc($page);
 		
 		// 差分の文字数計算
 		$diff_len = 0;
 		$diff_len_str = '';
 		$diff_file = DIFF_DIR . encode($page) . '.txt';
 		if (file_exists($diff_file)) {
 			foreach (file($diff_file) as $line) {
 				$head = $line[0];
 				if ($head == "+") {
 					$diff_len += mb_strlen($line) - 1;
 				}
 				else if ($head == "-") {
 					$diff_len -= mb_strlen($line) - 1;
 				}
 			}
 		} else if (is_page($page)) {
 			$diff_len = mb_strlen(join('', get_source($page)));
 		} else {
 			$diff_len = 0;
 		}
 		if ($diff_len == 0) $diff_len_str = "&color(silver){(0)};";
 		if ($diff_len > 0) $diff_len_str = "&color(green){(+" . $diff_len . ")};";
 		if ($diff_len < 0) $diff_len_str = "&color(maroon){(" . $diff_len . ")};";
 		
 		fputs($fp, '-' . $s_lastmod . ' - [ [[差分>' . $script . '?cmd=diff&page=' . $s_page . ']] | [[バックアップ>' . $script . '?cmd=backup&page=' . $s_page . ']] ] [[' . $s_page . ']] -- ' . $diff_len_str . "\n");
 	}

-lib/file.phpの555行目辺り
 	$script = get_script_uri();
 	foreach ($recent_pages as $_page=>$time) {
 		// 差分の文字数計算
 		$diff_len = 0;
 		$diff_len_str = '';
 		$diff_file = DIFF_DIR . encode($_page) . '.txt';
 		if (file_exists($diff_file)) {
 			foreach (file($diff_file) as $line) {
 				$head = $line[0];
 				if ($head == "+") {
 					$diff_len += mb_strlen($line) - 1;
 				}
 				else if ($head == "-") {
 					$diff_len -= mb_strlen($line) - 1;
 				}
 			}
 		} else if (is_page($_page)) {
 			$diff_len = mb_strlen(join('', get_source($page)));
 		} else {
 			$diff_len = 0;
 		}
 		if ($diff_len == 0) $diff_len_str = "&color(silver){(0)};";
 		if ($diff_len > 0) $diff_len_str = "&color(green){(+" . $diff_len . ")};";
 		if ($diff_len < 0) $diff_len_str = "&color(maroon){(" . $diff_len . ")};";
 		
 		fputs($fp, '-' . htmlsc(format_date($time)) .
			' - ' . '[ [[差分>' . $script . '?cmd=diff&page=' . htmlsc($_page) . ']] | [[バックアップ>' . $script . '?cmd=backu p&page=' . htmlsc($_page) . ']] ] [[' . htmlsc($_page) . ']] -- ' . $diff_len_str . "\n");
 	}
- 結構雑ですが、おそらくこれでできると思います。ただこの場合、処理が多くなるかもしれないのでプラグイン化したほうがいいかもですね -- [[はいふん]] &new{2022-01-01 (土) 12:54:23};
- ありがとうございます -- [[匿名]] &new{2022-01-01 (土) 19:20:22};
- 1.5.4で採用してください -- [[あ]] &new{2022-01-04 (火) 01:00:16};
- recentプラグインで差分文字数を表示させることはできますか? -- [[名無し]] &new{2022-01-04 (火) 13:33:27};

- 少し雑で申し訳ないですが、これで差分文字数を表示できると思います。 -- [[はいふん]] &new{2022-01-05 (水) 01:34:01};
-plugin/recent.inc.phpの74行目辺り
 		// 差分文字数計算(ここから)
 		$diff_len = 0;
 		$diff_len_str = '';
 		$diff_file = DIFF_DIR . encode($page) . '.txt';
 		if (file_exists($diff_file)) {
 			foreach (file($diff_file) as $line) {
 				$head = $line[0];
 				if ($head == "+") {
 					$diff_len += mb_strlen($line) - 1;
 				}
 				else if ($head == "-") {
 					$diff_len -= mb_strlen($line) - 1;
 				}
 			}
 		} else if (is_page($page)) {
 			$diff_len = mb_strlen(join('', get_source($page)));
 		} else {
 			$diff_len = 0;
 		}
 		if ($diff_len == 0) $diff_len_str = '<span style="color:silver;">(0)</span>';
 		if ($diff_len > 0) $diff_len_str = '<span style="color:green;">(+' . $diff_len . ')</span>';
 		if ($diff_len < 0) $diff_len_str = '<span style="color:maroon;">(' . $diff_len . ')</span>';
 		// (ここまで)
 
 		if ($page === $vars['page']) {
 			// No need to link to the page you just read, or notify where you just read
			// ここの1行も下の1行と置き換える
 			$items .= ' <li>' . $s_page . ' ' . $diff_len_str . '</li>' . "\n";
 		} else {
 			$attrs = get_page_link_a_attrs($page);
 			// ここの3行も下の3行と置き換える
 			$items .= ' <li><a href="' . get_page_uri($page) . '" class="' .
 				$attrs['class'] . '" data-mtime="' . $attrs['data_mtime'] .
 				'">' . $s_page . '</a>' . ' ' . $diff_len_str . '</li>' . "\n";
 		}
- はいふん様、ありがとうございました。うまく動きました。 -- [[名無し]] &new{2022-01-05 (水) 08:23:45};
- 改造したRecentChangesをプラグイン化しました。 [[自作プラグイン/recentupdates.inc.php]] -- [[はいふん]] &new{2022-01-06 (木) 00:38:42};
- これ、とてもよいですね。追加削除行数を出すかどうかはちょっと考えてしまいますが、差分と履歴の表示はそれほど副作用もなくて、使い勝手が上がるのでよさそうです -- [[umorigu]] &new{2022-01-09 (日) 15:20:34};
-- [[dev:BugTrack/2551]] として登録しました -- [[umorigu]] &new{2022-01-10 (月) 19:20:46};
- 1.5.4 で RecentChanges に 差分 と 履歴 を表示するようになります。 [[dev:BugTrack/2551]] このサイト PukiWiki-official でも有効になりました -- [[umorigu]] &new{2022-03-25 (金) 23:05:21};

#comment

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Site admin: PukiWiki Development Team

PukiWiki 1.5.4+ © 2001-2022 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u12. HTML convert time: 0.053 sec.

OSDN