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

WalWiki/カスタマイズ/検索結果RSS

差分表示


編集前の状態に戻します。
検索結果のRSSを出力します。
* [search rss]

** %command_do への追加

 my %command_do = (
     read => \&do_read,
     edit => \&do_edit,
     adminedit => \&do_adminedit,
     adminchangepasswordform => \&do_adminchangepasswordform,
     adminchangepassword => \&do_adminchangepassword,
     write => \&do_write,
     index => \&do_index,
     searchform => \&do_searchform,
     search => \&do_search,
     create => \&do_create,
     createresult => \&do_createresult,
     FrontPage => \&do_FrontPage,
     comment => \&do_comment,
     rss => \&do_rss,
     diff => \&do_diff,
     interwikibox => \&do_interwiki_box, # Walrus add [InterWikiBox]
     searchrss => \&do_searchrss,                            # yakty add [search rss]
 );

** do_searchrss() 追加

 # yakty add [search rss] start
 sub do_searchrss {
     my $rss = new Yuki::RSS(
         version => '1.0',
         encoding => $charset,
     );
     $rss->channel(
         title => $modifier_rss_title,
         link  => $modifier_rss_link,
         description => $modifier_rss_description,
     );
 
     my $word = &escape($form{mymsg});
     my $counter = 0;
 
     my $case_sense    = ($form{mycasesense} eq '1')    ? 1 : 0;
     my $combination   = ($form{mysearchcombo} eq 'or') ? 'or' : 'and';
     my $search_target = (grep {$_ eq $form{mysearchtarget}} qw(title page part)) ? $form{mysearchtarget} : 'part';
     $_ = $form{mymsg};
     s/(?:\x0D\x0A|[\x0D\x0A])?$/ /;
     my @search_words = map {/^"(.*)"$/ ? scalar($_ = $1, s/""/"/g, $_) : $_} (/("[^"]*(?:""[^"]*)*"|[^ ]*) /g);
     @search_words = grep { length($_) != 0 } @search_words;
     if (@search_words) {
         my $opt = {'margin' => 30, 'case_sense' => $case_sense, 'combination' => $combination};
         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) {
             #last if ($counter >= 15);
             next if (&is_secret($page));                  # yakty add [secret page]
             next if ($page eq $RecentChanges);
             next if ($page eq $RecentDiffs);              # yakty add [recent diffs]
 
             my $escaped_title = &escape($page);
             my $link = $modifier_rss_link . '?' . &encode($page);
             my $description = '';
 
             if ($search_target eq 'title') {
                 my $result = &match_text($page, $opt, @search_words);
                 $description = &escape(&get_subjectline($page)) if($result);
             } elsif ($search_target eq 'page') {
                 my ($result, $text) = &match_text($page."\n".$database{$page}, $opt, @search_words);
                 $description = &escape($text) if($result);
             }
             next unless ($description);
             $rss->add_item(
                 title   => $escaped_title,
                 link    => $link,
                 description => $description
                 );
             $counter++;
         }
     }
     print <<"EOD"
 Content-type: text/xml
 
 @{[$rss->as_string]}
 EOD
 }
 # yakty add [search rss] end


02575