Ver Mensaje Individual
  #4 (permalink)  
Antiguo 11/10/2012, 06:10
Avatar de portalmana
portalmana
 
Fecha de Ingreso: septiembre-2007
Ubicación: Montevideo-Uruguay
Mensajes: 633
Antigüedad: 17 años, 1 mes
Puntos: 80
Respuesta: Buscador php MySql

Código PHP:
Ver original
  1. <?php
  2. /**
  3.  * Clase BuscadorFullText.
  4.  * Es responsable de entregarnos el codigo de una consulta para la Base de datos
  5.  * MySQL con motor MyIsam, basandose en los Indices FullText.
  6.  * Ver http://dev.mysql.com/doc/refman/5.0/es/fulltext-search.html
  7.  * Ver http://dev.mysql.com/doc/refman/5.0/es/fulltext-fine-tuning.html
  8.  * Ver http://dev.mysql.com/doc/refman/5.0/es/information-functions.html
  9.  *
  10.  * @package     varias creado en el projecto opet
  11.  * @copyright   2011 - ObjetivoPHP
  12.  * @license     Gratuito (Free) http://www.opensource.org/licenses/gpl-license.html
  13.  * @author      Marcelo Castro (ObjetivoPHP)
  14.  * @link        [email protected]
  15.  * @version     2.3.0 (27/12/2009 - 15/05/2011)
  16.  * @since       ver uso de str_word_count( $_POST['buscar'], 1, '+-~<>');
  17.  *              para proxima version
  18.  * @since       Continua  serie BuscadorGenerico 4.4.6 del 21/05/2007.
  19.  */
  20. class BuscadorFullText
  21. {
  22.     /**
  23.      * Contiene la cadena de busqueda, generalmente su contenido se correlaciona
  24.      * con un campo en el formulario de busqueda.
  25.      * @var string
  26.      */
  27.     private $_textoDeBusqueda;
  28.  
  29.     /**
  30.      * Contiene la tabla de la base en la cual se realizara la consulta.
  31.      * @var string
  32.      */
  33.     private $_tablaMysql;
  34.  
  35.     /**
  36.      * Coleccion de campos que se retornaran como resultado.
  37.      * @var array
  38.      */
  39.     private $_colCamposResultado = array();
  40.  
  41.     /**
  42.      * Coleccion de campos que se utilizan para la busqueda de tipo fulltext.
  43.      * @var array
  44.      */
  45.     private $_colCamposFullText = array();
  46.  
  47.     /**
  48.      * Coleccion de parametros adiccionales a incluirle a la consulta.
  49.      * Todos se añaden con tipo AND.
  50.      * @var array
  51.      */
  52.     private $_colParametros = array();
  53.  
  54.     /**
  55.      * Contiene el tipo de consulta que se realizo.
  56.      * @var string
  57.      */
  58.     private $_tipoConsulta = 'FULLTEXT';
  59.  
  60.     /**
  61.      * Configura si utiliza SQL_CALC_FOUND_ROWS en la consulta mysql para luego extraer la
  62.      * cantidad de resultados con limit.
  63.      * @var boolean
  64.      */
  65.     private $_SQL_CALC_FOUND_ROWS = true;
  66.  
  67.     /**
  68.      * Contiene el metodo de envio del Formulario.
  69.      * Utilizado en los metodos getValue y addParametros.
  70.      * @var string
  71.      */
  72.     private $_metodoEnvio = 'POST';
  73.  
  74.     /**
  75.      * Contiene los operadores para parametros variables permitidos.
  76.      * @var array
  77.      */
  78.     private static $_operadores = array('=', '<=>', '<>', '!=', '<=', '<',
  79.                                         '>', 'IS', 'IS NOT', 'IS NULL',
  80.                                         'IS NOT NULL');
  81.  
  82.     /**
  83.      * Configura si la palabra se toma en cuenta una vez, o cada vez que aparece.
  84.      * Por defecto cada vez que aparece se toma en cuenta.
  85.      * @var boolean
  86.      */
  87.     private $_sumarUnaVez = false;
  88.  
  89.    
  90.     private $_filtrarPalabras = array();
  91.    
  92.     /**
  93.      * Metodo __construct.
  94.      * Crea un objeto BuscadorFullText
  95.      * @param   string  $buscar Cadena de busqueda puede contener +-~><
  96.      * @param   string  $tabla  Nombre de la Tabla MySQL a usar en la consulta.
  97.      * @return  void
  98.      */
  99.     public function  __construct($buscar, $tabla)
  100.     {
  101.         $this->_textoDeBusqueda = addslashes($buscar);
  102.         $this->_tablaMysql      = addslashes($tabla);
  103.     }
  104.  
  105.     /**
  106.      * Metodo addCamposResultado.
  107.      * Ingresa los campos que se usaran como resultado de la consulta.
  108.      * @param   string/array  $campo Contiene el o los nombres de los campos.
  109.      * @return  void
  110.      */
  111.     public function addCamposResultado($campo)
  112.     {
  113.         if (is_string($campo)) {
  114.             $campo  = explode(',', $campo);
  115.         }
  116.         if (is_array($campo)) {
  117.             foreach ($campo as $valor) {
  118.                 $this->_colCamposResultado[] = $valor;
  119.             }
  120.         }
  121.     }
  122.    
  123.     /**
  124.      * Metodo addFiltro.
  125.      * Agrega palabras que seran eliminados de la consulta de busqueda.
  126.      * @param   array   Contiene las palabras a eliminar.
  127.      * @return  void
  128.      */
  129.     public function addFiltro(array $filtrar)
  130.     {
  131.         if (!is_array($filtrar)) {
  132.             return false;
  133.         }
  134.         // Si es un arreglo lo dejo preparado.
  135.         foreach($filtrar as $palabra) {
  136.             $palabra    = '/[\w]*(\s' . $palabra . '\*)[\w]*/';
  137.             $this->_filtrarPalabras[] = $palabra;
  138.         }
  139.     }
  140.  
  141.     /**
  142.      * Metodo limitarLargo.
  143.      * Limita el largo de un campo a un determinado numero de caracteres.
  144.      * @version 2.1.0 (21/11/2010)
  145.      * @param   string  $campo      nombre de campo.
  146.      * @param   integer $caracteres Cantidad de caracteres que retornara la consulta.
  147.      * @return  void
  148.      */
  149.     public function limitarLargo($campo, $caracteres)
  150.     {
  151.         $clave  = array_search($campo, $this->_colCamposResultado);
  152.         if ($clave !== false) {
  153.             $caracteres = ($caracteres > 0)? $caracteres : 250;
  154.             $this->_colCamposResultado[$clave] = 'LEFT(`' . $campo . '`, ' .$caracteres . ') as ' . $campo;
  155.         }
  156.     }
  157.  
  158.     /**
  159.      * Metodo addCamposFullText.
  160.      * Ingresa los campos que se usaran para la consulta.
  161.      * @param   string/array  $campo Contiene el o los nombres de los campos.
  162.      * @return  void
  163.      */
  164.     public function addCamposFullText($campo)
  165.     {
  166.         if (is_string($campo)) {
  167.             $campo  = explode(',', $campo);
  168.         }
  169.         if (is_array($campo)) {
  170.             foreach ($campo as $valor) {
  171.                 $this->_colCamposFullText[] = $valor;
  172.             }
  173.         }
  174.     }
  175.  
  176.     /**
  177.      * Metodo addParametrosVariables.
  178.      * Inserta un parametro a la consulta.
  179.      * @param   string  $campo      Nombre del campo en el formulario de consulta, debe
  180.      *                              coincidir con el de la base de datos.
  181.      * @param   string  $operador   operador de consulta = > < etc.
  182.      * @return  void
  183.      */
  184.     public function addParametrosVariables($campo, $operador)
  185.     {
  186.         $valor      = ($this->_metodoEnvio == 'POST')? $_POST[$campo] : $_GET[$campo];
  187.         if (!in_array($operador, self::$_operadores)) {
  188.             trigger_error('Operador de Consulta no valido en Metodo ' . __METHOD__, E_USER_ERROR);
  189.         }
  190.         $parametro  = $campo . ' ' . $operador . " '" . addslashes($valor) . "'";
  191.         $this->_colParametros[] = $parametro;
  192.     }
  193.  
  194.     /**
  195.      * Metodo addParametrosFijos.
  196.      * Agrega parametros fijos en la consulta.
  197.      * @param   string  $parametros parametro tipo campo='valor'
  198.      * @return  void
  199.      */
  200.     public function addParametrosFijos($parametros)
  201.     {
  202.         $this->_colParametros[] = $parametros;
  203.     }
  204.  
  205.     /**
  206.      * Metodo setSqlCalcFoundRows.
  207.      * Configura si debe ponerse en la consulta MySQL la clausula SQL_CALC_FOUND_ROWS.
  208.      * @param   boolean $boolean    true por si, false por no.
  209.      * @return  void
  210.      */
  211.     public function setSqlCalcFoundRows($boolean)
  212.     {
  213.         $this->_SQL_CALC_FOUND_ROWS = ($boolean)? true:false;
  214.     }
  215.  
  216.     /**
  217.      * Metodo setMetodoEnvio.
  218.      * Configura por que metodo se envia el formulario (GET, POST).
  219.      * @param   string  $metodo Metodo a utilizarce para levantar las variables
  220.      *                          del formulario.
  221.      * @return  void
  222.      */
  223.     public function setMetodoEnvio($metodo = 'POST')
  224.     {
  225.         ($metodo == 'GET')? $this->_metodoEnvio = 'GET' : $this->_metodoEnvio = 'POST';
  226.     }
  227.  
  228.     /**
  229.      * Metodo getValue.
  230.      * Retorna una cadena que se puede colocar dentro del value de un campo
  231.      * de busqueda.
  232.      * @param   string  $campo  Nombre del campo que se debe levantar.
  233.      * @param   string  $metodo metodo POST o GET. Por defecto POST.
  234.      * @return  string  Cadena tipo value.
  235.      */
  236.     public function getValue($campo)
  237.     {
  238.         $valor  = ($this->_metodoEnvio == 'POST')? $_POST[$campo] : $_GET[$campo];
  239.         return stripslashes(str_replace('"', "'", $valor));
  240.     }
  241.  
  242.     /**
  243.      * Configura si se desea tomar una palabra con incidencia igual 1 por mas que
  244.      * se repita (true), o si la palabra incide cada vez que aparece (false)
  245.      * @param boolean $cont
  246.      */
  247.     public function setContarUnaVez($cont = false)
  248.     {
  249.         $this->_sumarUnaVez = $cont ? true : false;
  250.     }
__________________
"La imaginación es más importante que el conocimiento. El conocimiento es limitado, mientras que la imaginación no" -- A.Einstein
objetivophp.com,twitter.com/objetivophp