Pukiwikiの改造

設定

pukiwiki.ini.phpの設定

  • WikiNameを自動的にリンクをしない
    $nowikiname = 1;
  • オートリンクを無効にする
    $autolink = 0;
  • 編集に認証を必要とさせる
    $edit_auth = 1;
    $edit_auth_pages = array(
    	'/^.*$/' => 'yourname',
    );
  • アンカー
    $fixed_heading_anchor = 0;
  • 自動的に改行する
    $line_break = 1;

default.ini.phpの設定

  • トップに戻るアンカーを非表示
    //$top = $_msg_content_back_to_top;
    $top = '';
  • 関連するリンクを常に表示する(負担がかかります)
    $related_link = 0;
  • WikiName,BracketNameに経過時間を付加する
    $show_passage = 0;

プラグインで改造

昨日&今日の人気記事ランキング

popular2.inc.php

#popular2(20,TopPage|MenuBar|PukiWiki/.*|PukiWiki|RecentDeleted,recent,,notitle)

ダウンロード人気ランキング

すべてのページのアクセス数の一覧

画面上の「添付」でアップロードすると、その位置にファイルを参照

attachref.inc.php

&attachref;
&attachref(,nolink);

URLの改造

トップページをpukiwikiにする

他のファイルを一つのディレクトリにまとめ、index.phpのみをルートに置く。

<?php
define('DATA_HOME',     'x/');
define('PKWK_DIR',      '/virtual/your-account/public_html/x/');
define('LIB_DIR',       PKWK_DIR.'lib/');
require(LIB_DIR . 'pukiwiki.php');
?>

トップへのリンクをトップへ

トップページへのリンクに「?TopPage」とついてしまうので、それを消す

plugin/topicpath.inc.php

//$topic_path[] = make_pagelink($defaultpage, PLUGIN_TOPICPATH_TOP_LABEL);
$topic_path[] = '<a href="' . $script . '" title="TopPage">Top</a>';

表示の改造

フォントの指定

font-family: "Lucida Grande", "Osaka", "MS PGothic", sans-serif;

ヒラギノを指定するとベースラインがずれてしまう。

表を左寄せ

.style_table {
	padding:0px;
	border:0px;
	margin:auto;
	text-align:left;
	color:inherit;
	background-color:#ccd5dd;
 }

のmarginを削除

日付表示で曜日をカット

  1. [wiki]/lib/func.php
    function format_date($val, $paren = FALSE)
    {
    	global $date_format, $time_format, $weeklabels;
     
    	$val += ZONETIME;
     
    	$date = date($date_format, $val) .
    //		' (' . $weeklabels[date('w', $val)] . ') ' .
    		date($time_format, $val);
     
    	return $paren ? '(' . $date . ')' : $date;
    }

ナビゲーターにTopの文字を

タイトルの下のナビゲーターは、FrontPageの時に表示しないので、下記のように修正。

plugin/topicpath.inc.php 32行目付近

if ($page == '' || $page == $defaultpage) return '';

if ($page == '' || $page == $defaultpage) return 
'<span class="small"><a href="' . $script . '" title="TopPage">Top</a></span>';

ページにdescriptionを入れる

  1. [wiki]/pukiwiki.ini.php
    $page_title = 'Dimbula Tearoom';

    と、ページタイトルを指定している行の下に

    $description = '北海道のことやコンピュータ活用のWikiです。';

    descriptionの文字列を記述する。

  2. [wiki]/lib/html.php
    global $page_title;   // Title of this site

    という行の下に

    global $description;

    という行を挿入。

  3. [wiki]/skin/pukiwiki.skin.php
    <title><?php echo $title ?> - <?php echo $page_title ?></title>

    と、タイトルを表示している行の下に

    <meta name="description" content="<?php echo $description ?>" />

    descriptionを表示するタグを入れる

