Kohana 3を使用して簡単なテンプレート変更を整理する

良い一日!



少し前まで、私は原則としてフレームワークに精通し始め、すぐに質問にぶつかりました-テンプレートフォルダーに別のテンプレートフォルダーを追加していつでも簡単に変更できるようにテンプレートの簡単な変更を整理する方法 しかし、Kohana 3(残念なことに、私は表面的にしか作業していないため、他のフレームワークについては何も言えません)、最初に、すべてのViewファイルはviewsフォルダーにあります(結局、テンプレートは単純で、単純なユーザーにとって理解しやすいです)次に、Viewsフォルダーから目的のViewファイルを選択するメカニズムがありません(直接接続する場合を除く)。 さて、これを実装する方法を説明したいと思います。 使用されているフレームワークのバージョンは3.0.7で、現時点では最新です。

始めましょう。



ビューの代わりにテンプレートフォルダーを使用する機能



最初に、Viewダミークラスによって継承されるKohana_Viewファイルを見てください。 このクラスは非常に単純ですが、set_filename()関数は私たちにとって特に興味深いものです。Viewファイルを探す場所を「ハード」に指定しているのはこの点です。

public function set_filename($file)

{

if (($path = Kohana::find_file('views', $file)) === FALSE)

{

throw new Kohana_View_Exception('The requested view :file could not be found', array(

':file' => $file,

));

}



// Store the file path locally

$this->_file = $path;

return $this;

}






Kohana_Viewを継承し、set_filename関数をわずかに変更して、Templateクラスを作成しましょう。

public function set_filename($file)

{

$folder = 'templates/'.self::get_name();

if (($path = Kohana::find_file($folder, $file)) === FALSE)

{

throw new Kohana_View_Exception('The requested layer :file could not be found', array(

':file' => $file,

));

}



// Store the file path locally

$this->_file = $path;



return $this;

}






親クラスに存在しない静的関数へのアピール— self :: get_name()-ここでフラッシュしました。それを書いてみましょう。 そのタスクは、データベースの構成(これは私の特定の例です。ここでは誰でも自分で変更できます)から、サイトにインストールされているテンプレートの名前を取得することです。

public static function get_name()

{

$template = DB::select('value')

->from('config')

->where('key', '=', 'template')

->limit(1)

->execute()

->current();

return $template['value'];

}






これで、必要に応じて、Template :: get_name()に連絡することで、現在のテンプレートの名前を簡単に見つけることができます。 当初は、名前を静的変数に入れるという考えでしたが、実際には、そのようなアプローチは時には適用できないことが示されています(ただし、適切なスキルを身につければ簡単です)。



リストのさらに下には、工場があります-フリルはありません:

public static function factory($file = NULL, array $data = NULL)

{

return new Template($file, $data);

}






それだけです。実際には、テンプレートファイルが完成したら、application / classes / template.phpとして保存できます。



Controller_Templateの作成



ここで、フレームワークによって提案されたKohana_Controller_Templateに基づいて、コントローラーController_Templateを記述しましょう。

class Controller_Template extends Controller{



/**

* @var string template layer

*/

public $layer = 'index';



/**

* @var boolean auto renders template

*/

public $auto_render = TRUE;



/**

* Loads the template object (Template instance)

*/

public function before()

{

if($this->auto_render === TRUE)

{

$this->template = Template::factory($this->layer);

return parent::before();

}



/**

* Assigns the template as the request response.

*/

public function after()

{

if($this->auto_render === TRUE)

{

$this->request->response = $this->template;

}

return parent::after();

}

}








さて、別のレイヤーテンプレート/ [template_name] /auth.phpを使用する承認コントローラーを作成する場合、Controller_Templateから継承して行を追加するだけで十分だとしましょう

public $ layer = 'auth';



実際、それがすべてです。



私の記事が誰かを助けてくれたら嬉しいです。 また、健康的な批判、質問、コメントも歓迎します...一般的に、私は彼らのために書きました。 :)

ご清聴ありがとうございました。



All Articles