おぼえがき
おぼえがき
fuelphp でpackageを作ってみる。lessphpをパッケージにしてみる

bootstrapのless使っていて毎回コンパイルすんのが面倒。
自動で出来たらいいとおもう。
==================================================
まずはパッケージを作る
package(パッケージ)つくればいいんか。
とりあえず、適当だけど、開発環境だから変換できれば良しとする
利用するのは、lessphpってやつ。
パッケージのファイル構造はこんな感じ
fuel/packages/lessphp]$ ls -R
bootstrap.php
classes/
-- lessphp.php
■bootstrap.phpの中身はこんな感じ
Autoloader::add_core_namespace('LessPHP');
Autoloader::add_classes(array(
'LessPHP' => __DIR__.'/classes/lessphp.php',
));
■lessphp.phpの中身はこんな感じ
class LessPHP
{
public static function compileFile($lessfile,$css)
{
require APPPATH.'vendor'.DS.'lessphp'.DS.'lessc.inc.php';
$less = new lessc;
$less->compileFile($lessfile, $css);
}
}
すげー雑。
==================================================
lessphpを持ってくる
lessphp本体をvendorディレクトリに置く。
fuel/app/vendor]$ ls
lessphp/
-- lessphpをダウンロードしたファイル一式(lessc.inc.phpが含まれているやつ)
==================================================
パッケージできたからconfigに設定入れよう
fuel/app/config]$ cat config.php
return array(
'always_load' => array(
'packages' => array(
'LessPHP'
==================================================
じゃー変換できるかやってみよう
コントローラーで変換させてみる
class Controller_Welcome extends Controller
{
public function action_index()
{
LessPhp::compileFile(lessのファイル,出力先のcssファイル名);
}
}
とりあえずできた。
毎回コンパイル走るのじゃまくさい。
Configファイルでオプションいれないとな
どうやって毎回走らないようにしようかな
どうやるのがいいんだろうか・・・
パッケージの作り方なんとなくわかった。
fuelphpでテンプレートエンジン(parser)を使う
![]() | FuelPHP入門 |
早川 聖司 | |
ソーテック社 |
コメント ( 0 )
fuelphpでテンプレートエンジン(parser)を使う

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);
}
}
これでいけそうだ。
コメント ( 0 )