CodeIgniter + smarty 实现widget功能

{{extends file='_layout.html'}}
 
{{block name='content'}}
 
<!--content-->
<div>
    <div>
        {{widgets path='widgets/carousel'}}
        {{widgets path='widgets/news'}}
    </div>
    {{widgets path='widgets/hots'}}
    {{widgets path='widgets/tops'}}
</div>
<!--/content-->
 
{{/block}}
 
 
 


{{widgets path='widgets/news'}}表示调用widgets Controller 的news action,最终输出的html嵌入这里。

需要实现该功能,可以借助smarty 的function plugin,创建一个 function.widgets.php

 

 
<?php
function smarty_function_widgets($params,&$smarty){
 
    $path = $params['path'];
    $args =isset($params['args']) ? $params['args'] : NULL;
 
    if($path){
        $ps = explode('/', $path);
 
        $controller = $ps[0];
        $method = $ps[1];
 
        require_once APPPATH.'controllers/'.$controller.'.php';
 
        $c =new $controller;
 
        if(!isset($params['args']))
            $c->$method();
        else
            $c->$method($args);
    }
}
 
?>