表紙 | 新規 | 一覧 | RSS | 検索 | 閲覧履歴 | 作成履歴 | 更新履歴

print_header関数 - YukiWikiベースのPonyWikiのソースを読んでみる その15

差分表示


[[YukiWikiベースのPonyWikiのソースを読んでみる]] その15

htmlのヘッダ部分・メニュー・ページのヘッダ部分(最初のページ名とか)を表示する関数

処理の流れはこんな感じ。
- ページが凍結かどうか、編集可能かどうかを調べ、変数に記録する
- ページが凍結かどうか、編集可能かどうか、編集画面かどうかを調べ、変数に記録する
- ページ名を変換して、ヤバめの記号を実態参照に置き換える
-- encode関数
-- [[escape関数]]
- 編集画面では、&verb(<meta name="robots" content="nofollow,noindex">)を付与
-- ロボット対策
- 通常画面では、&verb(<meta name="keywords" content="$escapedpage,$escapedsubject">)を付与
-- 一応検索エンジンにヒットしやすくなるようにおまじない
-- キーワードは、ページ名とサブジェクトです。
- &verb(<div class="tools">)の辺りから、最初に調べた凍結?編集可能?などの変数に基き、表示するメニューを変えている
- 最後にページ名(タイトル)とサブジェクトを表示する

&verb(<div class="document-body"><a name="top">)で本文のデザインを指定しています。その為、&verb(<div.)タグの数が合っていませんが、print_footer関数で&verb(</div>)入れているので、出力されるhtml全体としては整合性は取れています。

---(

sub print_header {
    my ($page) = @_;
    my $bodyclass = "normal";
    my $editable = 0;
    my $admineditable = 0;
    if (&is_frozen($page) and $form{mycmd} =~ /^(read|write)$/) {
	my $editmode = 0;

    if($form{mycmd} =~ /edit$/ or $form{mycmd} =~ /^diff$/) {
        $editmode = 1;
    } elsif (&is_frozen($page) and $form{mycmd} =~ /^(read|write)$/) {
        $editable = 0;
        $admineditable = 1;
        $bodyclass = "frozen";
    } elsif (&is_editable($page) and $form{mycmd} =~ /^(read|write)$/) {
        $admineditable = 1;
        $editable = 1;
    } else {
        $editable = 0;
    }
    my $cookedpage = &encode($page);
    my $escapedpage = &escape($page);
	my $cookedpage = &encode($page);
	my $escapedpage = &escape($page);
	my $escapedsubject = &escape(&get_subjectline($page));
	$escapedsubject =~ s/$subject_delimiter//;

    print <<"EOD";
Content-type: text/html; charset=$charset

<!DOCTYPE html
    PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html lang="$lang">
<head>
    <meta http-equiv="Content-Language" content="$lang">
    <meta http-equiv="Content-Type" content="text/html; charset=$charset">
    @{[ $editmode
        ? qq(<meta name="robots" content="nofollow,noindex">)
        : qq()
    ]}
    @{[ $editable
        ? qq(<meta name="keywords" content="$escapedpage,$escapedsubject">)
        : qq()
    ]}
    <title>[$modifier_rss_title] $escapedpage @{[&escape(&get_subjectline($page))]}</title>
    <link rel="index" href="$url_cgi?$IndexPage">
    <link rev="made" href="mailto:$modifier_mail">
    <link rel="stylesheet" type="text/css" href="$url_stylesheet">
    <link rel="alternate" type="application/rss+xml" title="RSS" href="$url_cgi?RssPage" />
</head>
<body class="$bodyclass">
<div class="tools">
    <a href="$url_cgi">$resource{frontpage}</a> <br> 
    <a href="$url_cgi?">$resource{frontpage}</a> <br> 
    <a href="$url_cgi?$CreatePage">$resource{createbutton}</a> <br> 
    @{[ $admineditable
        ? qq(<a title="$resource{admineditthispage}" href="$url_cgi?mycmd=adminedit&amp;mypage=$cookedpage">$resource{admineditbutton}</a> <br> )
        : qq()
    ]}
    @{[ $editable
        ? qq(<a title="$resource{editthispage}" href="$url_cgi?mycmd=edit&amp;mypage=$cookedpage">$resource{editbutton}</a> <br> )
        : qq()
    ]}
    @{[ $admineditable
        ? qq(<a href="$url_cgi?mycmd=diff&amp;mypage=$cookedpage">$resource{diffbutton}</a> <br> )
        : qq()
    ]}
    <a href="$url_cgi?$IndexPage">$resource{indexbutton}</a> <br> 
    <a href="$url_cgi?$RssPage">$resource{rssbutton}</a> <br> 
    <a href="$url_cgi?$SearchPage">$resource{searchbutton}</a> <br> 
    <a href="$url_cgi?$[[RecentCreates]]">$resource{recentcreatesbutton}</a> <br> 
    <a href="$url_cgi?$[[RecentChanges]]">$resource{recentchangesbutton} </a>
</div>
<div class="document-body"><a name="top">
<h1 class="header"><a
    title="$resource{searchthispage}"
    href="$url_cgi?mycmd=search&amp;mymsg=$cookedpage">@{[&escape($page)]}</a>@{[&escape(&get_subjectline($page))]}</h1>
    href="$url_cgi?mycmd=search&amp;mymsg=$cookedpage">@{[&escape($page)]}</a> @{[&escape(&get_subjectline($page))]}</h1>
EOD
}
---)

- is_frozen関数
- is_editable関数
- encode関数
- [[escape関数]]
- get_subjectline関数

----
[[#trackback]]

先頭へ