nazolabo

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

Templateにタグを新たに追加する(再)

わざわざ内部定義を追加しなくても、ちゃんとプラグイン的な機構が既にありました。

<?php
Rhaco::import("tag.HtmlParser");
Rhaco::import("tag.data.SimpleTag");

class MobileHtml {
	
	function filter($src, $parser) {
		$tag = new SimpleTag();
		
		/* 一部省略 */
		
		while($tag->set($src,$parser->_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;
	}
}

として、これをlibrary/tag/plugin/MobileHtml.phpで保存したら、HtmlParserに

$htmlParser->afterPlugins("tag.plugin.MobileHtml");

とすると上のfilterが組み込まれます。
http://highfreq.net/dev/itwitter.zipもこの構造に修正しました。