在Joomla组件开发中使用多个控制器

时间:2011-07-07 05:00:30

标签: joomla

我的结构在我的组件的根目录中有component.php。我正在使用http://www.notwebdesign.com/joomla-component-creator/j15/index.php 我觉得需要有多个控制器才能拥有更清晰的代码,因为我有大约12个任务要运行。我使用多个模型,需要有多个控制器。

任何可以指引我正确方向的人?示例代码非常感谢。

1 个答案:

答案 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