SuiteCRM 全功能,不限用户,3600元/长期使用
SuiteCRM 与 Salesforce 和 Dynamics 一样强大,具有更高的技术独立性和定制性。业务咨询与服务,请联系我们!
我们提供的服务包括:插件开发、主题开发、安装和配置、CRM升级、CRM部署、支持与维护、用户培训…
SuiteCRM遵循MVC(模型-视图-控制器)模式,因此具有控制器(controllers)的概念。控制器负责对模型进行更改,并将控制适当地传递给视图。SuiteCRM具有动作的概念,即控制器将采取的动作。让我们看一下SuiteCRM URL:
example.com/index.php?module=Accounts&action=index
在这个(相当无聊)的示例中,我们看到模块是Accounts。这将确定要使用的控制器,然后在该控制器上调用index操作。
SuiteCRM将首先在以下位置查找控制器 custom/module/<TheModule>/controller.php
。如果找不到,则下一步module/<TheModule>/controller.php
将被检查。最后,如果这些控制器都不存在,则将使用默认控制器。可以在以下位置找到默认控制器 include/MVC/Controller/SugarController.php
。
定制控制器
通常,默认控制器处理请求并委托给适当的视图等。但是,自定义控制器可用于添加或更改功能。让我们看一下添加一个新动作。
首先,我们必须添加我们的自定义控制器。这将根据模块的性质而略有不同。
定制模块
在这种情况下,我们可以将文件直接放入模块中。您应该在以下位置创建一个新文件(如果不存在) modules/<TheModule>/controller.php
。内容将类似于: 为定制模块创建定制控制器
<?php
if(!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point');
class <TheModule>Controller extends SugarController
{
}
预先存在的模块
对于预先存在的模块,应将控制器添加到custom/modules/<TheModule>/controller.php
。
该文件的内容会有所不同,具体取决于您是扩展现有控制器(如果存在)还是完全创建自己的版本。通常最好扩展现有的控制器,因为这将保留重要的逻辑。您应在此处注意命名约定。我们给班级命名Custom<TheModule>Controller
。
在这里,我们不扩展现有的控制器,或者不存在这样的控制器: 为现有模块创建自定义控制器
<?php
if(!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point');
class Custom<TheModule>Controller extends SugarController
{
}
或者,我们扩展现有的控制器。请注意,我们需要现有的控制器: 使用现有控制器为现有模块创建自定义控制器
<?php
if(!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point');
require_once 'modules/<TheModule>/controller.php';
class Custom<TheModule>Controller extends <TheModule>Controller
{
}
添加动作
现在,我们可以向控制器添加新操作。在名称上将操作作为控制器上的方法创建action_<actionName>
。例如,要创建一个名为“ echo”的新动作,我们可以在上面创建的一个控制器中创建以下方法。然后,这可以执行所需的任何逻辑。在我们的示例中,我们将记录REQUEST并简单地重定向: 添加自定义控制器动作方法
public function action_echo(){
$GLOBALS['log']->debug("Echo called with request: ".print_r($_REQUEST,1));
SugarApplication::redirect('index.php');
}
之前版本
在先前版本的SugarCRM中,通过在任一版本中创建文件来添加新操作 modules/<TheModule>/<actionname>.php
要么 custom/modules/<TheModule>/<actionname>.php
。尽管这仍然有效,但不建议这样做。