私のWebアプリケーション用のテーマレイアウトを設計しています。Codeigniter - 他にビューがある場合
私はif($this->router->fetch_class() == 'A') { //display div A }
が表示されます言ってみましょう
しかし、これをどのように表示するには?
私のWebアプリケーション用のテーマレイアウトを設計しています。Codeigniter - 他にビューがある場合
私はif($this->router->fetch_class() == 'A') { //display div A }
が表示されます言ってみましょう
しかし、これをどのように表示するには?
Noooo。そうしないでください。 ;)この種のハードコーディング文字列は、ほとんど常に悪いアプローチです。あなたの意見は厄介になり、あなたのコントローラークラスの名前を変更することができます。
まず、このコードがコントローラ内にある場合、はコントローラの種類がわかりません。
これは、これが複数のコントローラで使用されている継承されたメソッドであると想定しています。
表示したいDIV parent::some_action()
方法を言って、当たりの子ごとでそれをオーバーライド:その場合には、いくつかのオプションがあります。あなたが名前を変更する場合は、あなたのIDEがあなたのために重い物を持ち上げるを行いますように(instanceof
、むしろfetch_class()
を使用するよりも
使用する(ここでは「権威」の適切な代表団は...後にあなたにいくつかのデカップリング頭痛が保存されます)クラス)。
をサブビュー(つまり部分的なもの)に分割することを検討してください。 は実際にはになります。ビュー内で文字列の比較を行うのは面倒です。信頼。私。
は、ここで私が推薦するものです:
<?php
// Overridden core class
class MY_Controller extends CI_Controller {
public function some_action()
{
//...
if ($this instanceof Controller_class_that_uses_div_a)
{
$this->load->view('view_for_div_A');
}
else
{
$this->load->view('view_for_div_B');
}
//...
}
}
あなたはあなたのコントローラで同じロジックを持っているし、ちょうどあなたのビューまでの値を渡すことができます:
$class = $this->router->fetch_class();
$this->load->view('myView',
array('class' => $class));
それからちょうどあなたのビューでその変数を使用します。
if ($class == 'A') ...
痛い、それはいくつかの通常の文字列ではないという理由だけで、私はthat..Thanks.willはそれを与えるようにそれがビューに渡すことはできませんと思いましたa try – foxns7
はい、私が認識している制限はありません。文字列だけでなく、他のタイプのオブジェクトもビューに渡すことができます。 –
私は自分自身の疑問にうんざりしていました。私はここで同意する。あなたは、眺めの中でコントローラのことをするという習慣に乗りたいとは思わない。生きている人のために、このコードを混乱させなければならないので、それをシンプルに保ってください。 –