diff --git a/module/search/control.php b/module/search/control.php index d52d3d9feb..13a6463962 100644 --- a/module/search/control.php +++ b/module/search/control.php @@ -34,9 +34,21 @@ class search extends control $module = empty($module) ? $this->session->searchParams['module'] : $module; $searchParams = $module . 'searchParams'; $searchForm = $module . 'Form'; + $funcName = $_SESSION[$searchParams]['funcName'] ?? ''; + $funcArgs = $_SESSION[$searchParams]['funcArgs'] ?? []; - $fields = empty($fields) ? json_decode($_SESSION[$searchParams]['searchFields'], true) : $fields; - $params = empty($params) ? json_decode($_SESSION[$searchParams]['fieldParams'], true) : $params; + if($funcName) + { + $funcArgs[] = true; // 处理选项列表。 + $this->loadModel($module)->$funcName(...$funcArgs); + $fields = empty($fields) ? $this->config->$module->search['fields'] : $fields; + $params = empty($params) ? $this->config->$module->search['params'] : $params; + } + else + { + $fields = empty($fields) ? json_decode($_SESSION[$searchParams]['searchFields'], true) : $fields; + $params = empty($params) ? json_decode($_SESSION[$searchParams]['fieldParams'], true) : $params; + } $_SESSION['searchParams']['module'] = $module; if(empty($_SESSION[$searchForm])) $this->search->initSession($module, $fields, $params); @@ -82,9 +94,21 @@ class search extends control $module = empty($module) ? $this->session->searchParams['module'] : $module; $searchParams = $module . 'searchParams'; $searchForm = $module . 'Form'; + $funcName = $_SESSION[$searchParams]['funcName'] ?? ''; + $funcArgs = $_SESSION[$searchParams]['funcArgs'] ?? []; - $fields = empty($fields) ? json_decode($_SESSION[$searchParams]['searchFields'], true) : $fields; - $params = empty($params) ? json_decode($_SESSION[$searchParams]['fieldParams'], true) : $params; + if($funcName) + { + $funcArgs[] = true; // 处理选项列表。 + $this->loadModel($module)->$funcName(...$funcArgs); + $fields = empty($fields) ? $this->config->$module->search['fields'] : $fields; + $params = empty($params) ? $this->config->$module->search['params'] : $params; + } + else + { + $fields = empty($fields) ? json_decode($_SESSION[$searchParams]['searchFields'], true) : $fields; + $params = empty($params) ? json_decode($_SESSION[$searchParams]['fieldParams'], true) : $params; + } $_SESSION['searchParams']['module'] = $module; if(empty($_SESSION[$searchForm])) $this->search->initOldSession($module, $fields, $params); diff --git a/module/search/model.php b/module/search/model.php index 796032ccb0..83539f10c7 100644 --- a/module/search/model.php +++ b/module/search/model.php @@ -28,13 +28,26 @@ class searchModel extends model if($this->config->edition != 'open') $searchConfig = $this->searchTao->processBuildinFields($module, $searchConfig); - $searchParams['module'] = $searchConfig['module']; - $searchParams['searchFields'] = json_encode($searchConfig['fields']); - $searchParams['fieldParams'] = json_encode($searchConfig['params']); - $searchParams['actionURL'] = $searchConfig['actionURL']; - $searchParams['style'] = zget($searchConfig, 'style', 'full'); - $searchParams['onMenuBar'] = zget($searchConfig, 'onMenuBar', 'no'); - $searchParams['queryID'] = isset($searchConfig['queryID']) ? $searchConfig['queryID'] : 0; + $searchParams['module'] = $searchConfig['module']; + $searchParams['actionURL'] = $searchConfig['actionURL']; + $searchParams['style'] = zget($searchConfig, 'style', 'full'); + $searchParams['onMenuBar'] = zget($searchConfig, 'onMenuBar', 'no'); + $searchParams['queryID'] = isset($searchConfig['queryID']) ? $searchConfig['queryID'] : 0; + + $funcArgs = func_get_args(); + $funcName = $funcArgs[1] ?? ''; + unset($funcArgs[0], $funcArgs[1]); + + if($funcName) + { + $searchParams['funcName'] = $funcName; + $searchParams['funcArgs'] = $funcArgs; + } + else + { + $searchParams['searchFields'] = json_encode($searchConfig['fields']); + $searchParams['fieldParams'] = json_encode($searchConfig['params']); + } $this->session->set($module . 'searchParams', $searchParams); } @@ -97,11 +110,23 @@ class searchModel extends model /* Init vars. */ $module = $this->post->module; $searchParams = $module . 'searchParams'; - $searchFields = json_decode($_SESSION[$searchParams]['searchFields']); - $fieldParams = json_decode($_SESSION[$searchParams]['fieldParams']); $groupItems = $this->config->search->groupItems; $groupAndOr = strtoupper($this->post->groupAndOr); if($groupAndOr != 'AND' && $groupAndOr != 'OR') $groupAndOr = 'AND'; + $funcName = $_SESSION[$searchParams]['funcName'] ?? ''; + $funcArgs = $_SESSION[$searchParams]['funcArgs'] ?? []; + if($funcName) + { + $funcArgs[] = true; // 处理选项列表。 + $this->loadModel($module)->$funcName(...$funcArgs); + $searchFields = json_decode(json_encode($this->config->$module->search['fields'])); + $fieldParams = json_decode(json_encode($this->config->$module->search['params'])); + } + else + { + $searchFields = json_decode($_SESSION[$searchParams]['searchFields']); + $fieldParams = json_decode($_SESSION[$searchParams]['fieldParams']); + } $queryForm = $this->searchTao->initSession($module, $searchFields, $fieldParams);