示例#1
0
文件: buscador.php 项目: 4bs4/marifa
 /**
  * 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());
 }