2

コントローラ

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Main extends CI_Controller 
{

    public function index()
    {
        $this->load->model('Event');
        $todays_events = $this->Event->get_todays_events();     

        $data = array(
            'todays_events' => $todays_events
        );
        $this->load->view('main/index', $data);
    }
}
?>

メイン/インデックス ビュー

<?php $this->load->view('partial/header'); ?>
<?php $this->load->view('components/calendar/mon_to_wed'); ?>
<?php $this->load->view('partial/footer'); ?>

コンポーネント/カレンダー/mon_to_wed

($todays_events にアクセスできますが、これはなぜですか?)

<div id="calendar_today">
    <h1>Whats Happening</h1>
    <?php foreach($todays_events as $event) : ?>
        <?php var_dump($event); ?>
    <?php endforeach; ?>
</div>
4

2 に答える 2

1

CodeIgniterコアファイルを読みましたが、コアをハックするとこの問題が解決する可能性がありますが、内部ビューで変数を定義するのを防ぐのに役立つ別の方法があります。

最初のviewファイルで、次の手順を実行します。

foreach ($_ci_vars as $key => $value) $_ci_vars[$key]=NULL;

$this->load->view('your-inner-view', $_ci_vars);
$this->load->view('your-second-inner-view', $_ci_vars);
$this->load->view('your-third-inner-view', $_ci_vars);
// and so on...

より良い解決策が見つかったら、投稿を更新します

アップデート:

ついに!私は本当の解決策を見つけましたLoader。デフォルトのクラスを使用するのではなく、独自のクラスを作成する方が良いです。以下の手順を実行します。

  • Loader.phpクラスをからにコピー/system/core/します/application/core/
  • $this->_ci_cached_vars = array_merge($this->_ci_cached_vars, $_ci_vars);行#805で検索
  • その行を次のように変更/置換します$this->_ci_cached_vars = $_ci_vars;

CodeIgniterには変数キャッシングがあり、load->view()メソッドを使用すると、変数は配列にキャッシュされます。2番目の使用では、変数と変数が存在する場合はそれらload->view()をマージし、結果を新しい配列(古い変数を含む)としてキャッシュします。 cachednew

だから、の使用をやめるarray_merge()ことが解決策になるでしょう;)

于 2012-10-19T22:20:46.073 に答える
0

複数のサブビューからビューを組み立てるとき、上記の修正によってビュー全体のデータが削除されます。

私にとってうまくいくのは、サブビューのこれらのデータ項目nullが不要な場合に明示的に設定することです。

たとえば、サブビューには$a$bおよび が必要$cです。

渡すサブビューを初めてレンダリングする$data['a'=>'whatever', 'b'=>'whatever', 'c'=>'whatever']と、ビューが正しくレンダリングされます。

2 回目に を渡す$data['a'=>'whatever']と、$b と $c が最初の呼び出しのデータでサブビューにレンダリングされます。代わりに を渡す$data['a'=>'whatever', 'b'=>null, 'c'=>null]と、bcはサブビューでレンダリングされません。

これはもちろん、サブビューで使用する前にデータが null かどうかを確認していると仮定しています。

于 2014-10-27T20:33:42.657 に答える