zend framework 框架的 MVC 组件很强大,很好用。Zend_Layout 组件提供对页面布局的支持,往往一个网站都有着统一的页面布局,例如头部(包含LOGO,导航菜单,用户状态信息等),主部(页面的主要内容),尾部(一般包括版权信息)。但也有可能因为不同的功能模块,页面的结构布局会不同,例如前台的布局与后台管理的页面布局可能是不一样的,或者前台的新闻页面布局与会员中心的页面布局是不一样的。
所以为了提供方便的对不同的功能模块提供不同的页面布局控制,我写了一个layout切换插件,可以为不同的模块(module)、控制器(controller)、活动(action)配置不同的布局。
使用说明:
使用这个布局切换器,只需要配置布局影射即可,配置的参数结构是一个数组结构,例如要为admin模块设定为使用布局 adminLayout,则配置如下:
array(
'admin' => 'adminLayout'
)
也可以这样写:
array(
'admin' => array('layout' => 'adminLayout')
)
以上两个配置是一样的。如果要为admin模块的user控制器(controller)设定使用另一个布局 userLayout,则可以这样配置:
array(
'admin' => array(
'layout' => 'adminLayout', // 当没有匹配到控制器时,使用该布局
'controllers' => array(
'user' => 'userLayout'
)
)
)
以上这个配置,当进入到模块admin的user控制器时,则使用userLayout布局,否则如果进入模块admin的其它控制器,则使用 adminLayout布局。以上的配置也可写成如下这样:
array(
'admin' => array(
'layout' => 'adminLayout', // 当没有匹配到控制器时,使用该布局
'controllers' => array(
'user' => array('layout' => 'userLayout')
)
)
)
配置匹配动作(action)也是一样的道理,如让admin模块的user控制器的profile动作使用 profileLayout 布局,则配置如下:
array(
'admin' => array(
'controllers' => array(
'actions' => array(
'profile' => 'profileLayout'
)
)
)
)
使用示例:
$options = array(
'admin' => 'adminLayout' // 为模块 admin 配置布局为 adminLayout
'user' => array(
'controllers' => array(
'profile' => 'profileLayout', // 为模块user的控制器profile配置布局为profileLayout
'account' => array('layout' => 'accountLayout') // 为模块user的控制器account配置布局为 accountLayout
)
),
'shop' => array(
'controllers' => array(
'product' => array(
'actions' => array(
'detail' => 'detailLayout', // 为模块shop的控制器product的detail动作配置布局为 detailLayout
'list' => 'listLayout' // action的布局指定只能是字符串,不能用 array('layout'=>'layoutName')的形式
)
)
)
)
);
Zend_Front::getInstance()->registerPlugin(new Jans_Controller_Plugin_LayoutSwitcher($options));
布局切换器插件的代码如下: