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