0

状況に応じてフォームに異なる html を表示する必要がある codeigniter プロジェクトに取り組んでいます。

私が本当にやりたいことは、この情報をビューに渡して画面に出力させることだけです。

$this->load->viewビューを作成するために、何の種類も必要としない修正版の codeigniter を使用していることに注意することが重要です。ヘッダーとフッターは自動的に設定されるため、$this->load->viewlikely を使用しても機能しません。

ファイルを見つけて、それをビューに渡して出力できるようにするだけです。インクルードでこれを行うことができることは知っていますが、もっと簡単な方法があるかどうか疑問に思っていました。

4

4 に答える 4

1

ビューをロードする必要がないというこの機能は、実際には妨げになるようです。この方法はお勧めしません。ビューを渡さない場合はデフォルトのビューがプルされると推測できますが、これをオーバーライドできます。テンプレートとビューを処理するメソッドを使用して MY_Controller を作成できます。ビューを明示的に宣言しない場合、ディレクトリ内のビューをクラスと同じ名前で呼び出し、ファイルをクラス内のメソッドと同じ名前で呼び出すと想定されます。 uri ( http://ellislab.com/codeigniter/user-guide/general/routing.html )。このように、ビューを明示的に呼び出したり、何かを変更したりする必要がある場合は、メソッドをオーバーライドするか、プロパティを埋めるだけです。

if (count($this->loadViews))
{
    foreach ($this->loadViews as $view)
        $this->load->view($view);
}else
{
    $this->load->view($this->uri->segment(1, 'welcome') . '/' . $this->uri->segment(2, 'index'))
}

また、引き続き機能する可能性のあるビュー内でビューを呼び出すこともできるため、CI の変更されたバージョンによって呼び出されている既定のビューにいつでも移動して、次のようなことを行うことができます。

<? if isset($flag): ?>
    $this->load->view('partial_view1');
<? else ?>
    $this->load->view('partial_view2');
<? endif; ?>

これを処理するためにフックを調べることもできます。ビューをフックしてob_startし、それらをスクラブしてからデータを出力することで、ビューとテンプレートを制御するプロジェクトが1つありました。 http://ellislab.com/codeigniter/user-guide/general/hooks.html

これらの解決策のいずれかが役立つことを願っています。他に何か必要な場合は、お知らせください。

于 2013-07-11T16:15:55.347 に答える
1

私はそれを考え出した。load->view を使用できないという事実以外は無関係だったので、おそらく変更されたと述べるべきではありませんでした。述べたように、ファイルをビューデータとして出力したかっただけです。私が思いついたのは以下です。

public function form($form_name = NULL)
{
    $this->view_data['form'] = $this->load->file(APPPATH.'views/stone_sheets/rectangular.php',TRUE);
}

基本的に私の問題は、ロードファイルヘルパーがあることを知らなかったことと、それを使用しようとしたときに最初にAPPPATHがなかったことです。助けてくれてありがとう。

于 2013-07-11T16:16:17.210 に答える
0

メソッドで何を変更したかわかりません$this->load->view()。どちらの方法でも、変数をビューに渡すことができ、その変数に基づいて、それぞれのファイルを内部に含めることができますmain view

$situationたとえば、これを行うよりも変数をビューに渡したと仮定します

if($situation == 'foo')
{
   include(APPPATH.'views/file1.php');
}
else
{
   include(APPPATH.'views/file2.php');
}
于 2013-07-11T15:57:29.150 に答える
0

非標準のコードイグナイターを使用しているため、より多くの情報を提供する必要があります。標準とは異なるため、コードのどこに問題があるのか​​ わかりません。

通常、いくつかのロジックを実行するためにデータを渡す必要があります。OR (ベスト プラクティス) は、ビュー コントローラーをコントローラー内のフォームに切り替えて、最初に標準ビューを表示し、次に状況に応じて別のフォームを表示することです。

元:

public function some_controller($situation)
{
    $this->load->view('head');
    switch($situation)
    {
       case '1': $this->load->view('view1');
        case '2': $this->load->view('view2');
     }
     $this->load->view('footer');
}

しかし、この「非標準」コードイグナイタが何であるかがわからないため、省略されたものをトラブルシューティングすることはできません。

于 2013-07-11T15:51:25.977 に答える