[ 新規 | 編集 | 差分 ] [ 検索 | 一覧 | FrontPage ] [ 履歴 (RSS) | 差分履歴 (RSS) ] [ ログイン ]
【PR】Amazon | SL-C3000 | SL-C1000(3/18発売!) | SL-C860 | SL-6000W | SL-6000L | SL-6000N

WalWiki/カスタマイズ/一覧ページツリー表示

編集

IndexPageをツリー表示させます。
外部参考リンク

do_index()内の変更

編集
sub do_index {
    &print_header($IndexPage);
    print qq(<ul>);
    my $level = 0;   # yakty add [tree index]
    my $prev;        # yakty add [tree index]
    my @pages = ($sort_case_sense) ? (sort keys(%database)) : sort {lc($a) cmp lc($b)} keys(%database);  # Walrus add [sort case sense]
    foreach my $page (@pages) {                                                                          # Walrus add [sort case sense]
#   foreach my $page (sort keys %database) {                                                             # Walrus del [sort case sense]
        if (&is_editable($page)) {
            # yakty add [tree index] start
            my @category = $page =~ /(.*?)\//g;
            my $cnt = $#category + 1;
            my $parent = $category[0];

            if($prev eq $category[0]){
                for(my $i=$level; $i>$cnt; $i--){
                    print qq(</ul>);
                }
            } else {
                for(my $i=$level; $i>0; $i--){
                    print qq(</ul>);
                }
                $level = 0;
            }

            for(my $i=$level; $i<$cnt; $i++){
                for(my $j=1; $j<=$i; $j++){
                    $parent .= "/" . $category[$j];
                }
                if(not exists $database{$parent}){
                    print qq(<li>@{[&make_link($parent)]}</li>);
                }
                print qq(<ul>);
            }

            $level = $cnt;
            $prev = $category[0];
            my $linkname = &escape($page);
            $linkname =~ s/^$parent\///;
            print qq(<li><a href="$url_cgi?@{[&encode($page)]}" title="@{[&escape($page)]}">$linkname</a>@{[&get_subjectline($page)]}</li>);
            # yakty add [tree index] end
            # print qq(<li><a href="$url_cgi?@{[&encode($page)]}">@{[&escape($page)]}</a>@{[&escape(&get_subjectline($page))]}</li>); # yakty dell [tree index]
            # print qq(<li>@{[&get_info($page, $info_IsFrozen)]}</li>);
            # print qq(<li>@{[0 + &is_frozen($page)]}</li>);
        }
    }
    # yakty add [tree index] start
    if($level > 0){
        for(my $i=$level; $i>0; $i--){
            print qq(</ul>);
        }
    }
    # yakty add [tree index] end
    print qq(</ul>);
    &print_footer($IndexPage);
# The following code is for debugging...
#    print "<h1>FOR DEBUG</h1>";
#    print "<pre>";
#    foreach my $page (sort keys %database) {
#        print qq(<a href="$url_cgi?@{[&encode($page)]}">$page</a>\n);
#    }
#    print "</pre>";
}

バグ修正(?)版

編集
sub do_index {
    &print_header($IndexPage);
    print qq(<ul>);
    my $level = 0;   # yakty add [tree index]
#    my $prev;        # yakty add [tree index]  #bugfix del
    my @prev;        # yakty add [tree index]  #bugfix add
    my @pages = ($sort_case_sense) ? (sort keys(%database)) : sort {lc($a) cmp lc($b)} keys(%database);  # Walrus add [sort case sense]
    foreach my $page (@pages) {                                                                          # Walrus add [sort case sense]
#   foreach my $page (sort keys %database) {                                                             # Walrus del [sort case sense]
        if (&is_editable($page)) {
            # yakty add [tree index] start
            my @category = $page =~ /(.*?)\//g;
            my $cnt = $#category + 1;
            my $parent = $category[0];
            my $common_level;  #bugfix add

            #bugfix add start
            for(my $i=0; $i <= (($level<$cnt) ? $level : $cnt); $i++){
                if(@prev[$i] ne @category[$i]){
                   $common_level=$i;
                   last;
                }
            }

            if(defined($common_level)){
                for (my $i=$level; $i>$common_level; $i--){
                    print qq(</ul>\n);
                }
            }
            #bugfix add end
            #bugfix del start
#            if($prev eq $category[0]){
#                for(my $i=$level; $i>$cnt; $i--){
#                    print qq(</ul>);
#                }
#            } else {
#                for(my $i=$level; $i>0; $i--){
#                    print qq(</ul>);
#                }
#                $level = 0;
#            }
            #bugfix del end

          if(defined($common_level)){  #bugfix add
#            for(my $i=$level; $i<$cnt; $i++){  #bugfix del
            for(my $i=$common_level; $i<$cnt; $i++){  #bugfix add
                for(my $j=1; $j<=$i; $j++){
                    $parent .= "/" . $category[$j];
                }
                if(not exists $database{$parent}){
#                    print qq(<li>@{[&make_link($temp)]}</li>\n);  #bugfix del
                    print qq(<li>@{[&make_link(&armor_name($temp . " " . $parent))]}</li>\n);  #bugfix del
                }
                print qq(<ul>);
            }
          }  #bugfix add
            $level = $cnt;
            $prev = $category[0];  #bugfix del
            @prev = @category;  #bugfix add
            my $linkname = &escape($page);
            $linkname =~ s/^$parent\///;
            print qq(<li><a href="$url_cgi?@{[&encode($page)]}" title="@{[&escape($page)]}">$linkname</a>@{[&get_subjectline($page)]}</li>);
            # yakty add [tree index] end
            # print qq(<li><a href="$url_cgi?@{[&encode($page)]}">@{[&escape($page)]}</a>@{[&escape(&get_subjectline($page))]}</li>); # yakty dell [tree index]
            # print qq(<li>@{[&get_info($page, $info_IsFrozen)]}</li>);
            # print qq(<li>@{[0 + &is_frozen($page)]}</li>);
        }
    }
    # yakty add [tree index] start
    if($level > 0){
        for(my $i=$level; $i>0; $i--){
            print qq(</ul>);
        }
    }
    # yakty add [tree index] end
    print qq(</ul>);
    &print_footer($IndexPage);
# The following code is for debugging...
#    print "<h1>FOR DEBUG</h1>";
#    print "<pre>";
#    foreach my $page (sort keys %database) {
#        print qq(<a href="$url_cgi?@{[&encode($page)]}">$page</a>\n);
#    }
#    print "</pre>";
}

修正内容

編集

というようなページ構成でも、正しく表示します。

また、未作成のカテゴリのリンク先が正しくなかったのを修正。


03270