おぼえがき

おぼえがき

fuelphpでテンプレートエンジン(parser)を使う

2013-01-16 | php
fuelphpを使っているとき、テンプレートエンジン使いたい。
package/parser/を見ると、利用できるtemplate engineは
twig,mustache,md,dwoo,jade,haml,smarty,phptalこんな感じ。

View::forge();
View_Dwoo::forge();
View_Mustache::forge();
View_Markdown::forge();
View_SimpleTags::forge();
View_Twig::forge();
View_Jade::forge();
View_Haml::forge();
View_Smarty::forge();
View_Phptal::forge();

とかいう書き方しなくてはならないし、viewmodelを利用する際は、
viewmodelの中でテンプレートの指定をしなくてはならない・・・

http://fuelphp.com/forums/discussion/7839
viewmodelの中はこんな感じになる

class View_Welcome_Hello extends ViewModel
{
protected $_view = 'welcome/hello.twig';
public function view() {
$this->name = $this->request()->param('name', 'World');
}
}


じゃまくさい。ありえない。
controllerとviewmodelで同じような定義をするのも管理上気持ち悪いことこの上ない


ってことで、coreクラスをオーバーライドすることにした。
対象は、
fuel/fuel/core/classes/viewmodel.php
fuel/fuel/core/classes/controller/template.php
coreロジックに手を入れるのは、あんまり好きではない。

オーバーライドしたソースコードはこんな感じ



fuel/fuel/app]$ cat bootstrap.php
Autoloader::add_classes(array(
'Controller_Template' => APPPATH.'classes/template.php',
'ViewModel' => APPPATH.'classes/viewmodel.php',
));

-----------------------------------

fuel/fuel/app/classes]$ cat template.php
abstract class Controller_Template extends FuelCoreController_Template
{
public function before()
{
if ( ! empty($this->template) and is_string($this->template))
{
// Load the template
$this->template = \View_Phptal::forge($this->template);
}

return parent::before();
}
}

-----------------------------------

fuel/fuel/app/classes]$ cat viewmodel.php
abstract class ViewModel extends FuelCoreViewModel
{
protected function set_view()
{
$this->_view = \View_Phptal::forge($this->_view);
}
}





で、とりあえず作ってみたのは、こんな感じ
Controller_TemplateとViewModelを利用している



class Controller_Testtpl extends Controller_Template
{
public function action_index()
{
$tpl = 'xxx/index';
$this->template->title = 'title';
$this->template->main = ViewModel::forge($tpl);
}
}


class View_Xxx_Index extends ViewModel
{
public function view()
{
$this->set("xyz",123445555554);
}
}



これでいけそうだ。