おぼえがき

おぼえがき

fuelphp でpackageを作ってみる。lessphpをパッケージにしてみる

2013-01-18 | php
.lessファイルから、.cssに変換するためのfuelphpのパッケージを作ってみる

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入門
早川 聖司
ソーテック社

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);
}
}



これでいけそうだ。