サンプルというかコード覚え書き

表組みをデフォルトで左寄せにする

pukiwiki.dev:PukiWiki/1.4/ちょっと便利に/テーブルの中央寄せor右寄せ#pcb34202External Site

  • ./skin/pukiwiki.css.php
       .style_table
       {
           padding:0px;
           border:0px;
           margin:auto;
    +      margin-left:0px;
           text-align:left;
           color:inherit;
           background-color:#ccd5dd;
       }
    
       div.ie5
       {
    -      text-align:center;
    +      text-align:left;
       }

ナビゲータに上方リンク追加

こんなことしなくても topicpath プラグインを使えば解決だった。

あとIMAGEが必要

  • en.lng.php
    • 121
      $_LANG['skin']['top']       = 'Front page';
  • ja.lng.php
    • 123
      $_LANG['skin']['top']       = 'Front page';
      $_LANG['skin']['upper']       = '上へ';
  • skin/pukiwiki.skin.php
    • 123
      [ <?php _navigator('top') ?> ] &nbsp;
      [ <?php _navigator('top') ?> |
      <?php _navigator('upper') ?>
      ] &nbsp;
    • 239
       <?php _toolbar('upper') ?>
  • lib/html.php
    • 64
      	$_LINK['upper'] = $_LINK['top'];
      	$exploded_page = explode('/',$_page);
      	if( count($exploded_page) > 1 ){
      		array_pop($exploded_page);
      		$_LINK['upper'] = "$script?" . join('/', $exploded_page);
      	}
    • 73
      	$link_upper     = & $_LINK['upper'];

ページ作成時に直前ページへのリンク挿入をしない

  • lib/html.php
    • 224
      	$s_postdata  = htmlspecialchars($refer . $postdata);
      	$s_postdata  = htmlspecialchars($postdata);

新規下位ページ作成を自動化

  • pukiwiki:自作プラグイン/newpage_subdir.inc.phpExternal Siteを利用する。
    基本的にここに書かれている通りにすれば問題ないが、多少改造する。
    • lib/html.php
      Line 50付近  $_LINK['new']の後
      +	$_LINK['newsub']   = "$script?plugin=newpage_subdir&amp;directory=$r_page/";
      Line 69付近 $link_newの後
      +	$link_newsub    = & $_LINK['newsub'];
    • pukiwiki.skin.php
      	<?php _navigator('new') ?> | の後
      +	<?php _navigator('newsub') ?> |
      // Set toolbar-specific images の最後
      + $_IMAGE['skin']['newsub']   = 'new_sub.png';
      
      <?php _toolbar('new') ?>の後
      + 	<?php _toolbar('newsub') ?>
    • ja.lng.php
      $_LANG['skin']['new']       = '新規'; の後
      +$_LANG['skin']['newsub']    = '新規下位';
      「下位ページ作成」だとナビゲータの本文が長いので省略。
    • en.lng.php
      $_LANG['skin']['new']       = 'New'; の後
      +$_LANG['skin']['newsub']    = 'NewSubDir';
      日本語環境では必要ないが、一応英語表記も追加。

メニューバーのリスト構造を小さくインデントする

  • skin/pukiwiki.css.php : 369
    div#menubar ul {
    	margin:0px 0px 0px .5em;
    	padding:0px 0px 0px .5em;
    }
    div#menubar ul {
    	margin:0px 0px 0px .0em;
    	padding:0px 0px 0px .0em;
    }
    div#menubar ul ul {
    	margin:0px 0px 0px .4em;
    	padding:0px 0px 0px .4em;
    }
    div#menubar ul ul ul {
    	margin:0px 0px 0px .8em;
    	padding:0px 0px 0px .8em;
    }

メニューバーのリスト構造の先頭の○を消す

  • skin/pukiwiki.css.php : 373
    div#menubar ul li { line-height:110%; }
    div#menubar ul li { line-height:110%;list-style-type: none; }

