Widget类的实现可以作为分层控制器的另外一个典型实例。
在menu.html模版文件中的用法:
举个例子,我们在页面中实现一个分类菜单的Widget,首先我们要定义一个Widget控制器层 MenuWidget,如下:
namespace Home\Widget;
class MenuWidget extends Think\Controller {
public function index(){
echo 'menuWidget';
}
}
类文件位于 Home/Widget/MenuWidget.class.php。
然后,我们在需要显示分类菜单的模版中通过W方法调用这个Widget。
{~W('Menu/index')}
执行后的输出结果是: menuWidget
如果需要在调用Widget的时候传入参数,可以这样定义:
namespace Home\Widget;
class MenuWidget extends Think\Controller {
public function index($id,$name){
echo $id.':'.$name;
}
}
在需要显示分类菜单的模版中添加如下的Widget调用代码如下:
{~W('Menu/index',array(5,'thinkphp'))}
则会输出 5:thinkphp
来一个复杂一点的例子:
namespace Home\Widget;
class MenuWidget extends Think\Controller {
public function index(){
$menu = M('Cate')->getField('id,title');
$this->assign('menu',$menu);
$this->display('Widget/menu');
}
}
CateWiget类渲染了一个模版文件
Home/View/Widget/menu.html
,
在menu.html模版文件中的用法:
<foreach name="menu" item="title">
{$key}:{$title}
</foreach>