我的结构在我的组件的根目录中有component.php。我正在使用http://www.notwebdesign.com/joomla-component-creator/j15/index.php 我觉得需要有多个控制器才能拥有更清晰的代码,因为我有大约12个任务要运行。我使用多个模型,需要有多个控制器。
任何可以指引我正确方向的人?示例代码非常感谢。
答案 0 :(得分:4)
您需要在组件的主目录中创建一个文件夹(例如components / com_mycom / controllers /...)
然后我的组件的主文件(应该使用上面的示例称为“mycom.php”)具有如下代码:
// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );
// load a constants file for use throughout the component
require_once(JPATH_COMPONENT.DS.'lib'.DS.'constants.php');
// fetch the view
$view = JRequest::getVar( 'view' , 'null' );
// use the view to fetch the right controller
require_once( JPATH_COMPONENT.DS.'controllers'.DS.$view.'.php' );
// initiate the contoller class and execute the controller
$controllerClass = 'MycomController'.ucfirst($view);
$controller = new $controllerClass;
// call the display function in the controller by default - add a task param to the url to call another function in the controller
$controller->execute( JRequest::getVar( 'task', 'display' ) );
$controller->redirect();
然后,对于控制器目录中的控制器,您的代码将是正常的,例如
defined( '_JEXEC' ) or die( 'Restricted access' );
jimport('joomla.application.component.controller');
class MycomControllerAdd extends JController
{
function display() {
$viewLayout = JRequest::getVar( 'tmpl', 'add' );
$view = &$this->getView( 'add', 'html' );
$model = &$this->getModel( 'add' );
$view->setModel( $model, true );
$view->setLayout( $viewLayout );
$view->addStuff();
}
...
一个会调用它的网址就像这样:
http://somedomain.com/index.php?option=com_mycom&view=add