public function actionSearch() { $userQuery = mb_strtolower($_GET["query"]); $params = array("_is_main_" => 1); /** * Получаем доп. параметры */ if (array_key_exists("params", $_GET)) { foreach ($_GET["params"] as $key => $value) { if ($key == "__task") { $key = "_tasks_"; } $params[$key] = $value; } } $result = array(); /** * Выполняем поиск */ $resultObj = CSolr::search($userQuery, $params); $docs = $resultObj->getDocuments(); /** * В зависимости от класса модели берем данные только * из полей, которые описаны в метаданных модели */ if (is_array($docs)) { foreach ($docs as $doc) { if (property_exists($doc, "_class_")) { $class = $doc->_class_; /** * Получаем модель по наименованию */ $model = CCoreObjectsManager::getCoreModel($class); if (!is_null($model)) { foreach ($model->fields->getItems() as $field) { if (property_exists($doc, $field->field_name)) { $fieldName = $field->field_name; $fieldValue = mb_strtolower($doc->{$fieldName}); if (mb_strpos($fieldValue, $userQuery) !== false) { $result[] = array("field" => $fieldName, "value" => $doc->{$fieldName}, "class" => $doc->_class_, "label" => $doc->{$fieldName}); } } } } } } } /** * Если определена задача, то попробуем поискать * и в связанных с ее моделями */ if (array_key_exists("_tasks_", $params)) { foreach (CCoreObjectsManager::getModelsByTask($params["_tasks_"])->getItems() as $coreModel) { $newParams = array("_is_main_" => "0", "_parent_class_" => $coreModel->class_name); $docs = CSolr::search($userQuery, $newParams); if (is_array($docs)) { foreach ($docs as $doc) { if (property_exists($doc, "_class_")) { $class = $doc->_class_; /** * Получаем модель по наименованию */ $model = CCoreObjectsManager::getCoreModel($class); if (!is_null($model)) { foreach ($model->fields->getItems() as $field) { if (property_exists($doc, $field->field_name)) { $fieldName = $field->field_name; $fieldValue = strtolower($doc->{$fieldName}); if (mb_strpos($fieldValue, $userQuery) !== false) { $result[] = array("field" => $doc->_parent_field_, "value" => $doc->_doc_id_, "class" => $doc->_parent_class_, "label" => $doc->{$fieldName}); } } } } } } } } } echo json_encode($result); }