feed meterへの対応

  1. descriptionを表示させる
  2. 更新頻度を正しく表示させる
  3. RSS内のリンクの修正(RecentChangesではなくトップへ)
  4. RSS1.0を読ませるようにする
  1. [wiki]/pukiwiki.ini.php
    $page_title = 'Dimbula Tearoom';

    と、ページタイトルを指定している行の下に

    $description = '北海道のことやコンピュータ活用のWikiです。';

    descriptionの文字列を記述する。

  2. [wiki]/skin/pukiwiki.skin.php
    <link rel="alternate" type="application/rss+xml" title="RSS"
    href="<?php echo $link['rss'] ?>" /><?php // RSS auto-discovery ?>

    という行を探し、これを削除

    <link rel="alternate" type="application/rss+xml" title="RSS"
    href="<?php echo $link['rss'] ?>&ver=1" />
    <link rel="alternate" type="application/rsd+xml" title="RSD"
    href="<?php echo $link['rss'] ?>&ver=2" />

    を代わりに記述する。

  3. [wiki]/plugin/rss.inc.php
    1. global行の修正
      global $vars, $rss_max, $page_title, $whatsnew, $trackback;

      という行を探す。

      global $vars, $rss_max, $page_title, $whatsnew, $trackback, $description;

      と$descriptionを追加する。

    2. $descriptionをエンコード
      $page_title_utf8 = mb_convert_encoding($page_title, 'UTF-8', SOURCE_ENCODING);

      とページタイトルをエンコードしている行の下に

      $description_utf8 = mb_convert_encoding($description, 'UTF-8', SOURCE_ENCODING);

      descriptionをエンコードする行を追加。

    3. RecentChangesをトップページへ。RecentChangesへリンクしている場所がいくつかある。
      <link>$self?$r_whatsnew</link>

      <channel rdf:about="$self?$r_whatsnew">

      から「?$r_whatsnew」を削除する。

    4. descriptionを表示させる。descriptionを表示させる場所がいくつかある。
      <description>PukiWiki RecentChanges</description>

      となっている行を

      <description>$description_utf8</description>

      と修正する。

トラブル回避

添付ファイルのダウンロードや画像表示がうまくいかない

plugin/ref.inc.phpの

$url = $script . '?plugin=

とある部分(2カ所)を

$url = $script . 'x/?plugin=

などのように広告が表示されないフォルダを指定する。

カウンタープラグインのPHP5への対応

  1. [wiki]/plugin/counter.inc.php

UTIMEを検索し、「, UTIME」を削除する。

使い勝手をよくする改造

編集画面にリンクソースを表示

  1. lib/html.phpを開く
  2. 225行目あたり
    $body = <<<EOD
    <form action="$script" method="post">

    とある辺りの前の行に

    $ss_page = '<a href="' . $script . '?' . $r_page .
        '" title="' . $s_page . '">' . $s_page . '</a>';
    $forlink = <<<EOD
    <input type="text" name="query" size="80" value='$ss_page'>
    <br />
    EOD;

    を追加

  3. そのやや下の
    </form>

    がある行の下に

    $forlink

    を追加

パスワードなしで添付ファイルをアップロード

attach.inc.php

// 管理者だけが添付ファイルをアップロードできるようにする
define('PLUGIN_ATTACH_UPLOAD_ADMIN_ONLY', FALSE); // FALSE or TRUE
 
// 管理者だけが添付ファイルを削除できるようにする
define('PLUGIN_ATTACH_DELETE_ADMIN_ONLY', FALSE); // FALSE or TRUE

XreaのPukiwikiでNamazu検索

XreaのPukiwikiでNamazu検索を可能にする手順書。インデックス作成と検索が可能。2005-08-11

kakasiはうまく動作していれば、ふりがなをきちんとつけてくれる。 漢字に対して1文字しかつかない場合は、kakasiはうまく作動していない。 文字コードから置き換えしたに過ぎない。 ふりがながつかない場合は、kakasiが置き換えるはずのファイルにアクセスしていないことになる。

