1

codeigniterサイトのサイドバーに広告を実装する必要があります。

広告は動的であり、データベースから取得されます。現在の設定では、メインテンプレートファイルがあり、メインビューファイルの名前を次のような変数として渡します。

$data['main_content'] = 'some_view_file';
$this->load->view('template_file', $data);

私は次のステップを考えました:

  1. get_ads()私の関数を作成し、MY_Controllerすべての広告を取得して返します
  2. コントローラーの各メソッドで、上記で作成した関数にアクセスし、それをテンプレートに渡します。

$data['ads'] = $this->get_ads();
$data['main_content'] = 'some_view_file';
$this->load->view('template_file', $data);

ただし、上記のアプローチの問題は$data['ads'] = $this->get_ads();、ビューをロードする前に、すべてのメソッドでを設定する必要があることです。

上記の問題を処理するためのより良い方法は何でしょうか?

4

2 に答える 2

3

Ads.php という CodeIgniter ライブラリを作成します。

class Ads
{

    private $CI;

    public function __construct()
    {
        $this->CI = & get_instance();
    }

    public function my_ads()
    {
        // get the ads from database //
        return $this->CI->db->select('field1, field2, field3')->from('ads_table')->get()->result();
    }

}

ライブラリを自動ロードします (すべてのビューで広告が必要なため)。./application/config/autoload.phpに移動します

/*
  | -------------------------------------------------------------------
  |  Auto-load Libraries
  | -------------------------------------------------------------------
  | These are the classes located in the system/libraries folder
  | or in your application/libraries folder.
  |
  | Prototype:
  |
  | $autoload['libraries'] = array('database', 'session', 'xmlrpc');
 */

$autoload['libraries'] = array('ads');

を使用して、CI システム全体のデータを取得できるようになりました。

$ads = $this->ads->my_ads();

これがお役に立てば幸いです。ありがとう!!

于 2012-06-25T10:10:37.117 に答える
1

MY_Controller変数を追加します。

class MY_Controller extends CI_Controller {

      public $data;

      public function __construct() {
          $this->data['ads'] = $this->get_ads();      
          //etc.
      }
    //etc.
}

各コントローラーで変数を更新し、$data次のようにビューを呼び出します。

$this->data['main_content'] = 'some_view_file';
$this->load->view('template_file', $this->data);
于 2012-06-25T10:08:12.077 に答える