パラメータを確実に各ページで持ちまわるためのプログラムを作ってみた。
プログラムは「クラスで提供」ということで、使い方はこんな感じ。
最初に出力する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;
}
}
?>