Page :: Diary/2013 - 01 - 28

Diary/2013-01-28

[FSWiki]ページ管理にソート機能追加

ページ名、更新日時によるソート機能を追加してみた。

最近、スパム増えたからねぇー。削除作業くらい楽したいから・・・

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
--- ./plugin/admin/AdminPageHandler_3.6.5_.pm2013-01-24 20:31:46.000000000 +0900
+++ ./plugin/admin/AdminPageHandler.pm2013-01-25 09:29:44.000000000 +0900
@@ -175,17 +175,27 @@
 my $wiki = shift;
 my $cgi  = $wiki->get_CGI();
 
 my @freeze_list = $wiki->get_freeze_list();
 my @pages       = $wiki->get_page_list();
 my $level_list  = $wiki->get_page_level();
-my $filter = $cgi->param("filter");
-my $filterType = $cgi->param("filterType");
+my $filter      = $cgi->param("filter");
+my $filterType  = $cgi->param("filterType");
+my $sortCol     = $cgi->param("sortCol");
+my $sortOrder   = $cgi->param("sortOrder");
 
 if($filterType ne "AND" && $filterType ne "OR" && $filterType ne "NOT"){
 $filterType = "AND";
+}
+
+if($sortCol ne "1" && $sortCol ne "2"){
+$sortCol = "2";
+}
+
+if($sortOrder ne "ASC" && $sortOrder ne "DESC"){
+$sortOrder = "DESC";
 }
 
 # フィルタを保存。パラメータで指定されていなければ読み込み。
 if(defined($filter)){
 &Util::save_config_text($wiki,$self->{filter_file},"$filterType:$filter");
 } else {
@@ -203,21 +213,36 @@
           "    フィルタ\n".
           "    <input type=\"text\" name=\"filter\" size=\"30\" value=\"".Util::escapeHTML($filter)."\">\n".
           "    <input type=\"radio\" name=\"filterType\" value=\"AND\"".($filterType eq "AND" ? " checked" : "").">AND\n".
           "    <input type=\"radio\" name=\"filterType\" value=\"OR\"".($filterType eq "OR" ? " checked" : "").">OR\n".
           "    <input type=\"radio\" name=\"filterType\" value=\"NOT\"".($filterType eq "NOT" ? " checked" : "").">NOT\n".
           "    <input type=\"submit\" value=\"再表示\">\n".
+          "    <br>\n".
+          "    並び替え:<input type=\"radio\" name=\"sortCol\" value=\"1\"".($sortCol eq "1" ? " checked" : "").">ページ名".
+          "    <input type=\"radio\" name=\"sortCol\" value=\"2\"".($sortCol eq "2" ? " checked" : "").">更新日\n".
+          "    &nbsp;<input type=\"radio\" name=\"sortOrder\" value=\"ASC\"".($sortOrder eq "ASC" ? " checked" : "").">昇順\n".
+          "    <input type=\"radio\" name=\"sortOrder\" value=\"DESC\"".($sortOrder eq "DESC" ? " checked" : "").">降順\n".
           "  </p>\n".
           "  <table>\n".
           "  <tr>\n".
           "    <th><br></th>\n".
           "    <th>状態</th>\n".
           "    <th>参照</th>\n".
           "    <th width=\"200\">ページ名</th>\n".
           "    <th>最終更新日時</th>\n".
           "  </tr>\n";
+
+@pages = sort {
+my $ret = 0;
+if ($sortCol eq "1") {
+$ret = $a cmp $b;
+} else {
+$ret = $wiki->get_last_modified($a) <=> $wiki->get_last_modified($b);
+}
+$ret * ($sortOrder eq "DESC" ? -1 : 1);
+} @pages;
 
 foreach my $page (@pages){
 if($filter ne ""){
 my @dim = split(/\s+/,$filter);
 my $flag = 0;
 foreach my $word (split(/\s+/,$filter)){
Comment(5)
  • いつもサポートして頂いてありがとうございます。ご質問があります。上記ソースが書かかれているページの作り方を教えて頂けないでしょうか。以前FsWikiのページで質問させて頂きましたが、htmlのiframを使用し、そのページの一部に別のページを幅高さを指定して出力したいと考えています。色々ご質問させて頂いて申し訳ございませんがご指導・ご鞭撻のほど宜しくお願い致します。 - Dai (2013/04/03-17:19:38)
  • まず、このページのソースコード部分の表示に関してですが、コード整形プラグインを使用して記述してあります。横サイズはCSSで固定、スクロールはCSSで overflow 属性の指定で行っています。ご質問で iframe を使用してHTMLを表示したいということですが、サポート掲示板の質問では"ページの差込"とあります。Daiさんがやりたいことを、まずは整理させてください。次の(1),(2)のうち、どちらになりますか? (1)任意のWikiページを縦横サイズ指定された領域にスクロール付きで表示したい。(2)iframeを使用して別途用意したHTMLファイルを縦横サイズ指定された領域にスクロール付きで表示したい。 - KG (2013/04/03-19:42:12)
  • >>返信ありがとうございます。(2)のiframを使用し別途用意したHTMLファイルや他のWikiページを縦横指定された領域にスクロール付きで表示したいと考えています。お手数ですがご教授の程お願い致します - Dai (2013/04/04-09:56:00)
  • 他のWikiページとありますが、それはページコンテンツのみ(メニュー、ヘッダー、フッタ無し)表示したいと言うことでしょうか?そうである場合はそのWikiサイトは FSWikiで構築されていますか?FSWikiのサイトであれば、テンプレート/スタイル変更プラグインを使用することで、ページコンテンツのみ表示させることが可能なのですが・・・ - KG (2013/04/04-21:08:23)
  • IFRAMEテンプレートのテスト を行っています。こんな感じでいかがですかね? - KG (2013/04/04-22:00:35)
お名前: コメント:

トラックバック:Trackback(0)
タグ:

最終更新時間:2013/01/28-16:43:29