201703:SuiteCRM自定义筛选界面

    xiaoxiao2021-03-28  26

    SuiteCRM自定义筛选界面 (Popup)


    筛选界面显示自定义自定义筛选条件字段关于列表排序

    Popup视图关系图

    1. 筛选界面显示自定义

    定义文件结构

    <?php $popupMeta = array ( 'moduleMain' => 'HAC_Bank_Accounts', 'varName' => 'HAC_Bank_Accounts', //排序字段,可以扩展成多个字段 'orderBy' => 'hac_bank_accounts.name', 'whereClauses' => array ( //请求参数到数据库字段的映射 ), //追加查询语句 'whereStatement' => '' 'searchInputs' => array ( //请求参数名 ), 'searchdefs' => array ( //搜索字段定义 ), 'listviewdefs' => array ( //结果列表字段定义 ) );

    1.增加字段和自定义

    在对应定义添加字段定义即可:

    'CONTRACT_NAME' => array ( //字段类型 'type' => 'relate', 'default' => true, //是否在工作室中显示 'studio' => 'visible', //标签名,可自定义 'label' => 'LBL_CONTRACT_NAME_1', //宽度 'width' => '24%', //对应模块字段名,可省略 'name' => 'contract_name' //附加参数 'displayParams'=> array() //... ),

    对于列表定义注意需设置 'default' => true,,否则不会显示列

    2. Popup视图的调用

    前端调用

    open_popup( module_name, //模块名 width, //窗口宽度 height, //窗口高度 initial_filter, //追加查询条件 close_popup, //是否自动关闭,,默认true hide_clear_button, //是否隐藏清除按钮,默认true popup_request_data, //请求报文,处理选择后的回调 popup_mode, //POPUP模式(多选和单选),多选时,返回记录ID为键数组 create, //默认false,是否可创建模块 metadata //指定使用的popup定义文件名称 )

    请求报文定义,可附加在编辑界面的字段定义中

    popupRequestData = { "call_back_function" : "setFuncReturn",//回调函数 "form_name" : "EditView", //返回值和页面元素映射 "field_to_name_array" : { "id":"line_function_id", "name":"line_function_name", "func_icon":"line_func_icon", } }

    3. Popup列表添加字段 包括在自定义列表表头和添加非本模块字段,修改表头通过添加label可以实现,添加字段包块以下两步: 其一、在popupdef的listviewdefs中添加字段定义

    'CONTRACT_NUMBER' => array( 'type' => 'varchar', 'label' => 'LBL_CONTRACT_NUMBER', 'width' => '10%', 'name' => 'contract_number', 'studio' => 'visible', 'default' => true, ),

    其二、对其进行赋值

    重写模块的get_list_view_data方法:

    function get_list_view_data() { global $app_list_strings,$db; //get_list_view_array与get_list_view_data相同 $line_fields = $this->get_list_view_array(); if(isset($_REQUEST['popuptype']) && $_REQUEST['popuptype'] == '<特定List>'){ //获取当前 $line_fields['<自定义字段(大写)>'] = <要附的值>; } } return $line_fields; }

    后端控制

    在后台PopupView中,通过设置请求参数中的metadata,sqlClause参数控制Popup视图的调用和控制条件

    class <ModuleName>ViewPopup extends ViewPopup { function Display() { if ($_REQUEST['<Params>']!= <Value>){ $_REQUEST['metadata'] = '<Def文件名>'; //可以附加其他参数 } parent::Display(); } }

    3. 自定义筛选条件字段

    主要针对非本模块字段,对于本模块字段在searchdefs中添加即可

    几点注意: 1. 对于非数据库字段,只要在verdefs中有定义,框架仍会当成本模块字段来拼接SQL语句,除非它为空,所以一般只在popupdef中定义字段 2. 关联字段创建必须有id属性,无论是在verdef还是popupdef中 3. 对于非本模块字段的查询条件需要手动处理,追加SQL条件,常用过的有EXISTS语句 4. 对于非本模块字段在查询结果界面不会保留上次查询条件,需要查询字段的回写,即在查询结果页面保留查询条件

    1. 添加一般类型字段

    第一步 在popupdef中添加字段定义,不需要添加到verdefs中

    'contract_number' => array( 'type' => 'varchar', 'label' => 'LBL_CONTRACT_NUMBER', 'width' => '10%', 'name' => 'contract_number', ),

    第二步 在PopupView中设置处理查询参数和字段回写 处理REQUEST参数,并在页面嵌入js代码实现查询条件回写

    //字段名有advanced后缀 if(isset($_REQUEST['<字段名>']) && $_REQUEST['<字段名>'] != ''){ //对字段参数进行预处理,保存到重命名字段中,并清空原字段 $origin_value = $_REQUEST['<字段名>']; $_REQUEST['<重命名字段名>'] = $_REQUEST['<字段名>']; $_REQUEST['<字段名>'] = ''; parent::Display(); echo '<script>$("#<字段名>").val("'.origin_value .'");</script>'; }

    第三步 追加查询条件 在popupdef中根据传入参数是否为空,拼接where条件并添加到whereStatement属性中

    $condition = ""; if(isset($_REQUEST['<重命名字段名>']) && $_REQUEST['<重命名字段名>']!=""){ $condition .= " EXISTS (<SQL语句>) "; } ... 'whereStatement'=>....$condition,

    2. 添加关联字段 对于查询字段是关联字段的需要在popupdef中定义关联字段和id字段,并且组合的查询条件相比于一般字段更加复杂

    第一步 在popupdef中定义字段

    'hit_racks_s' => array ( 'name' => 'hit_racks_s', 'vname' => 'LBL_HIT_RACKS_S', 'type' => 'relate', 'default' => true, 'id_name' => 'hit_racks_id_s', 'ext2' => 'HIT_Racks', 'module' => 'HIT_Racks', 'rname' => 'name', 'quicksearch' => 'enabled', 'studio' => 'visible', 'width' => '10%' ), 'hit_racks_id_s' => array ( 'name' => 'hit_racks_id_s', 'vname' => 'LBL_HIT_RACKS_ID_S', 'type' => 'id', 'len' => 36, 'size' => '20', ),

    第二步和第三步与一般字段类似;

    3. 添加布尔值字段

    popupdef中定义:

    'has_sub_location' => array( 'type' => 'bool', 'label' => 'LBL_HAS_SUB_LOCATION', 'width' => '10%', 'default' => true, 'name' => 'has_sub_location', ),

    bool类型的查询条件在界面上以下拉列表呈现,且以“0”、“1”多为值,未选择时为空,不会加入查询条件

    3. 关于列表排序

    1. 默认排序 排序字段:在popupdef中通过“orderBy”定义 排序方式:

    //默认排序方式 asc $desc = $this->getSessionVariable($varName, $sortBy."S"); if (empty($desc)) { $desc = $defaultOrder; } $defaultOrder = $desc ? 'desc' : 'asc'; $orderByValue = $defaultOrder; //ListView的setQuery方法可设置order by if(!$allowOrderByOveride) { $this->query_orderby = $orderBy; return; } $this->getOrderBy($varName, $orderBy); ... //通过请求参数修改排序方式 http://....lvso=DESC&HAT_Assets2_HAT_ASSETS_ORDER_BY=asset_group

    注: 对于列表中有非本模块字段的,框架并不会进行排序,可以去掉排序功能,或在PopupView中进行处理

    //一种参考 <script> $(".list.view thead tr th:eq(<所在列>)").children().eq(1).hide(); $(".list.view thead tr th:eq(<所在列>)").children().eq(0).children().eq(0).attr("href","#"); </script>
    转载请注明原文地址: https://ju.6miu.com/read-664602.html

    最新回复(0)