バグ:あるモードで非公開記事が見えてしまう

category-icon

こんにちは、martinです。ご無沙汰してます。なかなかブログをいじる時間がありませんが、早急に対処すべきバグの報告があったので告知しておきます。

 次のような症状が見られます。

カテゴリーモードのボックス表示において非公開の記事が見えてしまう

というものです。これを修正するには、utils.phpの1108行目から始まるget_articles_by_category関数内に1行追加します。

function get_articles_by_category($cat, $start=0, $length=100000, $rsort=FALSE){ // 指定したカテゴリの記事を配列で返す
 global $LOGS;
 $LINES = array();
 $count = 0;
 for($j = 0, $l = count($LOGS); $j < $l; $j++){
  if(empty($LOGS[$j]) || !is_file($LOGS[$j])) continue;
  $fp = @fopen($LOGS[$j], "rb");
  if($fp){
   while(!feof($fp)){
    $line = fgets($fp);
    if(strpos($line, "|$cat|")){
     if(!empty($line) && $count++ >= $start){
      $LINES[] = rtrim($line).NL;
     }
     if(($count - $start) >= $length) break 2; // level 2!
    }
   } # while-loop
   fclose($fp);
  } # $fp
 } # for-loop
 if(ADMIN==FALSE) $LINES = preg_grep("{^¥d{10}¥|}", $LINES);
 if($rsort) return array_reverse($LINES);
 return $LINES;
}

として下さい。

if(ADMIN==FALSE) $LINES = preg_grep("{^¥d{10}¥|}", $LINES);

という1行を追加しています。

 今までよく顕在化しなかったなぁと思いますが、ご報告して下さった方に深謝します

 あ、utils.php添付しておきます。

添付ファイル: utils.phpattachedIcon 

— posted by martin at 11:36 am   commentComment [10]  pingTrackBack [2]

js/lib.jsのアップデート他

category-icon

 こんばんは、martinです。近頃、iTunes Music Storeで鬼束ちひろWの「月光」を購入しました(200円)。以前、深夜に放送されていたトリックG(再放送?)の主題歌に使われていて気になっていた曲です。何回聴いても飽きませんねぇ。

 さて、バージョン1.5.4に添付していたjs/lib.js(このファイルの1行目にあるタイムスタンプが $ 2006/10/25 17:13:47 なもの)で、リスト表示モード(Ajaxモード時)での記事表示が出来ないという報告がありました。調べてみると、動的にエレメントを生成する関数で不具合を見つけました。それ以前のlib.jsではちゃんと動いていたんですが、スピード重視のチューンナップを施した際に、必要な部分まで削ってしまったようです。具体的には、839行目あたりが、

if(parent) parent.appendChild(el);

な方は修正が必要です。次のようにします。

if(parent) parent.appendChild(el); else d.body.appendChild(el);

 ちなみに、(この修正を行った上で)「リスト表示」を選び、リスト表示されたタイトルをクリックすると、ブログの画面はそのままで、記事だけを閲覧できる独自のダイアログボックスが出現します。このボックスに記事を表示させる仕組みですが、前後の記事は、Ajaxを利用して記事の内容だけを読み込んでいるので、ページ全体を書き換える手間がなく、スムーズな記事のナビゲートが可能になっています。また、この使い方に抵抗がある場合は、utils.phpの6行目にある、

define('LIST_AJAX_MODE', 1);      // リスト表示でAjaxモードを有効にするなら 1 を指定

の「1」を、「0」もしくは「FALSE」に指定すると、Ajaxモードが無効になり、リスト表示された記事タイトルをクリックすると、記事が単独表示されます。この場合は、ページ全体を書き換えるので、ページデザインによっては(アフェリエイト用の外部スクリプトを複数設定しているとか)、読み込みに時間がかかることもあるかもしれません。そこは、好きな方を選ばれて下さい。

 js/lib.jsを添付しておきますが、ついでに、まだ試験的ですが、記事の個別表示の際に、コメントとトラックバックを統合して表示させるように改良したutils.phpも添付しておきます。試して見たい方はどうぞ。このサイトで使っています。既存のutils.phpを上書きすれば良いです。あと、コメントフォームの画面でもトラックバックのURLが表示されるようにしたmodules/comment.inc.phpも添付しておきます。

添付ファイル: comment.inc.phpattachedIcon  utils.phpattachedIcon  lib.jsattachedIcon 

— posted by martin at 10:42 pm   commentComment [0]  pingTrackBack [1]

Trackback.phpのアップデート

category-icon

こんばんは、martinです。トラックバックスパム対策にて、trackback.phpをアップデートしたのですが、正規表現で不備があったので、その修正版をアップしておきます。変更点は、昨日のコメントLink にもありますが、trackback.phpの56行目あたりを、

$jp_pattern = '{(
    (?:¥xA4[¥xA1-¥xF3])+| # Hiragana
    (?:¥xA5[¥xA1-¥xF6])+ # Katakana
)}x';

としています。最後にパイプ(|)が入っていたのですが、これだと、何でもすり抜けてしまいます。ほんとは、この正規表現の後に半角カタカナのやつも入れていたのですが、これは不要だろうと考えて削除して、その前のパイプが残ってしまいました。

 あと、アクソン付きのアルファベット(フランス語)なんかも、たまにすり抜けるようですね。。これは、69行目を