relatedアンカーを作る関数make_relatedを拡張

ページ名固定だったアンカー文字列を指定できるようにしただけ。

  • lib/html.php 内
    // Make a backlink. searching-link of the page name, by the page name, for the page name
    function make_related_search($page,$pagename)
    {
    	global $script;
    
    	if ($pagename == '')	$pagename == $page;
    	$s_page = htmlspecialchars($pagename);
    	$r_page = rawurlencode($page);
    
    	return '<a href="' . $script . '?plugin=related&amp;page=' . $r_page .
    		'">' . $s_page . '</a> ';
    }

comment_nospam,pcommnt_nospam で半角文字だけの投稿を蹴る

  • plugin/comment_nospam.inc.php : 73
  • plugin/pcomment_nospam.inc.php : 73
    	// URLが規定個数以上含まれていればエラー
    	if(NOSPAM_URL > 0 && preg_match_all("/http/", $vars['msg'], $matches) && count($matches[0])>=NOSPAM_URL){
    		return array('msg'=>URL_WARNING);
    	}
    ↓のように追加
    	// URIと半角文字だけの投稿を蹴る
    	if(preg_match("#://#",$vars['msg']) && !preg_match("#[^\x20-\x7e]#",$vars['msg'])){
    		return array('msg'=>URL_WARNING);
    	}
    
    	// URLが規定個数以上含まれていればエラー
    	if(NOSPAM_URL > 0 && preg_match_all("/http/", $vars['msg'], $matches) && count($matches[0])>=NOSPAM_URL){
    		return array('msg'=>URL_WARNING);
    	}

パスワードを設定・取得する(管理者、認証ほか)

  • PukiWikiのスクリプトパス?cmd=md5 でパスワード生成ページを呼び出す。
    Phrase: [        ] という感じのパスワード入力欄があるのでそこにパスワードを入力し [Compute] ボタンを押す。
    ラジオボタンで指定した方式で暗号化されたパスワードが出力される。
    この文字列例えば「{{SSHA}Y9WfalGWr/Fi6EBAja3AZDW3sPtJdnQ1eG9vLw==」のような文字列を
    pukiwiki.ini.php の管理者パスワード $adminpass や、ページ認証の $auth_users に記入する。
    パスワードは別にそのままの文字列でも認証はできるようだが、
    暗号化されていないと安全性がかなり落ちるためこれを行った方が望ましい。

すべてのページの編集で認証を行う

  • pukiwiki.ini.php
    • ユーザとパスワードを定義する。
      このユーザ名とパスワードで認証を行う。パスワードは上記参照。
      $auth_users = array(
      'foo'	=> 'foo_passwd', // ユーザ名 => パスワード
      );
    • 254行目あたりで $edit_auth を 1 にして編集で認証を有効にする。
      $edit_auth = 1;
      全てのページを正規表現 #^.*$# で示し、
      $auth_users で指定したユーザ名を指定する。
      $edit_auth_pages = array(
      	'#^.*$#' => 'foo', // 全ページ編集制限 => ユーザ名
      );
      ちなみに読み込み制限もこれと同様の方法でできる。
      変数名が $read_auth, $read_auth_pages に変わるだけ。

URLやメールアドレスへの自動リンクを無効化する

ブラケットのないURL文字列を無効化

  • lib/make_link.php : 357
    		return <<<EOD
    (\[\[             # (1) open bracket
     ((?:(?!\]\]).)+) # (2) alias
     (?:>|:)
    )?
    ↓に変更。最終行の )? の ? を取る。
    		return <<<EOD
    (\[\[             # (1) open bracket
     ((?:(?!\]\]).)+) # (2) alias
     (?:>|:)
    )

ブラケットのないメールアドレス文字列を無効化

  • lib/make_link.php : 443
    		return <<<EOD
    (?:
     \[\[
     ((?:(?!\]\]).)+)(?:>|:)  # (1) alias
    )?
    ↓に変更。最終行の )? の ? を取る。
    		return <<<EOD
    (?:
     \[\[
     ((?:(?!\]\]).)+)(?:>|:)  # (1) alias
    )

