URLに自動でパラメータを付加する(その2)

2007/10/10 | マイPHPメモ

パラメータを確実に各ページで持ちまわるためのプログラムを作ってみた。
プログラムは「クラスで提供」ということで、使い方はこんな感じ。

最初に出力するHTMLを用意します。「そんなの別のライブラリに任せてるよ!」と言う場合はアウトプットバッファリング関数(ob_start、ob_get_contents)なんかでうまく取得してください。
というか、元々そういう仕様のプログラムにはめ込んだのでこうなってしまいました。プログラム自体は簡単なので適宜自分で書き換えてください。

include(‘relativepath.class.php’);
$pathObj=new relativepath(‘http://example.com/’);
$pathObj->convert($html);
$params=array();
$params[‘key’]=’value';
$pathObj->attache($params);
$newHTML=$pathObj->result();

なぜ出力予定だったHTMLを引数として与えるかと言うと、今回はoutput_add_rewrite_varを使っていて、ドメインつき絶対パスのリンクには自動処理されなくなるので、コンストラクタの引数でドメイン名を渡して、ドメインつき絶対パスをドメインなし絶対パスにおきかえる処理をしているためだ。

メソッドattacheをつかわなくてもいいので、別の用途にも転用できる。後日コメントをいれて、ソースのダウンロードをできるようにするけれど、とりあえず公開。

relativePath.class.php
—————————-
<?php
  class relativePath
  {
    var $topDomainUrl=false;
    var $html=false;
    
    function relativePath($topDomainUrl)
    {
      if(substr($topDomainUrl,-1)!=’/’){
        $topDomainUrl.=’/';
      }
      preg_match(“#(https?://(.*?))/#i”,$topDomainUrl,$match);
      $this->topDomainUrl=$match[1];
      return true;
    }
    
    function convert($html)
    {
      $converted=  ‘/';
      
      if($this->topDomainUrl){
        $targetText=$this->topDomainUrl.’/';
        $html=preg_replace(“#<([a|form]) (.*?)(“.$targetText.”)(.*?)>#i”,”<¥¥1 ¥¥2″.$converted.”¥¥4>”,$html);
        
        $targetText=$this->topDomainUrl;
        $html=preg_replace(“#<([a|form]) (.*?)(“.$targetText.”)(.*?)>#i”,”<¥¥1 ¥¥2″.$converted.”¥¥4>”,$html);
      }
      
      $this->html=$html;
      return true;
    }
    
    function attache($params=array())
    {
      foreach($params as $queryKey => $queryValue){
        output_add_rewrite_var($queryKey,$queryValue);
      }
      return true;
    }
    
    function result()
    {
      return $this->html;
    }
  }
?>

URLに自動でパラメータを付加する(その1)

2007/10/09 | マイPHPメモ

PHPで、各ページにおいて、パラメータを「確実に」持ちまわりたい。
そういう仕様を満たそうとちょっと試行錯誤中。

PHPには便利な関数「output_add_rewrite_var」というのがあって、これで値をセットすると、session.use_trans_sidのように、AタグとFORMタグで透過的にパラメータを付加してくれる。しかし・・・、これまたsession.use_trans_sidと同じように、絶対パスで書かれたリンクには自動付加がされない。

最近のブログツールやCMSでの出力処理では、大抵の場合絶対パスでリンクなどが出力されるので、こういうカスタマイズをしたいときは、普通の処理では難しい。んで、ちょっと調べてみたら、やっぱり同じようなことを考えている方がいらっしゃって、スクリプトが公開されていた。
http://schaf.ti-da.net/e1669157.html

こちらではoutput_add_rewrite_varは使わず、逐一手作業で組み込まれているような感じだ。だからoutput_add_rewrite_varが動作しない(旧バージョンの)PHPでも大丈夫だ。でも、自分の場合は、それほど古いものを使うつもりがないので、output_add_rewrite_varを使ってもっと簡単に記述できそうだ。

プログラムとしては、バッファリングをオンにし、出力までにバッファを変数に格納していったんバッファをクリア、出力データから絶対パスを取り除きたい箇所を正規表現でうまく取り出して、最後にoutput_add_rewrite_varして出力、というような流れ。頭の中ではだいたい構想は出来ていて、最低限のサンプルスクリプトをつくったらちゃんと動作している模様。あとはこれを作りこむだけ。

このプログラムは業務上必要なので、さっさと作ってしまわねばならない。これができると・・・携帯で自動的にセッションIDをもちまわるのに、非常に便利な関数になってくれると思うのだけど・・・さて、いかに。

ついでに・・・Smarty便利マニュアル

2007/09/18 | マイPHPメモ

ものはついで、といってはなんだが・・・。Smaryの便利マニュアルも作ってみた。
多分、なんとなく動いてると思う。
誰でも、いつでも、自由に使ってくださいな。
リクエストも受け付けますので、コメントからどうぞ。

その他のマニュアルは・・・リクエストがあればやってみますが・・・。

マニュアル続編 PEAR便利マニュアル

2007/09/17 | マイPHPメモ

ちょっと便利マニュアルのPEAR版も作ってみた。こちらから。

PEAR便利マニュアル

やってることはPHP便利マニュアルと同様で、msearchによる全文検索システムと、関連サイトの表記だ。PHPでも書いたが、PEARはクラスを使って記述されているので、初心者にとっては、なおさらマニュアル中の用例等がわかりにくかったりする。参考サイトがあれば、大抵そちらは難解な記述ではなく、用例を取りまとめてあることが多いので、きっと便利なはず。

よかったら活用してみてくださいな。
いろんなところで紹介してもらってもOKだし、「こんな機能欲しいかも」みたいなリクエストも受けるけるので、よろしければコメントからどうぞ。

phpの便利マニュアルを作成

2007/09/15 | マイPHPメモ

PHPに限らず、またプログラム言語に限らず、なんでもマニュアルと言うのは大切だ。MLとかで、ろくにマニュアルも見ず質問する人もいるようだが、そういう人はプログラマに向いてない(と思う)。といっても趣味でプログラムを楽しむ程度の人なら、それでもいいかもしれない。
プログラム言語のマニュアルは、その言語である程度の知識がある人にとっては有用だが、プログラム初心者には意外と敷居が高いかもしれないと思う。今でこそ、「まずマニュアルで確認を」と思うが、昔はウェブで調べて用例が載ってるサイトを参考にしてプログラムを書いていたことがある(今でも時々・・・)。
そういう時代を思い出して、個人的にちょっと「うれしいマニュアル」を作ってみた。そのマニュアルはここ。

PHPのちょっと便利なマニュアル

トップページは何の変哲もないマニュアルなのだが、どこでもいいから関数の解説ページを見ると・・・。

左上に、その関数に関連しそうなウェブページへのリンクを貼り付けるようにしてみた。世の中のウェブページでプログラム言語の関数を書いているようなページには、大抵の場合その関数の使用例が書かれているはずだ。だからマニュアルを見て使用方法がわからなくても、こちらのリンクから使用方法がわかる可能性もある、というわけ。初心者に優しいマニュアルにしてみたのだ(ハイ、自分用です)。

ちなみにこのリンクは、Yahooウェブ検索APIを利用している。APIに対して、キーワードとなる関数名を投げ、得られた結果から、いわゆる「マニュアル」と思われるものだけを削除して表示している、ということになる。

個人的に結構便利なので、PEAR版とかも作るかもしれない(PEAR、あまり使ってないけどね)。


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net