if(preg_match('{^[¥x20-¥x7E[:alnum:]]+$}', $target)){

とでもしたら良いですかねぇ。他言語のときはイマイチ知識不足。。最初の修正を入れていれば、その時点でアクソン記号のやつも弾きそうな気はしますが、いかがなもんでしょう。

添付ファイル: trackback.phpattachedIcon 

— posted by martin at 06:37 pm   commentComment [0]  pingTrackBack [0]

差分アップデート・・・

category-icon

 こんにちは。昨日、久しぶりにアップしたのですが、コメントが付かないなど基本的なところでミスってました。うーむ、情けない(-o-)

 トラックバックは、デフォルトでは、トラックバックしてきた相手にこちらのリンクがあるかどうかのチェックを入れてみたのですが、この仕様はサーバー依存なところもあるので、デフォルトではオフにしました。使えるところでは有効にしてよいと思います。

 現時点での差分を添付しておきます。

追記

[2006/10/26 20:4:46] コメントモジュールで、英数字のみの場合のフィルターが抜けていたので、修正しています。modules/comment.inc.php です。

 

添付ファイル: DIFF061026.zipattachedIcon 

— posted by martin at 11:30 am   commentComment [11]  pingTrackBack [0]

 

YouTubeやグーグルビデオ、Soapboxのための記法

category-icon

ひとつ前のエントリーで書きましたが、記法は簡単です。次のようになります。

[yt:(ビデオのID):横幅:縦幅]
YouTubeなら、yt、Googleビデオならgv、マイクロソフトsoapboxならsbです。縦と横のサイズ(整数)は省略できるので、簡単にしたいなら、ビデオのIDを記述するだけでOKです。具体例で見ていきましょう。
[yt:hEYHvLnVcnQ::]
と記述すると(任天堂ゼルダ曲のピアノ演奏、再生すると音が出ますよ)、 次は、GoogleVideoの場合。
[gv:-5379890076544103730::]
と記述すると(任天堂マリオ曲のピアノ演奏)、[gv:-5379890076544103730::]最後に、マイクロソフトのSoapbox。
[sb:022cb97f-95f8-403a-9c1b-5032c70de2e1::]
と記述すると(任天堂Wiiのゼルダデモ映像)[sb:022cb97f-95f8-403a-9c1b-5032c70de2e1::]

 こんな感じです。簡単ですね。この記法のために、スタイルシート用ですが video-linkというクラス名を出力するようにしました。このbasicのテーマの場合は、basic.cssにて次のように指定しています。

/*--------------[ 外部動画 ]-------------*/
.video-link {
  width: 425px; margin: auto; z-index:1;
}

 とりあえず、代表的な3つのビデオサイト向け記法を用意しましたが、utils.phpのソースを見れば分かるように、今後いくらでも追加できるようにしています。この手のは、たいていFlashを用いていますから。ちなみに、utils.phpの該当部分は以下のようになっています。配列なので、FLASH系なら、いくらでも追加できると思います。

 // 外部動画リンク表示処理 (YouTube, Google Video, SoapBox MSN, and so on...)
 if(preg_match_all('{¥[(yt|gv|sb):([0-9a-z¥-]+?):(¥d+?|):(¥d+?|)¥]}i', $com, $movlinks)){
  $length = count($movlinks[0]);
  $embeds = array( # src, type, others, width/height
   'yt' => array('http://www.youtube.com/v/', 'application/x-shockwave-flash', '', '425,350'),
   'gv' => array('http://video.google.com/googleplayer.swf?docId=', 'application/x-shockwave-flash', 'id="VideoPlayback"', '400,300'),
   'sb' => array('http://images.soapbox.msn.com/flash/soapbox1_1.swf?v=', 'application/x-shockwave-flash', 'wmode="transparent" name="msn_soapbox" flashvars="c=v&v=SB_MOV_ID"', '412,362'), //
  );
  for($i=0; $i<$length; $i++){
   $_mv = NL.'<div class="video-link">'.NL;
   $tar = $embeds[$movlinks[1][$i]];
   list($def_w, $def_h) = explode(',', $tar[3]);
   $w = $movlinks[3][$i]=='' ? $def_w : $movlinks[3][$i];
   $h = ($h=$movlinks[4][$i])=='' ? ($movlinks[3][$i]=='' ? $def_h : ceil($w * .75)) : $h;
   $_mv .= ' <object style="width:'.$w.'px; height:'.$h.'px;">
  <param name="movie" value="'.$tar[0].$movlinks[2][$i].'"></param>
  <embed src="'.$tar[0].$movlinks[2][$i].'" type="'.$tar[1].'" '.str_replace('SB_MOV_ID', $movlinks[2][$i], $tar[2]).' width="'.$w.'" height="'.$h.'"></embed>
 </object>';
   $_mv .= NL.'</div>'.NL;
   $com = str_replace($movlinks[0][$i], $_mv, $com);
  }
 }

— posted by martin at 12:54 am   commentComment [3]  pingTrackBack [1]

T: Y: ALL: Online:
Created in 0.0057 sec.
prev
2024.4
next
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30