外部リンクへの対策

  • 基本は make_link.php でリンクへの変換処理が行われているので、
    ここで送られたURLを判定する。
    まず、pukiwiki:自作プラグイン/exlink.inc.phpExternal SiteBSWiki:SecurityExternal Siteあたりを参考にして外部URLを判定する処理。
    // サイト内URLかどうかを判定
    //
    // SERVER_NAME サーバ側で定義されているサーバ名
    // $_SERVER[HTTP_HOST] 閲覧者が要求したサーバ名
    // $script PukiWikiのメインスクリプト名
    function IsInternal($url){
    	global $_SERVER;
    	global $script;
    	$urls	= parse_url($url);
    	$myurls	= parse_url($script);
     
    	if( isset($urls[host]) && (
    	 $urls[host] != $_SERVER[HTTP_HOST] &&
    	 $urls[host] != SERVER_NAME &&
    	 $urls[host] != $myurls[host]
    	 ) ){
    		return FALSE;	//外部ホスト
    	}
    	if( preg_match('#/(^|/)\.\./#',$urls[path]) )
    		return FALSE;	//上位を目指すものも蹴る
    
    	if(substr($urls[path],0,2) == './'){
    		return TRUE;	//下位パス
    	}
    
    	$mypath = preg_replace('#/[^\/]+$#', '/', $myurls[path]);	// 末尾のファイル名を除去
    	if( substr($urls[path],0,strlen($mypath)) != $mypath ){
    		return FALSE;	// 上位パス
    	}
    	return TRUE;
    }

メニューのリスト構造を崩さないようにする 1.4.7

  • リスト構造のulタグは最小限のみでulを入れ子にしてはくれない。
    そのためリスト構造のインデントはulタグにスタイルシートで左端マージンを記述して行っている。
    通常は問題ないが、MenuBarをページに読み込む場合はulタグのパラメータは全て削られいる。
    このため MenuBar に
    ---3
    -1
    --2
    と書くと FrontePage の表示では
    3
    1
     2
    のようにリストの表示が崩れ、思うようなインデントをしてくれない。
    この回避手段として ulタグにクラス名を付けてスタイルシートでインデント幅を指定するか、
    深度に応じて #menubar ul ul ul{} と指定できるように ulタグを入れ子にする必要がある。
    • クラス名を残す
      手っ取り早いのはこれのようなので plugin/menu.inc.php の56行目、
      			return preg_replace('/<ul[^>]*>/', '<ul>', convert_html($menutext));  
      			return preg_replace('/<ul[^>]*?( class="\w+"|)[^>]*?>/', '<ul$1>', convert_html($menutext));  
      に書き換える。 これで FrontPage から読み込んだメニューにもクラス名 list1〜list3 が表示されるようになる。
      さらに skin/pukiwiki.css.php に
      div#menubar ul.list1 {
      	margin:0px 0px 0px .0em;
      	padding:0px 0px 0px .0em;
      }
      div#menubar ul.list2 {
      	margin:0px 0px 0px .4em;
      	padding:0px 0px 0px ,4em;
      }
      div#menubar ul.list3 {
      	margin:0px 0px 0px .8em;
      	padding:0px 0px 0px .8em;
      }
      のようにクラス名に応じてインデント幅を指定する。

リスト同士の縦の幅を空ける

  • skin/pukiwiki.css.php 追加。
    ul.list1 li { margin-bottom: 1ex; }
    ul.list2 li { margin-bottom: 1ex; }
    ul.list3 li { margin-bottom: 1ex; }
    ol.list1 li { margin-bottom: 1ex; }
    ol.list2 li { margin-bottom: 1ex; }
    ol.list3 li { margin-bottom: 1ex; }

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規新規下位 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-05-19 (木) 18:57:03 (2319d)