nazolabo

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

rhacoの仕様変更の多さは異常

Templateにタグを新たに追加する(再) - ふわふわな毎日
http://d.hatena.ne.jp/nazone/20070411/p2

ですが現在のrhacoでは動作しません。
Pluginではなくfilterという形式の動作に変更になったので、

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

class MobileHtmlFilter {
	
	function after($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;
	}
}

こんな感じに修正して、登録は

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

な感じになります。
大きく変わったのは、今までは登録の時点でフィルタの動作位置を指定していましたが、最近のではフィルタの定義のほうで動作位置(上の場合はafterなのでパース後)を指定するようになりました。
あと仕様変更ネタで言えば、結構前からrhaco内のdataという名前のフォルダは全てmodelという名前に変更されていますので注意してください。