使用Delphi4Php的模板功能

Delphi4php使用了smarty做为其内部的模板引擎,在实际使用中,我们只要设置 Page 的 TemplateEngine 属性值为 SmartyTemplate,并将 TemplateFileName 属性设置为该页面对应的 模板文件,在实际使用的时候就会使用模板中设置的布局来显示。

模板文件遵循Smarty 的风格,区别就是使用 {% 和 %} 来包含模板脚本内容, 而不是我们习惯的 { 和 }包含。

在模板中可以直接使用在 Page 上定义的属性,比如,在 Page 上放一个 Label 取名称 lbTest, 则在模板文件中可以通过 {% $lbTest %} 来将lbTest的Label显示出来, 被显示的lbTest将按照lbTest所定义的各种属性行为来表现,比如字体的大小颜色等,对 lbTest 定义的事件处理方法也会转化为相关的脚本调用。

默认模板可以使用在Page上放置的组件变量,如果要在模板中使用非Page上放置的组件对象,则需要设置Page 的 OnTemplate 事件, 比如。

  1.        function IndexTemplate($sender, $params)
  2.        {
  3.           // 获取使用的模板引擎对象
  4.           $smarty = $params['template']->_smarty;
  5.           // 为模板设置一些非控件的变量值,这儿设置变量名称为 test
  6.           $smarty->assign('test', "测试额外变量文字");
  7.        }

然后在模板中使用 {% $test %} 就可以显示在这儿设置的文字内容。

——-
我测试时发现一个问题,如果在设计时指定好 Page 的 TemplateEngine 和 TemplateFileName,则在修改模板内容并做保存时,会将Page的事件处理关联关系去除,而且按F11不能编辑Page的属性了,不知道是Delphi4Php的Bug问题还是我的RP问题。
好在通过在设计时先不设置这两个属性的值,然后在Page的OnCreate中动态的设置这两个属性的值可以解决这个问题。

  1.        function IndexCreate($sender, $params)
  2.        {
  3.            $this->TemplateEngine = "SmartyTemplate";
  4.            $this->TemplateFilename = "index.tpl";
  5.        }

Popularity: 3% [?]

Related