<?php // +---------------------------------------------------------------------- // | OneThink [ WE CAN DO IT JUST THINK IT ] // +---------------------------------------------------------------------- // | Copyright (c) 2013 http://www.onethink.cn All rights reserved. // +---------------------------------------------------------------------- // | Author: 麦当苗儿 <zuojiazi@vip.qq.com> <http://www.zjzit.cn> // +---------------------------------------------------------------------- namespace HomeController; use ThinkController; /** * 扩展控制器 * 用于调度各个扩展的URL访问需求 */ class AddonsController extends Controller{ protected $addons = null; public function execute($_addons = null, $_controller = null, $_action = null){ if(C('URL_CASE_INSENSITIVE')){ $_addons = ucfirst(parse_name($_addons, 1)); $_controller = parse_name($_controller,1); } if(!empty($_addons) && !empty($_controller) && !empty($_action)){ $Addons = A("Addons://{$_addons}/{$_controller}")->$_action(); } else { $this->error('没有指定插件名称,控制器或操作!'); } } protected function display($templateFile = '', $charset = '', $contentType = '', $content = '', $prefix = '') { $templateFile = $this->getAddonTemplate ( $templateFile ); $this->view->display ( $templateFile, $charset, $contentType, $content, $prefix ); } function getAddonTemplate($templateFile = '') { if (file_exists ( $templateFile )) { return $templateFile; } //dump ( $templateFile ); $oldFile = $templateFile; if (empty ( $templateFile )) { $templateFile = T ( 'Addons://' . _ADDONS . '@' . _CONTROLLER . '/' . _ACTION ); } elseif (stripos ( $templateFile, '/Addons/' ) === false && stripos ( $templateFile, THINK_PATH ) === false) { if (stripos ( $templateFile, '/' ) === false) { // 如index $templateFile = T ( 'Addons://' . _ADDONS . '@' . _CONTROLLER . '/' . $templateFile ); } elseif (stripos ( $templateFile, '@' ) === false) { // // 如 UserCenter/index $templateFile = T ( 'Addons://' . _ADDONS . '@' . $templateFile ); } } if (stripos ( $templateFile, '/Addons/' ) !== false && ! file_exists ( $templateFile )) { $templateFile = ! empty ( $oldFile ) && stripos ( $oldFile, '/' ) === false ? $oldFile : _ACTION; } // dump ( $templateFile );//exit; return $templateFile; } }
上面是定位源码,重写了display方法
下面是使用方法
<?php namespace AddonsHelloController; use HomeControllerAddonsController; class HelloController extends AddonsController{ public function replyText(){ $this->display('replyText'); } }
通过链接访问插件
<a class="item" href="{:addons_url('Hello://Hello/replyText')}">自定义菜单</a>