#author("2022-01-01T19:20:22+09:00","","") **[[質問箱/5443]] [#y61092c6] |RIGHT:70|LEFT:410|c |~カテゴリ|動作環境| |~サマリ|RecentChangesに差分とバックアップのリンクを載せたい| |~バージョン|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}; #comment