SugarCrm的研究之一(加载一个module在另一个module里----subpanel)
时间:2006-10-16 来源:xh_terry
最近换的新工作在开发开源软件 SugarCrm 一套很强大的开源客户关系管理软件
看了第一周,总结出以下的一些经验给新使用CRM的朋友们,并结合一个开发的简单实例,了解一下SugarCrm的一些内部构造.希望同样是开发SugarCrm的朋友们指教(msn:[email protected])
摘抄一段:如何快速研究SugarCrm 和vTigerCRM
一是模版技术(xtemplate),研究SugarCRM和vTigerCRM如何使用xTemplate。通过研究xTemplate的几个例子和SugarCRM某个模块可以完全熟悉XTemplate。
二是保存流程,研究SugarCRM某个模块的保存功能即可熟悉SugarCRM和vTigerCRM的保存流程。
三是产生列表的流程,研究SugarCRM的ListView.php和vTigerCRM的某个模块的列表功能。可以参见blog上[
研究SugarCRM之二
]。
四是相关列表(Subpanel),SugarCRM的subpanel功能比较复杂,但比较强大,需要好好研究。vTigerCRM的subpanel功能相对来说比较简单,研究某个模块的subpanel功能即可明白。
这一周主要完成了对xTemplete的研究对subpanel的研究
xtemplete是比较简单的模板系统,手册没有,源代码给了7个例子,都比较简单,感觉没smarty好用(个人看法),看过后对SugarCrm模块中的html文件里的有了更为深刻的认识
今天老板让改在Accounts Module里的detailview下看到Cases的subpanel,由于我第一次接触SugarCrm 被这厮的封装搞的云里雾里 最后终于大致看明白了一些来龙去脉.在这里写上一二:
在Accounts目录中找到DetailView.php,这里是源发点,文件分两个部分,
require_once('include/SubPanel/SubPanelTiles.php');之前的是detailView得到的数据用$xtpl->assign将数据都注册到模板上
require_once即是子面板subpanel的开始
require_once("include/SubPanel/SubPanelTiles.php");
这里引用的是subpanel模块的类文件
class SubPanelTiles这个类主要还是要表现出这个html代码用display函数
其中还包括另外两个文件
require_once('include/SubPanel/SubPanel.php');
require_once('include/SubPanel/SubPanelDefinitions.php');
Subpanel.php主管得到数据,体现数据的表现形式
SubPanelDefinitions.php主管得到需要加载模块的格式定义,主要是从另外一个模块下的subpanel/目录下的文件中找到已定义好的数据体现格式,在我做的案例中,我需要在另外一个模块Cases下找到subpanel/default.php这些是我要展示在我原有模块下的展示格式.
subpanel/default.php如下
$subpanel_layout = array(//展示数组
'top_buttons' => array(//顶端的按钮数组,如果不需要有按钮,则此数组为空,但此项一定保留即'top_buttons' =>array();即可
array('widget_class' => 'SubPanelTopCreateButton'),//加一个创建按钮
array('widget_class' => 'SubPanelTopSelectButton', 'popup_module' => 'Cases'),//加一个选择按钮,并定义加载模块是CASES
),
'where' => '',//定义自己的查询语句,
'default_order_by' => '',//默认排序
'list_fields' => array(//表现栏位的数组
'case_number'=>array(//需要展示case_number 定义他的名字,和宽度
'vname' => 'LBL_LIST_NUMBER',
'width' => '6%',
),
'system_id'=>array(//这个暂时没搞明白
'usage' => 'query_only',
),
'name'=>array(//需要展示name
'vname' => 'LBL_LIST_SUBJECT',
'widget_class' => 'SubPanelDetailViewLink',
'width' => '70%',
),
'supplier_name'=>array(//需要展示供货商的名字
'module' => 'Accounts',
'widget_class' => 'SubPanelDetailViewLink',
'vname' => 'LBL_LIST_ACCOUNT_NAME',
'width' => '20%',
),
/*'status'=>array(//cases的状态,
'widget_class' => 'SubPanelDetailViewLink',
'vname' => 'LBL_LIST_STATUS',
'width' => '10%',
),*/
'edit_button'=>array(//编辑按钮
'widget_class' => 'SubPanelEditButton',
'module' => 'Cases',
'width' => '4%',
),
'remove_button'=>array(//删除按钮
'widget_class' => 'SubPanelRemoveButton',
'module' => 'Cases',
'width' => '5%',
),
),
);
ok,这保存一下就搞定了,当然,还有一个地方你必须要改
对,这是原有模块下的展示模块的细节,需要展示几个子模块,子模块的属性等
在我原有的模块Accounts下找到layout_defs.php
看到如下的格式的数组
$layout_defs['Accounts'] = array(
// list of what Subpanels to show in the DetailView
'subpanel_setup' => array(
'notes' => array(//note子模块
'top_buttons' => array(
array('widget_class' => 'SubPanelTopCreateButton'),
),
'order' => 20,
'module' => 'Notes',
'subpanel_name' => 'default',
'title_key' => 'LBL_NOTES_SUBPANEL_TITLE',
'get_subpanel_data' => 'notes',
),
'cases' => array(//cases子模块
'order' => 5,//排序,如果你想让cases子模块排在notes前边,这个数字要小于上边那个order的数值
'module' => 'Cases',//模块名
'subpanel_name' => 'default',//需要的子面板的样式名,就是刚刚该过的default.php如果你定义这里为mail,相应的地方应该有mail.php做子样式
'get_subpanel_data' => 'cases',//得到哪个子模块数据
'add_subpanel_data' => 'cases_id',//我感觉是加一个键
'title_key' => 'LBL_PURCHASE_SUBPANEL_TITLE',//title的名字
//'top_buttons' => array(),
)
)
);
大致就添加好了一个subpanel.今后随着项目的需求,会改动更多地方,再慢慢写点体会和大家分享.~~
terry 10/16 15:16完成
看了第一周,总结出以下的一些经验给新使用CRM的朋友们,并结合一个开发的简单实例,了解一下SugarCrm的一些内部构造.希望同样是开发SugarCrm的朋友们指教(msn:[email protected])
摘抄一段:如何快速研究SugarCrm 和vTigerCRM
一是模版技术(xtemplate),研究SugarCRM和vTigerCRM如何使用xTemplate。通过研究xTemplate的几个例子和SugarCRM某个模块可以完全熟悉XTemplate。
二是保存流程,研究SugarCRM某个模块的保存功能即可熟悉SugarCRM和vTigerCRM的保存流程。
三是产生列表的流程,研究SugarCRM的ListView.php和vTigerCRM的某个模块的列表功能。可以参见blog上[
研究SugarCRM之二
]。
四是相关列表(Subpanel),SugarCRM的subpanel功能比较复杂,但比较强大,需要好好研究。vTigerCRM的subpanel功能相对来说比较简单,研究某个模块的subpanel功能即可明白。
这一周主要完成了对xTemplete的研究对subpanel的研究
xtemplete是比较简单的模板系统,手册没有,源代码给了7个例子,都比较简单,感觉没smarty好用(个人看法),看过后对SugarCrm模块中的html文件里的有了更为深刻的认识
今天老板让改在Accounts Module里的detailview下看到Cases的subpanel,由于我第一次接触SugarCrm 被这厮的封装搞的云里雾里 最后终于大致看明白了一些来龙去脉.在这里写上一二:
在Accounts目录中找到DetailView.php,这里是源发点,文件分两个部分,
require_once('include/SubPanel/SubPanelTiles.php');之前的是detailView得到的数据用$xtpl->assign将数据都注册到模板上
require_once即是子面板subpanel的开始
require_once("include/SubPanel/SubPanelTiles.php");
这里引用的是subpanel模块的类文件
class SubPanelTiles这个类主要还是要表现出这个html代码用display函数
其中还包括另外两个文件
require_once('include/SubPanel/SubPanel.php');
require_once('include/SubPanel/SubPanelDefinitions.php');
Subpanel.php主管得到数据,体现数据的表现形式
SubPanelDefinitions.php主管得到需要加载模块的格式定义,主要是从另外一个模块下的subpanel/目录下的文件中找到已定义好的数据体现格式,在我做的案例中,我需要在另外一个模块Cases下找到subpanel/default.php这些是我要展示在我原有模块下的展示格式.
subpanel/default.php如下
$subpanel_layout = array(//展示数组
'top_buttons' => array(//顶端的按钮数组,如果不需要有按钮,则此数组为空,但此项一定保留即'top_buttons' =>array();即可
array('widget_class' => 'SubPanelTopCreateButton'),//加一个创建按钮
array('widget_class' => 'SubPanelTopSelectButton', 'popup_module' => 'Cases'),//加一个选择按钮,并定义加载模块是CASES
),
'where' => '',//定义自己的查询语句,
'default_order_by' => '',//默认排序
'list_fields' => array(//表现栏位的数组
'case_number'=>array(//需要展示case_number 定义他的名字,和宽度
'vname' => 'LBL_LIST_NUMBER',
'width' => '6%',
),
'system_id'=>array(//这个暂时没搞明白
'usage' => 'query_only',
),
'name'=>array(//需要展示name
'vname' => 'LBL_LIST_SUBJECT',
'widget_class' => 'SubPanelDetailViewLink',
'width' => '70%',
),
'supplier_name'=>array(//需要展示供货商的名字
'module' => 'Accounts',
'widget_class' => 'SubPanelDetailViewLink',
'vname' => 'LBL_LIST_ACCOUNT_NAME',
'width' => '20%',
),
/*'status'=>array(//cases的状态,
'widget_class' => 'SubPanelDetailViewLink',
'vname' => 'LBL_LIST_STATUS',
'width' => '10%',
),*/
'edit_button'=>array(//编辑按钮
'widget_class' => 'SubPanelEditButton',
'module' => 'Cases',
'width' => '4%',
),
'remove_button'=>array(//删除按钮
'widget_class' => 'SubPanelRemoveButton',
'module' => 'Cases',
'width' => '5%',
),
),
);
ok,这保存一下就搞定了,当然,还有一个地方你必须要改
对,这是原有模块下的展示模块的细节,需要展示几个子模块,子模块的属性等
在我原有的模块Accounts下找到layout_defs.php
看到如下的格式的数组
$layout_defs['Accounts'] = array(
// list of what Subpanels to show in the DetailView
'subpanel_setup' => array(
'notes' => array(//note子模块
'top_buttons' => array(
array('widget_class' => 'SubPanelTopCreateButton'),
),
'order' => 20,
'module' => 'Notes',
'subpanel_name' => 'default',
'title_key' => 'LBL_NOTES_SUBPANEL_TITLE',
'get_subpanel_data' => 'notes',
),
'cases' => array(//cases子模块
'order' => 5,//排序,如果你想让cases子模块排在notes前边,这个数字要小于上边那个order的数值
'module' => 'Cases',//模块名
'subpanel_name' => 'default',//需要的子面板的样式名,就是刚刚该过的default.php如果你定义这里为mail,相应的地方应该有mail.php做子样式
'get_subpanel_data' => 'cases',//得到哪个子模块数据
'add_subpanel_data' => 'cases_id',//我感觉是加一个键
'title_key' => 'LBL_PURCHASE_SUBPANEL_TITLE',//title的名字
//'top_buttons' => array(),
)
)
);
大致就添加好了一个subpanel.今后随着项目的需求,会改动更多地方,再慢慢写点体会和大家分享.~~
terry 10/16 15:16完成
相关阅读 更多 +