Top > diary > 2006-08-22

minicalendar_viewer.inc.phpの改造は続く Edit

 さてminicalendar_viewer.inc.php*1の動作と見た目は、ほぼ自分の目的通りになったわけですが、ここまで辿り着くのにごまかし・省略・後先考えないを基本に押し進めてきました。(やっぱ動かないとねぇ)
 しかし、流石に今回改造に利用したwikinote.inc.phpに対して削除・追加は、それ本来の機能*2を失わせるものでした。
 一応、この改造も整理して公開していこうと考えているので、このままじゃまずい!*3という事で、wikinote.inc.phpの動作に影響を与えないように改良してみました。

  1. 当初wikinoteを利用するに当たって装飾タグ<ul><li>がごっつ邪魔だったので削除していました。これを消さないで取り込む方法は・・・
    • やっぱり正規表現かな?しかし私は正規表現が全くわかりません。 (^^; とりあえず色々とyahooで調べて適当に作ってみました。
    • minicalendar_viewer.inc.php
        0
        1
        2
        3
        4
        5
        6
        7
        8
        9
       10
       11
       12
       13
       14
       15
       16
       17
       18
       19
      
      		if (PLUGIN_MINICALENDAR_VIEWER_COMMENT === TRUE) {
       
      			if (exist_plugin_inline('wikinote')) {					//taru 06.08.18 if~
      +				$wikinotepage = 'Note/' . $page;
      +				$search_r = array ('@<ul[^>]*?>(.+?)</ul>@si',		// ul を削除
      +					'@<li[^>]*?>(.+?)</li>@si',						// li タグを削除
      +					'@<a href="[^>]*?>Article</a>@si',				// Article リンクを削除
      +					'@>Comment@si');								// Commentの置き換え
      +				$replace_r = array ('$1',
      +					'$1',
      +					'',
      +					'><img src="'.IMAGE_URI.'plus/comment.png" width="15" height="15" alt="Comment" title="Comment" />Comment' . "(" . log_count('update',$wikinotepage) . ")"
      +					);
       
      				$comm = call_user_func(array(new PluginWikinote(array('templink')), 'convert'));
      				$comm = preg_replace(array("'<p>'si","'</p>'si"), array("",""), $comm );
      -				$tail .= str_replace('>Comment','><img src="'.IMAGE_URI.'plus/comment.png" width="15" height="15" alt="Comment" title="Comment" />Comment' . "(" . log_count('update',$wikinotepage) . ")",$comm);
      +				$tail .= preg_replace($search_r, $replace_r, $comm);
      			}
      		}
      
    • と、まぁこんな感じにしたら何故かうまく動いている様子です。
    • ちなみにdo_plugin_convertを使わずにcall_user_func(array(new PluginWikinote(array('templink')), 'convert'));としているのは、wikinote内でグローバル変数が使われていたのでそこをコメントアウトするかこの方法を使うかしないとincludeした時に各ページのコメントリンクが同じなる現象が起きるからです。
  2. wikinoteのdefault_template_contentsに無理やりくっつけたNote生成元ページへのリンクはwikinoteの通常使用時に邪魔者でしかない。
    • ってことで上のコードで定義している
      call_user_func(array(new PluginWikinote(array('templink')), 'convert'))
    • は、当初
      call_user_func(array(new PluginWikinote(), 'convert'))
    • としていました。この'templink'オプションはwikinoteには元々存在していません。今回の改造で追加しました。
    • 'templink'オプションが有効になるようにwikinote.inc.phpを改造します。
        0
        1
        2
        3
        4
        5
        6
        7
      
          function PluginWikinote($args)
          {
              // Modify here for default values
              $this->options['prefix']    = 'Note/';
              $this->options['mainlabel'] = 'Article';
              $this->options['notelabel'] = 'Comment';
              $this->options['except']    = '^$';
              $this->options['noauto']    = FALSE;
      +       $this->options['templink']  = FALSE;	//taru 06.08.22
      
        0
        1
        2
        3
        4
        5
        6
        7
        8
        9
       10
      
              // do not touch, users
              global $vars;
              $this->parse_options($args);
              list($page, $notepage) = $this->parse_current($vars['page']);
              $is_none = $this->is_none($page);
              if ($is_none) {
                  $this->inline = '1';
                  $this->convert = '';
              } else {
      -            $this->autocreate_wikinote($notepage);
      +            $this->autocreate_wikinote($notepage,$page);	//taru 06.08.18
                  if ($this->error != '') { return "<p>#$this->plugin(): $this->error.</p>"; }
        0
        1
        2
        3
        4
        5
        6
        7
        8
        9
       10
       11
       12
      
      -    function autocreate_wikinote($notepage)
      +    function autocreate_wikinote($notepage,$page)
          {
              if ($this->options['noauto']) return;
              if ($this->is_page($notepage)) return;
       
              $contents = auto_template($notepage);
              if ($contents == '') {
      +		if ($this->options['templink']){	//taru 06.08.22
      +	            $contents = $this->default_template_contents . '[[' . $page . ']]'; //taru 06.08.18
      +		} else {
      	            $contents = $this->default_template_contents;
      +		}
              }
  3. Articleのリンクをどうするか。これって消したいけど直接wikinoteから消すと一番問題になるのですよね。これは一番上に書いたコードで解決できてる事ですが、正規表現のサンプル見ながらとりあえずうまくいった感じです。 (^^;
    '@<a href="[^>]*?>Article</a>@si' を '' で置き換える事で削除しています。

wikinote.inc.phpはちゃんと動くかな? Edit


Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup Referer   Help   RSS of recent changes