Example #1
0
 private final function rtblock($src, $filename)
 {
     if (strpos($src, "rt:block") !== false || strpos($src, "rt:extends") !== false) {
         $blocks = $paths = array();
         while (Tag::setof($xml, $this->rtcomment($src), "rt:extends")) {
             $bxml = Tag::anyhow($src);
             foreach ($bxml->in("rt:block") as $block) {
                 $name = $block->inParam("name");
                 if (!empty($name) && !array_key_exists($name, $blocks)) {
                     $blocks[$name] = $block->value();
                     $paths[$name] = $filename;
                 }
             }
             if ($xml->isParam("href")) {
                 $src = File::read($filename = File::absolute(dirname($filename), $xml->inParam("href")));
                 $this->filename = $filename;
             } else {
                 $src = File::read($this->filename);
             }
             $this->selected_template = $xml->inParam("name");
             $src = $this->rttemplate($src);
         }
         if (empty($blocks)) {
             $bxml = Tag::anyhow($src);
             foreach ($bxml->in("rt:block") as $block) {
                 $src = str_replace($block->plain(), $block->value(), $src);
             }
         } else {
             while (Tag::setof($xml, $src, "rt:block")) {
                 $xml = Tag::anyhow($src);
                 foreach ($xml->in("rt:block") as $block) {
                     $name = $block->inParam("name");
                     $src = str_replace($block->plain(), array_key_exists($name, $blocks) ? $this->parseUrl($blocks[$name], File::absolute($this->url, File::relative($this->path, dirname($paths[$name])))) : $block->value(), $src);
                 }
             }
         }
     }
     return $src;
     /***
     			ftmp("core/template/base.html",'
     					=======================
     					<rt:block name="aaa">
     					base aaa
     					</rt:block>
     					<rt:block name="bbb">
     					base bbb
     					</rt:block>
     					<rt:block name="ccc">
     					base ccc
     					</rt:block>
     					<rt:block name="ddd">
     					base ddd
     					</rt:block>
     					=======================
     				');
     			ftmp("core/template/extends1.html",'
     					<rt:extends href="base.html" />
     
     					<rt:block name="aaa">
     					extends1 aaa
     					</rt:block>
     
     					<rt:block name="ddd">
     					extends1 ddd
     					<rt:loop param="abc" var="ab">
     						{$loop_key}:{$loop_counter} {$ab}
     					</rt:loop>
     					<rt:if param="abc">
     					aa
     					</rt:if>
     					<rt:if param="aa" value="1">
     					bb
     					</rt:if>
     					<rt:if param="aa" value="2">
     					bb
     					<rt:else />
     					cc
     					</rt:if>
     					<rt:if param="zz">
     					zz
     					</rt:if>
     					<rt:if param="aa">
     					aa
     					</rt:if>
     					<rt:if param="tt">
     					true
     					</rt:if>
     					<rt:if param="ff">
     					false
     					</rt:if>
     					</rt:block>
     				');
     			ftmp("core/template/sub/extends2.html",'
     					<rt:extends href="../extends1.html" />
     
     					<rt:block name="aaa">
     					<a href="hoge/fuga.html">fuga</a>
     					<a href="{$newurl}/abc.html">abc</a>
     					sub extends2 aaa
     					</rt:block>
     
     					<rt:block name="ccc">
     					sub extends2 ccc
     					</rt:block>
     				');
     
     			$template = new Template("url=http://rhaco.org,path=".ftpath()."/core/template");
     			$template->vars("newurl","http://hoge.ho");
     			$template->vars("abc",array(1,2,3));
     			$template->vars("aa",1);
     			$template->vars("zz",null);
     			$template->vars("ff",false);
     			$template->vars("tt",true);
     			$result = $template->read("sub/extends2.html");
     			$ex = text('
     						=======================
     
     						<a href="http://rhaco.org/sub/hoge/fuga.html">fuga</a>
     						<a href="http://hoge.ho/abc.html">abc</a>
     						sub extends2 aaa
     
     
     						base bbb
     
     
     						sub extends2 ccc
     
     
     						extends1 ddd
     							0:1 1
     							1:2 2
     							2:3 3
     						aa
     						bb
     						cc
     						aa
     						true
     
     						=======================
     					');
     			eq($ex,$result);
     		 */
 }