目次

pyukiwiki0.1.9の導入

ダウンロード

pyukiwiki0.1.9の修正・改変

各種改修情報サイト

カスタマイズ

表内の文字位置を上端揃えに

  • デフォルトでは表の文字は無設定、即ち左右=左揃え、上下=中央揃えになっています
  • 「sub text_to_html {」 のサブルーチン内、表に関する「} elsif ($c == 44」のifブロック末尾(631行付近)
    • 旧:
 				if ($tmp =~ /[\,\|]h$/) {
					push(@result, join('', '<thead?,'</tr></thead>'));
 				} elsif ($tmp =~ /[\,\|]f$/) {
					push(@result, join('', '<tfoot?,'</tr></tfoot>'));
 				} elsif ($tmp !~ /[\,\|]c$/) {
					push(@result, join('', '<tr?, '</tr>'));
 				}
    • 新:
 				if ($tmp =~ /[\,\|]h$/) {
					push(@result, join('', '<thead?,'</tr></thead>'));
 				} elsif ($tmp =~ /[\,\|]f$/) {
					push(@result, join('', '<tfoot?,'</tr></tfoot>'));
 				} elsif ($tmp !~ /[\,\|]c$/) {
					push(@result, join('', '<tr valign="top"?, '</tr>')); # ←koala 「 valign="top"」追加
 				}

ページの印刷時に、メニューバーやタイトルバー、フッターを印刷しないようにする

  • まず、「skin」フォルダ内に、以下の内容からなる「print.css」ファイルを作成
 div.header {display: none;}
 div.navigator {display: none;}
 td.menubar {display: none;}
 div.footer {display: none;}
  • 次いで、同じフォルダ内の「template.cgi」ファイルの「<link rel="stylesheet"・・・」行(1行)を、以下の2行に差し替える
   <link rel="stylesheet" href="$skin::default_css" type="text/css" media="screen,print" charset="Shift_JIS" />
   <link rel="stylesheet" href="$skin::print_css" type="text/css" media="print" charset="Shift_JIS" />
  • 次いで、「pyukiwiki.ini.cgi」内の以下の行の冒頭に「#」が付いて無効化されていれば、下記のように#を削除して有効化する
 $::css_dir     = "$::skin_dir/css";
  • さらに、index.cgiの「sub skinex{」内に、以下の変数定義を挿入する。(「$skin::default_css = "$::skin_uri/default.css";」の次あたりに。240行あたり。)
 $skin::print_css  = "$::skin_uri/print.css";
  • テンプレートでは、各ページの本文とメニューバー(左端の欄)は、それぞれ1行2列テーブルの隣接セルとなっているので、上記のように印刷用のスタールシートでそのうちの右側のセルだけを印刷対象とすることで、本文のみの印刷が実現する。
 

ページヘッダー(一番上の欄)のページ名をクリックすると、そのページに飛ぶようにする

  • オリジナルでは、なぜかページ名クリックにより検索機能が起動するように設定されており、編集後にページへ戻るときなどに不便なので、修正。
  • 同時に、ページ名下のコード化されたページ名の行も削除
  • 「skin」フォルダ内の「template.cgi」ファイルで、下記<1>を<2>に差替え
 <1>
 <h1 class="title"><a
     title="$::resource{searchthispage}"
     href="$::script?cmd=search&amp;mymsg=$skin::cookedpage">@{[&::htmlspecialchars($skin::page)]}</a></h1>
 <a href="$::script?$cookedpage">$::script?$skin::cookedpage</a>
 
 <2>
 <h1 class="title"><a
     title="@{[&::htmlspecialchars($skin::page)]}"
     href="$::script?$skin::cookedpage">@{[&::htmlspecialchars($skin::page)]}</a></h1>

gifファイルに[[>]]でリンクしたときに、画像が表示されてしまうのを、非表示選択可能にする

 <pyukiwiki.ini>
 $::graph_disp = 0;    #koala H24.8.28; [[]]内での画像アドレスへのリンクで、画像を表示する:1、表示しない:0
  
 <img.inc>
 sub plugin_img_convert {
 ・・・
         if ($uri =~ /\.(gif|png|jpe?g)$/i) {
             if ($module == 1) {
                 #koala H24.8.28 FROM  下のIFブロックを追加
                 if ($::graph_disp == 0) {
                     return '';
                 } else {
                 # 必要であれば、この部分を拡張する。
                 $res .= "<a href=\"$uri\"><img src=\"$uri\" /></a>\n"; ←もともとはこれのみ
                 } # TO

各種バグの解決

  • 「pyukiwiki classic0.1.9」は安定動作版とのことなのに、なぜこんな基本的なバグが多数存在するのか不思議

IE以外のブラウザでうまく動作しない機能がある

  • 少なくとも、添付ファイルの閲覧やアップロードに関しては、IE系列以外のブラウザではうまく動かないようです
  • IE以外の系列でうまくゆかないのは、Pukiwikiなど他のwikiも同様のようです

全角文字添付ファイル名の件

  • ダウンロードされた「pyukiwiki classic0.1.9」では、以下のバグが。
    • 全角文字を含むページへのファイル添付をした場合に#refでの参照や添付ファイル一覧でのファイルリスト表示ができない
    • 添付ファイル名に全角文字を含む場合に、そもそも添付処理がうまくゆかない
  • そこで、「pluguin」フォルダの「attach.inc.pl」を以下のように修正し、(75行あたり)
 sub attach_form
 {
    my $page = $::form{mypage}; #split(/,/, shift);
 #  $r_page = rawurlencode($page);
 #  my $r_page = $page;
 #    全角ページ名でもうまくリストが表示されるように koala H24.4.20
         my $r_page = &::encode($page); #←ページ名をコード化
    my $s_page = &::htmlspecialchars($page);
    my $navi =<<"EOD"; #ahref内で、生のページ名「$page」をコード化ページ名「$r_page」に変更
   <span class="small">
    [<a href="$::script?cmd=attach&amp;mypage=$r_page&amp;pcmd=list&amp;refer=$r_page">$::resource{'attach_msg_listpage'}</a>]
    [<a href="$::script?cmd=attach&amp;mypage=$r_page&amp;pcmd=list">$::resource{'attach_msg_listall'}</a>]
   </span><br />
 EOD
  • さらに、「pluguin」フォルダの「ref.inc.pl」を以下のように修正して、解決。(188行あたり)
 #      $url = "$::script?cmd=attach&amp;pcmd=open"
 #          . "&amp;file=$name&amp;mypage=$page&amp;refer=$page";
 #      日本語ページ名・ファイル名がrefでうまく参照できない不具合の修正
                 $url = "$::script?cmd=attach&amp;pcmd=open"
                         . "&amp;file=" . &::encode($name) . "&amp;mypage=" . &::encode($page)
                         . "&amp;refer=" . &::encode($page) ;
 

編集画面で、編集ウインドウ上方の入力支援キー(「B I U・・・」)が使えない件

  • 「skin」フォルダ内の「template.cgi」で、「<head>」ブロック内に、外部javascriptを読み込むための以下の1行を挿入して解決(48行あたり)
 <script type="text/javascript" src="js/edit.js"></script>
 

「ls2」プラグインでリスト各ページの見出しにリンクで飛べない件

  • 「ls2」プラグインには、「#ls2(ページ名,title)」とするとページリストに各ページの見出しもリンク付きで表示される機能がありますが、ページ名に全角文字が含まれる場合、見出しに附されるリンクのurlに全角文字が混ざり、クリックしてもその見出しに飛べず、トップページに飛んでしまう不具合
  • 「plugin」フォルダの「ls2.inc.pl」で、見出し(title)へのリンク処理のくだりを、下記?から?に修正する
 <旧>
           foreach (@txt) {
                chomp;
                if (/^(\*{1,3})(.+)/) {
                    &back_push('ul', length($1), \@tocsaved, \@tocresult);
                    push(@tocresult, qq( <li><a href="$::script?$page#i$tocnum">@{[&escape($2)]}</a></li>\n));  
                    $tocnum++;
                }
            }

 <新>
           my $body = '';のあとあたりで
           my $r_page; という局所変数宣言をしておいた上で、foreach (@txt)のループ内を下記のように変更
 
           foreach (@txt) {
                chomp;
                if (/^(\*{1,3})(.+)/) {
                    &back_push('ul', length($1), \@tocsaved, \@tocresult);
                    $r_page=&encode($page); #←追加(タイトルのリンクのページ名をコード化)
 #                  push(@tocresult, qq( <li><a href="$::script?$page#i$tocnum">@{[&escape($2)]}</a></li>\n)); #同上。コード化していないページ名へのリンクをやめて、    
                    push(@tocresult, qq( <li><a href="$::script?$r_page#i$tocnum">@{[&escape($2)]}</a></li>\n)); #同上。 コード化したページ名へのリンクとする   
  
                    $tocnum++;
                }
            }
  
 

「#contents」で同一ページ内にページ名指定したものと無指定のものを順に記載すると無指定の方のリンク先アドレスに先の指定ページ名が引き継がれてしまう件

  • 下記のようにした場合、(2)ではページ内の各タイトルに(1)で指定した別ページ名のタイトルへのリンクが設定されてしまう。
 #contents(別ページ名) ←(1)
 #contents ←(2)
  • 解決:「plugin」内の「contents.inc.pl」で、別ページ名指定有無によるリンク先アドレス設定ルーチンの前にアドレスを初期化するステップを挿入した(下記(1)を(2)に修正)
 (1) 
    my @args = &func_get_args(shift);
    my $page;
    if (@args > 0) {
        $page = $args[0];
 
 (2)
    my @args = &func_get_args(shift);
    my $page;
    $::pushedpage =""; #←追加(H24.5) 
 #                           同一ページでページ名指定の#contentsのあとに無指定の#contentsが存在する場合に、
 #                           無指定の方で先に指定したページ名が引き継がれてしまうことを防止するために初期化用に挿入
    if (@args > 0) {
        $page = $args[0];
  • $::pushedpageが初期化できればいいのでどこへ入れてもよさそう

全角ページ名のページ内のアンカー([#○○])に「ページ名#アンカー名」のリンクで飛べない件

  • アンカーへのフルURLでなら飛べるが、文中に直接「ページ名#アンカー名」で飛びたい!
  • 直接記入で飛べる場合もあるが、URLに「ページ名#アンカー名」がそのまま入っているため、ページ名によってはうまくゆかない
解決
「index.cgi内の795行あたり、「make_link」サブルーチン内(サブルーチンの末尾部)で、ページ名によるリンクを処理するルーチンで、「ページ名#アンカー名」をそのままURL化している部分を、「ページ名」はコード化させるようにする。
        $chunk = get_fullname($chunk, $::form{mypage});
        $cookedchunk = &rawurlencode($chunk);
        my @echunk=split('#',$chunk);  #H24.8.3追加(koala) 
        my $encchunk=&::encode(@echunk[0]) . '#' . &::encode(@echunk[1]) ; #H24.8.3追加(koala)  
        if ($::database{$chunk}) {
            return qq(<a title="$chunk" href="$::script?$cookedchunk">$escapedchunk</a>);
        } elsif (($chunk =~ /^([^#]*)#/) && $::database{$1}) {
 #          return qq(<a title="$chunk" href="$::script?$chunk">$escapedchunk</a>);
            return qq(<a title="$chunk" href="$::script?$encchunk">$escapedchunk</a>); #H24.8.3追加(koala)
  
        } elsif (&is_editable($chunk)) {
            return qq($escapedchunk<a title="$::resource{editthispage}" class="editlink" href="$::script?cmd=edit&amp;mypage=$cookedchunk">$editchar</a>);
        }
        return $escapedchunk;
    }
 }
  
 sub get_fullname {

Last-modified: 2016-02-21