2011-01-04 9 views
6

これまで、私はCodeIgniterを使っていくつかのシンプルなWebアプリケーションを作成していましたが、ブロック/モジュールを作成する簡単な方法を見つけることはできません。コードイグナイターでのブロック/モジュールの作成

各ページのコントローラでクエリを複製して$ varsを使用してテンプレートに渡すことなく、サイトの任意のページにドロップできる「Recent Images」ブロックがあります。

2の質問は:

  1. 私はすでにビュー でパーシャルを使用していますが、どのように私は urlで指定されたもの以外のコントローラ から引っ張ること 部分を記述します。
  2. のデータを取得してブロックし、
    ページを作成しないコントローラを正しく作成するにはどうすればよいですか。

これは十分に簡単なようですが、私は自分自身で適切な解決策を見つけることができません。前もって感謝します。

答えて

7

「ウィジェット」、「モジュール」、「部分的なビュー」など、あなたがそれらを呼びたいと思っています。いずれにしても、ページの再利用可能なアイテムを意味します。

私の方法があなたのためではないかもしれないように、これを行うためのさまざまな方法があります - あなたが探しているものかもしれません!

まず、私はビューなどのウィジェットを作る、のパスはようになりましょう:ビュー/ウィジェット/ myview.php

私は私が私のコントローラで使用することを計画していますウィジェット何の決断を下します。私は私のメインビュー(まだ私のコントローラ内)をロードするときに、私はこれを行う

$data['widgets'] = array('widgets/myview', 'widgets/myview2'); 

::私の方法は次のように配列に私がしたいビューへのパスを置くことです

$this->load->view('main_view', $data); 

今ウィジェット配列がメインビューに渡されます。私は、ウィジェットが行く場所に到達したとき

はその後、私のメインビューには、このような私の配列によるIループ:

foreach ($widgets as $widget) 
{ 
    $this->load->view($widget); 
} 

このループは、私のメインビューで実行されます。都合の良いことに、メインビューに渡したすべてのデータは、読み込んだネストされたビューで使用できるようになります。

私はCodeIgniterの中に多くのウィジェットをこのように作ったのだが、私も私のCMSの中で使う方法です。

+0

ああ、これは私が探していたものをより明示的に思っていますが、Thrope、あなたも助けてくれてありがとう。私はCIについて多くのことを学んでいます。 – Rapture

6

部分的にはどういう意味ですか? CodeIgniterにはネイティブの部分的なビューはありません。ただし、ビューで$this->load->view()することができます。

あなたがロードしているすべてのビューで使用可能なコントローラからの変数について話している場合は、実行する必要があります。

$data['info'] = 'value'; 
$this->load->vars($data); 

$infoは、あなたがロードするすべてのビューに利用可能となります。

更新:

あなたのコンストラクタでいることを実行する必要があります。

class Page extends Controller { 
    function Page() 
    { 
     $this->load->model('page'); 
     $data['images'] = $this->page->get_images(); 
     $this->load->vars($data); 
     // images will now be available to all views 
    } 

} 

がアップデート2:

私はテンプレートを使用していないが、これはすべてのページのために働くということを認めなければなりませんあなたのコントローラによって作成されます。

+0

申し訳ありません - 私はテンプレートを使用していると思います。あなたが言ったように - $ this-> load-> view( 'user_controls')を使用します。データが必ずしもグローバルで各ビューにロードされることは望ましくありませんが、私は「最近の画像」を持っているページで、各ページのコントローラからそのクエリを実行することなくそのデータを入力するコントローラを呼び出します最近の画像がブロックされていますか?多分私は理にかなっていないでしょうか? – Rapture

+0

ラプチャー、私の更新を参照してください。 –

+0

ああ、ありがとう。私はモデルにもっと慣れていく必要があるようです。現在、私は2つの教義データベースモデルを持っており、controllerName/functionNameを使用してページ生成を組み込んでいるので、私はPageモデルを持っていません。 – Rapture

3

良いニュースは、CodeIgniterが確実にこの方向に動いていることです。 まず、wiredeignzのModular Extensionsを見てください。それはここに見つけることができます: https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc/overview あなたが始めるには良い文書があります。 モジュールを実行する(モジュールのコントローラ/メソッドを呼び出してビューの一部を返す)ことができ、それをテンプレートやグローバルビューなどに挿入できるため、これは完璧な方法です。 また、CI 2.0 - https://bitbucket.org/ellislab/codeigniter/overviewを参照してください。 これは以前のバージョンのcodeigniterとはかなり異なり、非常にエキサイティングな多くの新機能を備えています。ベータ版では非常に安定していますが。 HMVCはCI 2.0で動作するように書かれています。

また、このように機能する他のCIプロジェクトのコードを見てください。 Phil SturgeonのpyroCMSをお勧めします。彼は実際に道をリードしており、モジュール化とCI 2.0に関する多くの興味深い記事と記事を書いています。作業のwww.philsturgeon.co.uk

この方法では、必要なときにのみ使用されている独立したサイトの個別のビットを、維持するために非常に便利です。もう少し直接あなたを試してみて、支援するため

...

は、オプションの三番目のパラメータを使用して出力をバッファリングすることを忘れないでください。わからない場合は、ユーザーガイドを参照してください。

$partial = $this->load->view('someView', $data, true); 
関連する問題