ファイルを準備

  1. kakasi.cgiを作成
    #!/bin/sh
    echo "Content-type: text/html
     
    <HTML>
    <BODY>
    "
    /usr/local/bin/kakasi -kK -HK -JK < /virtual/hkd/public_html/cgi/PageReading > /virtual/hkd/public_html/cgi/PageReading2
     
    echo "</BODY></HTML>"
    exit
  2. lib/file.phpを改造
    case 'kakasi':	/*FALLTHROUGH*/
    case 'kakashi':
     
      $tmpfname = '/virtual/xxx/public_html/cgi/PageReading';
      $fp = fopen($tmpfname, "w") or
        die_message("Cannot write temporary file '$tmpfname'.\n");
      foreach ($readings as $page => $reading) {
        if($reading == '') {
          fputs($fp, mb_convert_encoding("$page\n", $pagereading_kanji2kana_encoding, SOURCE_ENCODING));
        }
      }
      fclose($fp);
      chmod($tmpfname, 0666);
     
      virtual($pagereading_kakasi_path);
     
      $tmpfname = '/virtual/xxx/public_html/cgi/PageReading2';
      $fp = fopen($tmpfname, "r");
      foreach ($readings as $page => $reading) {
        if($reading == '') {
          $line = fgets($fp);
          $line = mb_convert_encoding($line, SOURCE_ENCODING, $pagereading_kanji2kana_encoding);
          $line = chop($line);
          $readings[$page] = $line;
        }
      }
      fclose($fp);
     
      break;
     
    case 'none':
  3. pukiwiki.ini.phpを編集
    $pagereading_enable = 1;
    $pagereading_kanji2kana_converter = 'kakasi';
    $pagereading_kakasi_path = '/cgi/kakasi.cgi';

サーバーにディレクトリを作成

/virtual/xxx/public_html/

/virtual/xxx/public_html/cgi/

というディレクトリを用意した

ファイルをサーバーに転送

  1. kakasi.cgiは/virtual/xxx/public_html/cgi/へ
  2. lib/file.phpとpukiwiki.ini.phpは所定の場所へ。

完成!!

ページ一覧を見る際に五十音順に並んでいるはず。

http://xxx.s151.xrea.com/?:config/PageReadingでふりがなが適切につけられているかをチェックしてみよう。

問題点

自動広告にしている場合、virtual関数で呼び出すときに、すでにページヘッダを送信しているようで、「すでにヘッダを送信しています」というエラーが出る。 リロードをすれば大丈夫で、動作には影響しない。

XreaのPukiwikiでNamazu検索

ファイルを準備

  1. pukiwiki.plを入手
  2. xreaのサーバーからnamazu.cgiを一度ダウンロードしておく。
    • /virtual/namazu/namazu.cgiです。
    • 【注意】namazu.cgiは常にバイナリーで扱ってください。
  3. make_index.cgiを作成
    #!/bin/sh
     
    echo "Content-type: text/html
     
    <HTML><BODY>
    Make index...<HR>
     
    <TEXTAREA COLS=80 ROWS=50>
    "
    /usr/local/bin/mknmz -f /virtual/xxx/public_html/wiki/namazu/mknmzrc -t text/pukiwiki -O /virtual/xxx/public_html/wiki/namazu/index/ --media-type='text/pukiwiki' --indexing-lang=ja /virtual/xxx/public_html/wiki/wiki/ > /virtual/xxx/public_html/wiki/namazu/make_index.log
    cat /virtual/xxx/public_html/wiki/namazu/make_index.log
    echo "</TEXTAREA><HR>Finished!! </BODY></HTML>"
    exit
  4. mknmzrcを作成
    package conf;  # Don't remove this line!
    $ADDRESS = '';
    $HTML_SUFFIX = "html?|[ps]html|php[34s]?";
    $ALLOW_FILE = ".*\\.txt";  # plain text
    $DENY_FILE = ".*\\.(gif|png|jpg|jpeg)|.*\\.tar\\.gz|core|.*\\.bak|.*~|\\..*|\x23.*|3A.*";
    $FILTERDIR = "/virtual/xxx/public_html/wiki/namazu/filter";
  5. .namazurcを作成
    Index /virtual/xxx/public_html/wiki/namazu/index
    Template /virtual/xxx/public_html/wiki/namazu/index
    Replace /virtual/xxx/public_html/wiki/wiki/ http://xxx.s151.xrea.com/wiki/\?
    Logging on
    Lang ja
    MaxHit 10000
    MaxMatch 1000

