¡No Quiero Programar! PHP, CodeIgniter y otros frameworks!

30jun/089

Gestor de noticias (Sexta parte): Crear un buscador

Aprovechando la aplicación que estamos creando del Gestor de Noticias, voy a intentar satisfacer algunas peticiones de algunos usuarios que me preguntan cómo hacer un buscador en CodeIgniter (aunque en PHP es lo mismo ya que para esto apenas uso nada de CodeIgniter).

Antes de empezar la explicación aclarar que lo que lo que estoy haciendo es un buscador muy simple y funcional, el hacer un buscador tiene muchos caminos y complicaciones extras pero no entraré en ello, al menos hoy, así que si estáis buscando cómo hacer un buscador completo y complejo este no es vuestro articulo, aquí vamos a tratarlo desde un punto de vista de iniciación.

Primero de todo necesitaremos crear unos índices FULLTEXT en nuestra base de datos para que podamos realizar bien la búsqueda con la sintaxis MATCH...AGAINST, para ello lo haremos con este código SQL:

ALTER TABLE `noticias` ADD FULLTEXT(`titulo`, `cuerpo`);

O si lo tenéis en PHPMyAdmin simplemente seleccionar los campos donde queráis hacer la búsqueda y marcarlo como Texto Completo (Full Text) que es un icono con una T.

Luego necesitaremos crear un pequeño formulario que contendrá el campo de texto donde añadiremos nuestra consulta.

<form action="index.php/noticias/buscar" method="post"><input type="text" name="buscar" /></form>

Esto llamará a nuestro controlador noticias, en la función buscar:

	function buscar()
	{
		$palabras = $_POST['buscar'];
		if(empty($palabras))
		{
			redirect('noticias/index/error_buscar');
		}
		else
		{
			$variables['query'] = $this->db->query("SELECT *, MATCH(`titulo`, `cuerpo`) AGAINST ('$palabras') AS `puntos` FROM `noticias` WHERE MATCH(`titulo`, `cuerpo`) AGAINST ('$palabras') ORDER BY `puntos` DESC");
			$this->load->view('cabecera');
			$this->load->view('noticias/buscar', $variables);
			$this->load->view('pie');
		}
	}

El código es bastante sencillo, solo es algo compleja la consulta a la base de datos. Con esto lo que estamos haciendo es buscar en los campos título y cuerpo, la búsqueda de las palabras que hemos recogido en el $_POST. Luego todo esto lo ordenamos según la puntuación (es decir cuantas más palabras encajen más puntuación tendrá).

Finalmente todo esto lo mostraremos con nuestra vista:

<p>Resultados de la b&uacute;squeda '<strong>< ?=$_POST['buscar']?></strong>':</p>
< ?php if($query->num_rows()>0): ?>
	< ?php foreach($query->result() as $row): ?>
    	<h2>< ?=$row->titulo?> (puntuaci&oacute;n: < ?=round($row->puntos, 2)?>)</h2>
        <p>< ?=$row->cuerpo?></p>
        <hr />
    < ?php endforeach; ?>
< ?php endif; ?>

Y eso es todo, podéis ver la DEMO aquí mismo.

¿Te gustó este artículo?

¡Suscríbete a nuestro feed RSS!

Comentarios (9) Trackbacks (0)
  1. hola. muy buenos los tutoriales que has elaborado, pero tengo un duda: se podría decir que está diseñado bajo un patron VC y no MVC, ya que no utilizaste models para comunicarte con la base de datos. tienes la intension de modificar la aplicacion para que sea MVC?

    saludos
    y muchas gracias,

  2. Intentaré en futuros artículos usar los modelos para dar algún ejemplo de utilización. No voy a cambiar este articulo para añadir Modelos ya que en parte, a mi ver, CodeIgniter es muy versátil en ese tema y te permite no tener que usar los modelos si no quieres o no te convienen, como en este caso.

  3. muy buenos tutoriales para comenzar con codeigniter…

    lo único malo es que los demos no están funcionales

    gracias

  4. Hola que tal.
    Te queria felicitar por tu iniciativa de compartir lo que sabes con los demas.
    Hace un tiempo tuve un timido acercamiento con codeigniter. Crees que este framework sea adecuado para sistemas de mediana a gran envergadura?
    Me interesaria poder mirar un sitio que estoy haciendo (esporadicamente desde hace 3 años jaja) a codeigniter.

    Saludos. segui asi que realmente esto sirve a muchos.
    Saludos.

  5. Yo creo que si puedes adaptarlo a una web de gran envergadura, puesto que la gracia de CI (entre otras) esque es muy rápido y consume muchos recursos. Pero también ten en cuenta que tendrás que crear nuevas clases o modificar librerías para hacer que sea mucho mas seguro, y mucho mas adaptado a tus necesidades.

  6. Muy bueno!! felicidades, lástima que no se pueden ver los demos y que algunos archivos del tutoria ya no se pueden descargar.

  7. Muy bueno che, gracias

  8. Disculpa ya replique el codigo y no me manda ningun contenido solo me manda el valor del post pero ninguna busqueda ya intente introduciendo todos los contenidos de mis tablas. Alguna Idea

    Gracias por tu ayuda

  9. Buenas, te recomiendo que te pases por el foro y podemos hablar mejor de tu problema :)

    http://foro.noquieroprogramar.com/


Leave a comment

(required)

Aún no hay trackbacks.