Article

RhacoのTemplateParserについてのメモ

※ 商品リンクから購入されると少額の報酬が発生することがあります。

RhacoのO/Rで動的にmodel系phpコードをジェネレートするために、Rhacoのテンプレートシステムを復習(ノードキュメントだからな、今のところ)。

タグパーサ系のクラス

  • tag.TagParser

    テンプレートの基底クラス。read/writeやキャッシュを制御する。

  • tag.TemplateParser:

    TagParserを継承したクラス。ループ等を制御する。

  • tag.HtmlParser

    TemplateParserを継承したクラス。htmlに特化したinputタグ等の制御を行う。

今回は、htmlは関係ないので、TemplateParserを使用する。

RhacoのUnitTestを使用して、test.txtを処理してみた。

やはりWeb系のテンプレートを主に指向しているので、sgml系でないものを処理しようとするとちょっとテンプレートの見た目がビミョー。

以下超簡易サンプルコード

TemplateTest.php

 <?php
 define("RHACO_DIR","/open/workspace/rhaco/");
 require_once(RHACO_DIR."rhaco.php");

 define("LOG_DISP_LEVEL", "debug");

 Rhaco::import("test/UnitTest");

 Rhaco::import("tag/TemplateParser");

 class TemplateTest extends UnitTest {
   var $templateParser;


   function setUp() {
     $this->templateParser = new TemplateParser();
   }

   function testTemplateExec() {
     $list = array();
     $list[] = "x";
     $list[] = "y";
     $list[] = "z";
     $arg["testData"] = $list;
     $this->templateParser->setRequest($arg);
     print $this->templateParser->write("test/test.txt");
   }
 }
 new TemplateTest();
 ?>
test/test.txt

  test text for TemplateParser

    <loop class="testData" id="data">
      <if pattern="{$data} == 'x'">
        It's X!
      <else>
        It's not X!
      </if>
      {$data}:
    </loop>

  end
実行結果

  [Debug 2005/11/19 22:07:46]:[templateparser] view file [test/test.txt]
  test text for TemplateParser

              It's X!
          x:
              It's not X!
          y:
              It's not X!
          z:

  end

loop/for/ifタグの細かいアトリビュートについては別途メモしよう。

Prev Entry

Next Entry