サーバーにディレクトリを作成

/virtual/xxx/public_html/wiki/

/virtual/xxx/public_html/wiki/namazu/

というディレクトリを用意

さらに

/virtual/xxx/public_html/wiki/namazu/filter/
/virtual/xxx/public_html/wiki/namazu/index/

も用意しておく

ファイルをサーバーに転送

/virtual/xxx/public_html/wiki/namazu/

make_index.cgi
mknmzrc
.namazurc
namazu.cgi

を入れる

/virtual/xxx/public_html/wiki/namazu/filter/

pukiwiki.pl

を入れる

インデックスを作成

http://xxx.s151.xrea.com/wiki/namazu/make_index.cgi

を実行

完成!!

http://xxx.s151.xrea.com/wiki/namazu/namazu.cgi

で検索可能に

インデックスを自動で更新

調べてわかったのですが、PHPをセーフモードで動かしているので、xreaはsystem関数が動作しない。

lib/files.phpの

system($update_exec . ' > /dev/null &');

という部分が機能していません。

pukiwiki.ini.phpの

$update_exec

を設定しても動きません。これに結構な時間を費やしてしまいました。

あと手段としては、ページの更新をしたあとにCGIとして呼び出し、その後に元のページを呼び出すという方法が考えられます。

  1. make_index.cgiを改造
    #!/bin/sh
    echo "Content-type: text/html
     
    <HTML>
    <head>
    <meta http-equiv='Content-Type' content='text/html; charset=EUC-JP'>
    <META HTTP-EQUIV='refresh' CONTENT='0; url=http://xxx.s151.xrea.com/wiki/?$1'>
    </head>
    <BODY>
    Make index...<HR>
     
    <TEXTAREA COLS=80 ROWS=30>
    "
    /usr/local/bin/mknmz -f /virtual/xxx/public_html/wiki/namazu/mknmzrc -t text/pukiwiki -O /virtual/xxx/public_html/wiki/namazu/index/ --media-type='text/pukiwiki' --indexing-lang=ja /virtual/xxx/public_html/wiki/wiki/ > /virtual/xxx/public_html/wiki/namazu/make_index.log
    cat /virtual/xxx/public_html/wiki/namazu/make_index.log
    echo "</TEXTAREA><HR>Finished!!<br>
    <a href='http://xxx.s151.xrea.com/wiki/?$1'>Back</a>
    </BODY></HTML>"
    exit
  2. plugin/edit.inc.phpを改造
    header('Location: ' . get_script_uri() . '?' . rawurlencode($page));

    header('Location: ' . '/wiki/namazu/make_index.cgi?' . rawurlencode($page));

    にする

【追記2006/07/04】URLエンコードの処理を追加

  • make_index.cgiを改造
    #!/bin/sh
     
    echo "Content-type: text/html
     
    <HTML><head>
    <meta http-equiv='Content-Type' content='text/html; charset=EUC-JP'>
    <META HTTP-EQUIV='refresh' CONTENT='0; url=http://xxx.s151.xrea.com/wiki/?"
    echo "$1" | nkf -eMQ | tr = % | tr -d '\n' | tr -s '%'
    echo "'></head><BODY>Make index...<HR><TEXTAREA COLS=80 ROWS=30>"
     
    /usr/local/bin/mknmz -f /virtual/xxx/public_html/wiki/namazu/mknmzrc -t text/pukiwiki -O /virtual/xxx/public_html/wiki/namazu/index/ --media-type='text/pukiwiki' --indexing-lang=ja /virtual/xxx/public_html/wiki/wiki/ > /virtual/xxx/public_html/wiki/namazu/make_index.log
    cat /virtual/xxx/public_html/wiki/namazu/make_index.log
    echo "</TEXTAREA><HR>Finished!!<br><a href='http://xxx.s151.xrea.com/wiki/?"
    echo "$1" | nkf -eMQ | tr = % | tr -d '\n' | tr -s '%'
    echo "'>Back</a>
    </BODY></HTML>"
  • 【さらに修正2006/8-18】長いタイトルに途中で%が入ってしまうので、「| tr -d '\n' | tr -s '%'」を追加