/** * @param $pa * @return mixed */ public function run($pa) { $buscador = new Buscador(); $rows = $buscador->obtenerProvinciasIndexadas($pa); $data = ['pa' => $pa]; $sugerencias = []; foreach ($rows as $art) { $sugerencias[] = ['id' => $art['id'], 'nombre' => $art['lugar'], 'slug' => $art['slug']]; } $data['suggestions'] = $sugerencias; Yii::$app->response->format = Response::FORMAT_JSON; return $rows; }
/** * @param $ca * @return mixed */ public function run($ca) { $buscador = new Buscador(); $rows = $buscador->obtenerResultadosIndexados($ca); $data = ['ca' => $ca]; $sugerencias = []; foreach ($rows as $art) { $sugerencias[] = ['id' => $art['id'], 'nombre' => $art['nombre'], 'slug' => $art['slug'], 'categoria' => $art['categoria']]; } $data['suggestions'] = $sugerencias; Yii::$app->response->format = Response::FORMAT_JSON; return $rows; }
/** * Obtiene id referencias indexadas por match * @param $string * @return mixed */ public function obtenerIdsResultadosIndexados($string) { $sIndex = Buscador::indexName(); $sql = "SELECT id FROM {$sIndex} WHERE " . "MATCH('(^{$string}*) | (*{$string}*)') LIMIT 0, 7"; return Yii::$app->sphinx->createCommand($sql)->queryAll(); }
/** * Busca articulos en base a articulo y categoria * @param array $params * @return ActiveDataProvider */ public function buscadorArticuloProvincia($params, $page_size = 18, $pagina = 0) { $query = Articulos::find(); $dataProvider = new ActiveDataProvider(['query' => $query, 'pagination' => ['page' => $pagina, 'pageSize' => $page_size, 'pageParam' => 'p', 'pageSizeParam' => 'pp', 'defaultPageSize' => '18', 'pageSizeLimit' => [1, 50]], 'sort' => ['defaultOrder' => ['fechacreado' => SORT_DESC]]]); $this->load($params); $query->leftJoin('categorias', 'categorias.idcategoria = articulos.categoria'); $query->leftJoin('usuarios', 'usuarios.idusuario = articulos.usuario'); $query->leftJoin('municipios', 'municipios.idmunicipio = usuarios.municipio'); $query->leftJoin('provincias', 'provincias.idprovincia = municipios.provincia'); $query->leftJoin('referencias', 'articulos.referencia = referencias.idreferencia'); if (!$this->validate()) { // uncomment the following line if you do not want to return any records when validation fails // $query->where('0=1'); return $dataProvider; } //busqueda especifica if (strcmp($this->na, self::ANUNCIOS) !== 0) { $array = MetodosHelper::dividir_texto($this->na, '-', true); foreach ($array as $palabra) { $query->orWhere(['like', 'articulos.nombre', $palabra]); $query->orWhere(['like', 'articulos.slug', $palabra]); $query->orWhere(['like', 'referencias.slug', $palabra]); $buscador = new Buscador(); $ids = $buscador->obtenerIdsResultadosIndexados($palabra); $query->orWhere(['in', 'articulos.referencia', $ids]); } } if (!empty($this->ps) && $this->ps != Provincias::TODA_REP_DOM) { $query->andwhere('provincias.slug = :provincia', [':provincia' => $this->ps]); } return $dataProvider; }