Cuando se requiere poner miles o cientos de miles de options en un select no es bueno ponerlos todos ya que la carga de la pagina y la pagina misma se pondría lenta
La mejor opción es ponerlo via ajax y solo muestre de 5 a 10 registros cuando se haga la busqueda, a continuación mostraremos como hacerlo, basado en el sistema de punto de venta POS 2021, usando el modelo vista controlador
Ejemplo
CREATE TABLE `unidadMedidasSAT` (
`id` bigint(20) NOT NULL,
`c_ClaveUnidad` varchar(3) DEFAULT NULL,
`Nombre` varchar(106) DEFAULT NULL,
`Descripción` varchar(551) DEFAULT NULL,
`Nota` varchar(221) DEFAULT NULL,
`Fecha de inicio de vigencia` varchar(10) DEFAULT NULL,
`Fecha de fin de vigencia` varchar(10) DEFAULT NULL,
`Símbolo` varchar(21) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Insertando datos
INSERT INTO `unidadMedidasSAT` (`id`, `c_ClaveUnidad`, `Nombre`, `Descripción`, `Nota`, `Fecha de inicio de vigencia`, `Fecha de fin de vigencia`, `Símbolo`) VALUES
(1, '18', 'Tambor de cincuenta y cinco galones (EUA)', NULL, 'Las unidades marcadas como borradas en el catálogo internacional de UNECE, serán retenidas indefinidamente en las listas de códigos. En su caso, estas unidades podrán ser reinstalado a través del proceso de mantenimiento.', '13/08/2017', NULL, NULL),
(2, '19', 'Camión cisterna', NULL, 'Las unidades marcadas como borradas en el catálogo internacional de UNECE, serán retenidas indefinidamente en las listas de códigos. En su caso, estas unidades podrán ser reinstalado a través del proceso de mantenimiento.', '13/08/2017', NULL, NULL),
(3, '26', 'Tonelada real', NULL, 'Las unidades marcadas como borradas en el catálogo internacional de UNECE, serán retenidas indefinidamente en las listas de códigos. En su caso, estas unidades podrán ser reinstalado a través del proceso de mantenimiento.', '13/08/2017', NULL, NULL),
(4, '29', 'Libra por mil pies cuadrados', NULL, 'Las unidades marcadas como borradas en el catálogo internacional de UNECE, serán retenidas indefinidamente en las listas de códigos. En su caso, estas unidades podrán ser reinstalado a través del proceso de mantenimiento.', '13/08/2017', NULL, 'Lb / kft²'),
(5, '30', 'Día de potencia de caballos por tonelada métrica de aire seco', NULL, 'Las unidades marcadas como borradas en el catálogo internacional de UNECE, serán retenidas indefinidamente en las listas de códigos. En su caso, estas unidades podrán ser reinstalado a través del proceso de mantenimiento.', '13/08/2017', NULL, NULL),
(6, '31', 'Pescar', NULL, 'Las unidades marcadas como borradas en el catálogo internacional de UNECE, serán retenidas indefinidamente en las listas de códigos. En su caso, estas unidades podrán ser reinstalado a través del proceso de mantenimiento.', '13/08/2017', NULL, NULL),
(7, '32', 'Kilogramo por tonelada métrica seca del aire', NULL, 'Las unidades marcadas como borradas en el catálogo internacional de UNECE, serán retenidas indefinidamente en las listas de códigos. En su caso, estas unidades podrán ser reinstalado a través del proceso de mantenimiento.', '13/08/2017', NULL, NULL),
(8, '36', 'Pie cúbico por minuto por pie cuadrado', 'Se requiere factor de conversión', 'Las unidades marcadas como borradas en el catálogo internacional de UNECE, serán retenidas indefinidamente en las listas de códigos. En su caso, estas unidades podrán ser reinstalado a través del proceso de mantenimiento.', '13/08/2017', NULL, 'Ft³ / (min / ft²)'),
(9, '44', 'Bolsa a granel de quinientos kilos', NULL, 'Las unidades marcadas como borradas en el catálogo internacional de UNECE, serán retenidas indefinidamente en las listas de códigos. En su caso, estas unidades podrán ser reinstalado a través del proceso de mantenimiento.', '13/08/2017', NULL, NULL),
(10, '45', 'Bolsa a granel de trescientos kilos', NULL, 'Las unidades marcadas como borradas en el catálogo internacional de UNECE, serán retenidas indefinidamente en las listas de códigos. En su caso, estas unidades podrán ser reinstalado a través del proceso de mantenimiento.', '13/08/2017', NULL, NULL),
(11, '46', 'Bolsa a granel de cincuenta libras', NULL, 'Las unidades marcadas como borradas en el catálogo internacional de UNECE, serán retenidas indefinidamente en las listas de códigos. En su caso, estas unidades podrán ser reinstalado a través del proceso de mantenimiento.', '13/08/2017', NULL, NULL);
HTML
<div class="form-group">
<span class="input-group-addon">Unidad De Medida SAT</span>
<select class="form-control input-lg nuevoUnidades select2 " id="nuevoUnidades" name="nuevoUnidades" required style="width: 100%;">
<option value="">Selecionar unidades</option>
</select>
</div>
<script src="vistas/js/productos.js"></script>
JAVASCRIPT
// TRAE EL CODIGO DE LAS UNIDADES
$('.nuevoUnidades').select2({
ajax: {
url: 'ajax/autocompletarUnidades.php',
dataType: 'json'
// Additional AJAX parameters go here; see the end of this chapter for the full code of this example
}
});
AJAX
<?php
require_once "../modelos/unidadMedidasSAT.modelo.php";
if(isset($_GET["term"])){
$buscar = "%".$_GET["term"]."%";
}else{
$buscar ="%%";
}
$datos = ModeloUnidadMedidasSAT::mdlMostrarAjax("unidadMedidasSAT", $buscar);
//echo json_encode($datos);
$jsonVariable =' { "results": [';
foreach ($datos as $key => $value) {
$jsonVariable .=' {
"id": '.$value["id"].',
"text": "'.$value["text"].'"
},';
}
$jsonVariable = substr($jsonVariable, 0, -1);
$jsonVariable .= ' ]
}';
echo $jsonVariable;
Modelo
<?php
require_once "conexion.php";
Class ModeloUnidadMedidasSAT {
/* =============================================
MOSTRAR UNIDADMEDIDASSAT
============================================= */
Static Public Function mdlMostrarAjax($tabla, $buscar) {
If ($buscar != Null) {
$stmt = Conexion:: conectar() -> prepare( "Select id
,Nombre as text
From unidadMedidasSAT a WHERE Nombre like :buscar limit 10");
$stmt -> bindParam( ":buscar" , $buscar, PDO::PARAM_STR);
Try {
$stmt -> execute();
Return $stmt -> fetchAll();
} Catch (PDOException $e) {
$arr = $stmt -> errorInfo();
$arr[3] = " Error ";
If ($e -> getMessage() == 23000) {
$mensaje = " El registro esta duplicado, Favor de checar el numero de nomina ";
Return $mensaje;
} Else {
Return $arr[2];
}
}
} Else {
$stmt = Conexion:: conectar() -> prepare("Select id
,Nombre as text
From unidadMedidasSAT a limit 10 ");
$stmt -> execute();
Return $stmt -> fetchAll();
}
$stmt -> close();
$stmt = Null;
}
}
Archivo Conexión
<?php
include_once "../configuracion.php";
include_once "../../../configuracion.php";
include_once "../../configuracion.php";
class Conexion{
static public function conectar(){
try {
$link = new PDO("mysql:host=".BD_HOST.";dbname=".BD_NOMBRE."",
BD_USUARIO,
BD_CONTRA);
}
catch (PDOException $e){
if($e->getCode()==2002){
echo '<!DOCTYPE html> <html lang="es">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="description" content="Esta Tienda está desarrollada con PrestaShop" />
<style> s ::-moz-selection {background: #b3d4fc; text-shadow: none;} ::selection {background: #b3d4fc; text-shadow: none;}
html {padding: 30px 10px; font-size: 16px; line-height: 1.4; color: #737373; background: #f0f0f0;
-webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%;} html,
input {font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;} body
{max-width:700px; _width: 700px; padding: 30px 20px 50px; border: 1px solid #b3b3b3;
border-radius: 4px;margin: 0 auto; box-shadow: 0 1px 10px #a7a7a7, inset 0 1px 0 #fff; background: #fcfcfc;}
h1 {margin: 0 10px; font-size: 50px; text-align: center;} h1 span {color: #bbb;}
h2 {color: #D35780;margin: 0 10px;font-size: 40px;text-align: center;} h2 span {color: #bbb;font-size: 80px;}
h3 {margin: 1.5em 0 0.5em;} p {margin: 1em 0;} ul {padding: 0 0 0 40px;margin: 1em 0;} .container
{max-width: 380px;_width: 480px;margin: 0 auto;} input::-moz-focus-inner {padding: 0;border: 0;} </style> </head>
<body> <div class="container"> <h2><span>500</span> Error interno del servidor</h2>
<p>¡Vaya! Algo salió mal.<br /><br />No se pudo conectar con la base de datos, revise los datos de conexion.</p>
</div>
</body>
</html>';
}
return "ERROR DE CONEXION";
}
$link->exec("set names utf8");
return $link;
}
}