管理 | 差分 || 新規作成 || カテゴリ一覧 | ページ一覧 | 更新履歴 | 差分履歴 || アンテナ || PUT || more≫ ≫omit
shortcut: FrontPage || WikiLab | StoreRoom/最新 | 日々の泡 | むず痒いパソコン日記/最新 || HelpPage ||[edit]
category: WikiLab/WorkReport

WikiLab/WorkReport/Category2 - カテゴリ管理計画2。階層化と新規作成のページ名入力。

LastModified : Tue Jun 17 16:28:48 2003
[管理]

カテゴリ管理計画2。階層化と新規作成のページ名入力。

目標。

[TOP↑] [管理]

<h1> のカテゴリ検索リンク。

[TOP↑] [管理]

現状のソース。

   my $categoryname = &encode(split /\//,$page);             # add
<h1 class="header">
    <!-- 略 -->
    <span class="head-add">
        category:<a href="$url_cgi?mycmd=search&amp;mymsg=$categoryname&amp;mysearchtarget=title&amp;mysearchcombo=and"
        title="$resource{searchthiscategory}">@{[&escape(split /\//,$page)]}</a>
    <!-- 略 -->
    </span></h1>

ええと、これをちょっと変えて使う、というわけにはいかない気がしてきた(というか、これも「何だか解らないけどできた」というものだからなぁ)。

ええと、カテゴリが何階層になっているかはページによって違うわけで、その辺はどうなるのでしょう。 何をどう考えたらいいのかから、解らない…。ええと、一旦分割して、リンク文字列作って、後で連結するの?(適当)

2003/06/09(Mon)

これ、どこかで見たような気がしてきたけど、気のせいかなぁ。でももしあったとしても perl ではないだろうなぁ。いや、perl でも、YukiWiki ベースじゃないと、私には全然わからないんだけども。2003/06/11(Wed) 11:30:19

その1.「ルートがない編」_

[TOP↑] [管理]
sub make_categorysearchlink
{
    my ($page) = @_;
    my @searchlink;
    my @category;
    foreach ($page =~ /(.+?)\//g){
        push @category, $_;
        push @searchlink,
            sprintf(qq(<a href="$url_cgi?mycmd=search&mysearchtarget=title&mysea
rchcombo=and&mymsg=%s">%s</a>),
            &encode(join('/', @category)), &escape($_));
    }
    return join '/', @searchlink;
}

↑こんな関数を作っておいて

<h1 class="header">
    <!-- 略 -->
    <span class="head-add">
        category:@{[&make_categorysearchlink($page)]}
    <!-- 略 -->
    </span></h1>

とかやれば出来るかなあ…?実際に組み込んで動かしてません(^_^;)私の脳内ではこれでOKなんだけど(笑) - yakty 2003/06/13(Fri) 19:27:53

…悲しいほどアッサリとできてしまいました…(;_;)。
…どうして脳内でできてしまうのでしょう…(;_;)。
…宿題をお父さんにやらせた子供の気分で、後ろめたさを抱きつつ中身の解読に務めます…(;_;)。
…ありがとうございました…(;_;)。

あ、カテゴリのトップのページだとカテゴリリンクが表示されないです。この宿題は自力で何とかがんばってみます。できそうな 予感 はあるんですが、根拠はないです…。

* * *

ん…ちょっと違うか。

あれ? 思ったよりややこしいかも。最後が要るか要らないかなんて、どうやって判定するのでしょう? 下にページがあるかどうかなんて、誰も知らない気がする…。

2003/06/13(Fri) 21:35:46

その2.「何も考えてない編」

[TOP↑] [管理]
foreach (split /\//, $page){

その3.「完全版編」

[TOP↑] [管理]
sub make_categorysearchlink
{
    my ($page) = @_;
    my @searchlink;
    my @category;
    my @pages = keys %database;
    foreach (split /\//, $page){
        push @category, $_;
        my $categorytree = join('/', @category);
        last if((grep /^$categorytree\/.+/, @pages) < 1);   # なんでこんな条件を間違えたんだろう(笑)さらに間違えてたし(;_;)
        push @searchlink,
            sprintf(qq(<a href="$url_cgi?mycmd=search&mysearchtarget=title&mysea
rchcombo=and&mymsg=%s">%s</a>),
            &encode($categorytree), &escape(@category[-1]));
    }
    return join '/', @searchlink;
}

その4.「完全版編(応用編)」

[TOP↑] [管理]
sub make_categorysearchlink
{
    my ($page) = @_;
    my @searchlink;
    my @category;
    my @pages = keys %database;
    foreach (split /\//, $page){
        push @category, $_;
        my $categorytree = join('/', @category);
        last if((grep /^$categorytree\/.+/, @pages) < 1);
        my %unique;
        push @searchlink,
            sprintf(qq(<a href="$url_cgi?mycmd=search&mysearchtarget=title&mysea
rchcombo=and&mymsg=%s">%s</a>),
            &encode(join(' ', grep(!$unique{$_}++, @category))), &escape(@category[-1]));
    }
    return join '/', @searchlink;
}

カテゴリ一覧の階層化。

[TOP↑] [管理]

脳内コーディング:その1.

[TOP↑] [管理]
sub do_category {
   &print_header($CategoryPage);
   print qq(<ul>);
   foreach my $page (sort keys %database) {
       my @category;
       foreach (split /\//, $page){
           push @category, $_;
           my $categorytree = join '/', @category;
           print qq(<ul>) if($#category > 0);
           printf qq(<li><a href="$url_cgi?mycmd=search&onlyname=1&mymsg=%s" title="$resource{searchthiscategory}"><span style="font-weight:bold">%s</span></a>),
               &encode($categorytree), &escape(@category[-1]);
           if($database{$categorytree}){
               printf qq( - <span style="font-size:0.9em">[<a href="$url_cgi?%s}" title="$resource{categorytop}">%s</a>%s]</span>),
                   &encode($page), &escape($page), &escape(&get_subjectline($page));
           }
           print qq(</li>\n);
       }
       shift @category;
       foreach (@category){
           print qq(</ul>);
       }
   }
   print qq(</ul>);
   &print_footer($CategoryPage);
}

脳内コーディング:その2.

[TOP↑] [管理]
sub do_category {
   &print_header($CategoryPage);
   print qq(<ul>);
   foreach my $page (sort keys %database) {
       my @category;
       foreach ($page =~ /(.+?)\//g){
           push @category, $_;
           my $categorytree = join '/', @category;
           print qq(<ul>) if($#category > 0);
           if($database{$categorytree}){
               printf qq(<li><a href="$url_cgi?mycmd=search&onlyname=1&mymsg=%s" title="$resource{searchthiscategory}"><span style="font-weight:bold">%s</span></a>),
                   &encode($categorytree), &escape(@category[-1]);
               printf qq( - <span style="font-size:0.9em">[<a href="$url_cgi?%s}" title="$resource{categorytop}">%s</a>%s]</span></li>\n),
                   &encode($page), &escape($page), &escape(&get_subjectline($page));
           }
       }
       shift @category;
       foreach (@category){
           print qq(</ul>);
       }
   }
   print qq(</ul>);
   &print_footer($CategoryPage);
}

脳内コーディング:その3.

[TOP↑] [管理]
sub do_category {
   &print_header($CategoryPage);
   print qq(<ul>);
   #my @lowerpage;
   my %lowerpage;    # こうです…(;_;)なんでこんな簡単なミスを…(^_^;)
   foreach my $page (sort keys %database){
       if((split /\//, $page) > 1){
           $lowerpage{@_[0]} = $page;
       }
   }
   foreach my $page (sort values %lowerpage) {
       my @category;
       foreach ($page =~ /(.+?)\//g){
           push @category, $_;
           my $categorytree = join '/', @category;
           print qq(<ul>) if($#category > 0);
           printf qq(<li><a href="$url_cgi?mycmd=search&onlyname=1&mymsg=%s" title="$resource{searchthiscategory}"><span style="font-weight:bold">%s</span></a>),
               &encode($categorytree), &escape(@category[-1]);
           if($database{$categorytree}){
               printf qq( - <span style="font-size:0.9em">[<a href="$url_cgi?%s}" title="$resource{categorytop}">%s</a>%s]</span>),
                   &encode($page), &escape($page), &escape(&get_subjectline($page));
           }
           print qq(</li>\n);
       }
       shift @category;
       foreach (@category){
           print qq(</ul>);
       }
   }
   print qq(</ul>);
   &print_footer($CategoryPage);
}
Software error:
Global symbol "%lowerpage" requires explicit package name at index.cgi line 439.
Global symbol "%lowerpage" requires explicit package name at index.cgi line 442.
Execution of index.cgi aborted due to compilation errors.

真面目にコーディング:その1.

[TOP↑] [管理]
sub do_category {
    &print_header($CategoryPage);
    print qq(<ul>);
    my %trees;
    my $level = 0;
    my $prev;
    my @pages = ($sort_case_sense) ? (sort keys(%database)) : sort {lc($a) cmp lc($b)} keys(%database);
    foreach my $page (@pages){
        my @category;
        foreach ($page =~ /(.+?)\//g){
            my $parent = join '/', @category;
            $parent = lc($parent) if($sort_case_sense);       # これを追加すればOK?
            push @category, $_;
            my $categorytree = join '/', @category;
            next if($trees{$categorytree});
            $trees{$categorytree} = 1;
            if($prev ne $parent){
                print qq(</ul>) x ($level - $#category);
                print qq(<ul>) x ($#category - $level);                 
                $prev = $parent;
                $level = $#category;
            }
            printf qq(<li><a href="$url_cgi?mycmd=search&mysearchtarget=title&mysearchcombo=and&mymsg=%s" title="$resource{searchthiscategory}"><span style="font-weight:bold">%s</span></a>),
                &encode($categorytree), &escape(@category[-1]);
            if($database{$categorytree}){
                printf qq( - <span style="font-size:0.9em">[<a href="$url_cgi?%s" title="$resource{categorytop}">%s</a>%s]</span>),
                    &encode($categorytree), &escape($categorytree), &escape(&get_subjectline($categorytree));
            }
            print qq(</li>\n);
        }
    }
    print qq(</ul>) x ($level + 1);
    &print_footer($CategoryPage);
}

応用編:その1._

[TOP↑] [管理]
            my %unique;
            printf qq(<li><a href="$url_cgi?mycmd=search&mysearchtarget=title&mysearchcombo=and&mymsg=%s" title="$resource{searchthiscategory}"><span style="font-weight:bold">%s</span></a>),
                &encode(join(' ', grep(!$unique{$_}++, @category))), &escape(@category[-1]);

新規作成。

[TOP↑] [管理]

どうやら済んでしまったらしい。LinuZau:WalWiki/カスタマイズ/カテゴリ内ページ作成 2003/08/08(Fri) 08:27:36

別の方法。

[TOP↑] [管理]

CategoryPage に「このカテゴリの下にページを作成」みたいなにできないのかな。 …と思ったけど、なんかインターフェース部分が巧く整理できない感じなので却下だ。

2003/08/05(Tue) 20:22:41

でかした。

[TOP↑] [管理]

長いページ名の解決(どっちかっていうと妄想)。_

[TOP↑] [管理]

親切な私は「用語ページ」なんかを作ってみてもいいと思うのですが、今のカテゴリ管理で WikiLab/Words/Hoge というページを作っても、Hoge と書いてリンクできないんじゃ、全くしょうがないですよね。と思うのです。

WikiLab/SuchWiki/SpecialPage

2003/07/07(Mon)

短縮。

[TOP↑] [管理]

エイリアスの登録(無謀)_

[TOP↑] [管理]
shortcut: FrontPage || WikiLab | StoreRoom/最新 | 日々の泡 | むず痒いパソコン日記/最新 || HelpPage || [edit]
select css: default | sakura | mono | greenheck | snow | NN4.x用(多分) || LinuZau!! | VikiWiki!? || others |

管理 | 差分 || 新規作成 || カテゴリ一覧 | ページ一覧 | 更新履歴 | 差分履歴 || PUT