/* @var $buscador common\models\forms\BuscadorForm */ use yii\helpers\Url; use yii\helpers\Html; use yii\widgets\ActiveForm; use common\models\Provincias; use common\models\Referencias; use common\models\forms\BuscadorForm; use common\components\MetodosHelper; $buscador = empty($buscador) ? new BuscadorForm() : $buscador; $provincias = new Provincias(); $referencias = new Referencias(); $accion = Yii::$app->controller->action->id; $comodin = $accion == 'index' ? '' : 'anuncios'; $parametros = !empty(Yii::$app->request->queryParams) ? Yii::$app->request->queryParams : ['articulo' => '', 'provincia' => Provincias::TODA_REP_DOM]; $provincia = !empty($parametros['provincia']) ? $parametros['provincia'] : Provincias::TODA_REP_DOM; $articulo = !empty($parametros['articulo']) ? MetodosHelper::dividir_texto(ucfirst($parametros['articulo']), '-', false, ' ') : ''; ?> <div class="block-search"> <?php $form = ActiveForm::begin(['id' => 'buscador-articulos-form', 'action' => 'buscador', 'options' => ['class' => 'form-inline']]); ?> <?php echo Html::activeHiddenInput($buscador, 'referencia', ['class' => 'buscador-referencia']); ?> <?php echo Html::activeHiddenInput($buscador, 'provincia', ['class' => 'buscador-lugar']); ?> <div class="form-group input-serach">
/** * Obtiene el detalle de un articulo por slug y municipio * @param $municipio * @param $articulo * @return array|null|ActiveRecord */ public static function obtenerArticulosEnProvincia($articulo, $provincia) { $array = MetodosHelper::dividir_texto($articulo, '-', true); $like = ''; foreach ($array as $palabra) { $like .= "lower(articulos.nombre) like '%" . $palabra . "%'\n or articulos.slug like '%" . $palabra . "%' or "; } //busqueda general if ($articulo == self::ANUNCIOS && $provincia == Provincias::TODA_REP_DOM) { return Articulos::find()->all(); } else { if ($articulo == self::ANUNCIOS && $provincia != Provincias::TODA_REP_DOM) { return Articulos::find()->joinWith(['categorias', 'usuarios.municipios.provincias'])->leftJoin('referencias', 'articulos.referencia = referencias.idreferencia')->where('provincias.slug = :provincia', [':provincia' => $provincia])->all(); } } //busqueda especifica if ($provincia == Provincias::TODA_REP_DOM) { return Articulos::find()->leftJoin('referencias', 'articulos.referencia = referencias.idreferencia')->where($like . ' articulos.slug like :articulo or referencias.slug like :articulo', [':articulo' => '%' . $articulo . '%'])->all(); } return Articulos::find()->joinWith(['categorias', 'usuarios.municipios.provincias'])->leftJoin('referencias', 'articulos.referencia = referencias.idreferencia')->where($like . ' articulos.slug like :articulo or referencias.slug like :articulo', [':articulo' => '%' . $articulo . '%'])->andWhere('provincias.slug = :provincia', [':provincia' => $provincia])->all(); // $debug = $articulos->prepare(Yii::$app->db->queryBuilder)->createCommand()->rawSql; // echo '<pre>';print_r([$articulo, $provincia, $debug]);die(); // echo '<pre>';print_r([$articulo, $provincia, count($articulos), $articulos]);die(); }
/** * 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; }