nazolabo

フリーランスのWebエンジニアが近況や思ったことを発信しています。

Templateにタグを新たに追加する

HtmlParserを継承したクラスで、_execなんとか(なんとかは何でもいいらしい)ってメソッドを作ると、それが構文解析中に呼ばれる。

<?php

Rhaco::import("tag.HtmlParser");

class MobileHtmlParser extends HtmlParser {
	
	function MobileHtmlParser($filename=null) {
		parent::HtmlParser($filename);
	}
	
	function _exec3004_Url($src) {
		$tag = new SimpleTag();
		
		while($tag->set($src,$this->_getTagName("url"))){
			$href = $tag->getParameter("href", "");
			
			$session_name = htmlspecialchars( session_name() );
			$session_id   = htmlspecialchars( session_id() );
			
			if (preg_match("/\?/", $href)) {
				if (preg_match("/&$/", $href)) {
					$href = substr($href, 0, length($href) - 1);
				}
			    $href .= "&".$session_name."=".$session_id;
			} else {
			    $href .= "?".$session_name."=".$session_id;
			}
			
			$src = str_replace($tag->getPlain(),'<a href="'.$href.'">'.$tag->getValue().'</a>',$src);
		}
		return $src;
	}

/* 一部略 */

とかってのをhttp://highfreq.net/dev/itwitter.zipでやってる。これだとというタグが定義され、

<rt:url href="http://example.com/sample.php">リンクです</rt:url>

とテンプレートに記述すると

<a href="http://example.com/sample.php?PHPSESSID=ABCDEFG1234567">リンクです</a>

に変換されるようになる。
もう少し簡単に拡張できる仕組みがあるといいなー。