CodeIgniterでウィジェット(ビューパーシャル)を使う
CodeIgniter 3でウィジェット(ビューパーシャル)を使う方法は、HMVCを使う方法がありますが、HMVCはCodeIgniterの基本設計に反した実装であり、あまり筋がよくないです。
そこで、それ以外の方法です。
ここでは、フレームワークに依存しないウィジェットシステムである「myth/bay」を使います。このライブラリの作者Lonnie Ezellは、CodeIgniter Councilのメンバーの一人であり、Bonfireの作者で、CodeIgniter4開発の現在の事実上のリード開発者です。
準備
CodeIgniterと必要なライブラリをインストールします。
$ composer create-project kenjis/codeigniter-composer-installer codeigniter-widgets
$ cd codeigniter-widgets/
$ composer require 'myth/bay:dev-develop'
ウィジェットを簡単に使えるようにヘルパー関数を用意します。
application/helpers/widget_helper.php
<?php
/**
* Widget helper for CodeIgniter 3
*
* @author Kenji Suzuki <https://github.com/kenjis>
* @license MIT License
* @copyright 2016 Kenji Suzuki
* @link https://github.com/kenjis/codeigniter-widgets
*/
/**
* Widget helper
*
* @staticvar Myth\Bay\Bay $bay
* @param string $library Widget library and method
* @param array $params Params for the method
* @param int $cache_ttl Time to live (in minutes)
* @param string $cache_name Cache name
* @return string
*/
function widget($library, $params = null, $cache_ttl = 0, $cache_name = null)
{
static $bay;
if ($bay === null)
{
$CI =& get_instance();
$CI->load->driver('cache', array('adapter' => 'file'));
$bay = new Myth\Bay\Bay(
new Myth\Bay\CI3Finder(),
new Myth\Bay\CI3Cache()
);
}
return $bay->display($library, $params, $cache_name, $cache_ttl);
}
使い方
ウィジェットをライブラリとして作成します。例えば、Blog_widget
を作成します。
application/libraries/Blog_widget.php
<?php
class Blog_widget
{
public function list_latest()
{
$CI =& get_instance();
$CI->load->view('blog/list_latest');
}
}
これで、ビューの中から、以下のように呼び出せます。
<?php echo widget('Blog_widget::list_latest'); ?>
もし、public function list_latest($max)
だとしたら、以下のように引数を指定できます。
<?php echo widget('Blog_widget::list_latest', ['max' => 10]); ?>
ウィジェットをキャッシュしたい場合は、キャッシュする時間を分で指定します。
<?php echo widget('Blog_widget::list_latest', ['max' => 10], 10); ?>
関連
Date: 2016/01/18