/** * Buscamos un elemento. * @param string $query Cadena a buscar. * @param int $pagina Numero de página a mostrar. * @param string $categoria Nombre de la categoria a utilizar. * @param string $usuario Nombre del usuario a utilizar. * @return mixed */ public function action_q($query, $pagina, $categoria, $usuario) { // Verificamos si es POST y redireccionamos. if (Request::method() == 'POST') { // Query. $q = isset($_POST['q']) ? urlencode($_POST['q']) : ''; // Categoria. $c = isset($_POST['categoria']) ? urlencode($_POST['categoria']) : ''; // Usuario $u = isset($_POST['usuario']) ? urlencode($_POST['usuario']) : ''; if (!empty($u)) { $url = sprintf('/buscador/q/%s/1/%s/%s', $q, $c, $u); } elseif (!empty($c)) { $url = sprintf('/buscador/q/%s/1/%s', $q, $c); } else { $url = sprintf('/buscador/q/%s', $q); } Request::redirect($url); } // Limpiamos la consulta. $query = preg_replace('/\\s+/', ' ', urldecode(trim($query))); // Limpiamos la categoria. $categoria = urldecode(trim($categoria)); if ($categoria !== 'todos') { // Cargamos la categoria. $model_categoria = new Model_Categoria(); if ($model_categoria->existe_seo($categoria)) { $model_categoria->load_by_seo($categoria); } else { unset($model_categoria); } } unset($categoria); // Limpiamos nombre de usuario. $usuario = urldecode(trim($usuario)); // Cargamos el usuario. $model_usuario = new Model_Usuario(); if ($model_usuario->exists_nick($usuario)) { $model_usuario->load_by_nick($usuario); } else { unset($model_usuario); } unset($usuario); // Cargamos la vista. $vista = View::factory('buscador/index'); // Verificamos si hay consulta. if (!empty($query)) { // Cantidad de elementos por pagina. $model_configuracion = new Model_Configuracion(); $cantidad_por_pagina = $model_configuracion->get('elementos_pagina', 20); // Formato de la página. $pagina = (int) $pagina > 0 ? (int) $pagina : 1; // Realizamos la busqueda. $model_post = new Model_Post(); list($listado, $cantidad) = $model_post->buscar($query, $pagina, $cantidad_por_pagina, isset($model_categoria) ? $model_categoria->id : NULL, isset($model_usuario) ? $model_usuario->id : NULL); // Verifivo que la página seleccionada sea válida. if (count($listado) == 0 && $pagina != 1) { Request::redirect(sprintf('/buscador/q/%s/1/%s/%s', $query, isset($model_categoria) ? $model_categoria->seo : '', isset($model_usuario) ? $model_usuario->id : '')); } // Paginación. $paginador = new Paginator($cantidad, $cantidad_por_pagina); $vista->assign('paginacion', $paginador->get_view($pagina, "/buscador/q/{$query}/%s/" . (isset($model_categoria) ? $model_categoria->seo : '') . '/' . (isset($model_usuario) ? $model_usuario->id : ''))); unset($paginador); $vista->assign('total', $cantidad); // Procesamos listado de post. foreach ($listado as $k => $v) { $a = $v->as_array(); $a['usuario'] = $v->usuario()->as_array(); $a['puntos'] = $v->puntos(); $a['comentarios'] = $v->cantidad_comentarios(); $a['categoria'] = $v->categoria()->as_array(); $listado[$k] = $a; } $vista->assign('resultados', $listado); unset($listado); } // Armamos la vista. $vista->assign('q', $query); // Listado de categorias. $mc = new Model_Categoria(); $vista->assign('categorias', $mc->lista()); unset($mc); $vista->assign('categoria', isset($model_categoria) ? $model_categoria->seo : 'todos'); // Usuario actual. $vista->assign('usuario', isset($model_usuario) ? $model_usuario->nick : ''); // Menu. $this->template->assign('master_bar', parent::base_menu('posts')); $this->template->assign('top_bar', Controller_Home::submenu('buscador')); // Asignamos la vista. $this->template->assign('contenido', $vista->parse()); }