Buscador en columnas para SaldosController

GitHub commit banner

Buscador en columnas para SaldosController

El desarrollador ha añadido un buscador que permite buscar por columna en la tabla de SaldosController. Esto es especialmente útil cuando se trabajan con grandes cantidades de datos y se necesita encontrar registros específicos rápidamente.

🧠 Resumen técnico

El commit modifica el método index() de SaldosController para agregar parámetros $idEmpresaList, $idAlmacen y $idProducto. También modifica la función mdlGetProductoEmpresa en SaldosModel.php para incluir un nuevo parámetro $storagesUser. En src/Views/saldos.php, se agrega una función initComplete que permite a cada columna tener un input de búsqueda debajo del título.

📁 julio101290/boilerplateInventory

🔧 Commit  fe081db8

add search per columns

📁 Repositorio julio101290/boilerplateInventory
🔑 SHA fe081db850ba4d0e8cc02b4ce9e9f0e5c793c872
✍️ Autor Julio Cesar Leyva Rodriguez <juliocesarleyvarodriguez@hotmail.com>
🕐 Fecha 2026-09-14T17:07:32Z
📊 Cambios 3 archivo(s)  ·  +127   -75  ·  202 líneas

📂 Archivos modificados (3)

📄 src/Controllers/SaldosController.php ✏️ modificado +77 -35
🖥️ Diff — PHP
@@ -43,16 +43,16 @@ public function __construct() {
* Index
* @return type
*/
- public function index() {
+ public function index($idEmpresaList = null, $idAlmacen = null, $idProducto = null) {
helper('auth');
$idUser = user()->id;
$titulos["empresas"] = $this->empresa->mdlEmpresasPorUsuario($idUser);
$empresasID = count($titulos["empresas"]) === 0 ? [0] : array_column($titulos["empresas"], "id");
$storagesUser = $this->storagesPerUser
- ->where("idUsuario", $idUser)
- ->where("status", "on")->asArray()->findAll();
+ ->where("idUsuario", $idUser)
+ ->where("status", "on")->asArray()->findAll();
$storagesUser = count($storagesUser) === 0 ? [0] : array_column($storagesUser, "idStorage");
@@ -66,22 +66,34 @@ public function index() {
$orderColumnIndex = (int) $request->getGet('order')[0]['column'] ?? 0;
$orderDir = $request->getGet('order')[0]['dir'] ?? 'asc';
- //$fields = $this->saldos->allowedFields;
+ // Mapeo exacto de los índices de las columnas con sus campos en la BD
$fields = [
- 'id' => 'a.id',
- 'nombreAlmacen' => 'c.name',
- 'lote' => 'a.lote',
- 'codigoProducto' => 'a.codigoProducto',
- 'descripcion' => 'a.descripcion',
- 'fullname' => 'e.fullname'
+ 0 => 'a.id',
+ 1 => 'b.nombre', // nombreEmpresa
+ 2 => 'c.name', // nombreAlmacen
+ 3 => 'a.lote',
+ 4 => 'e.fullname', // fullname
+ 5 => 'a.idProducto',
+ 6 => 'a.codigoProducto',
+ 7 => 'a.descripcion',
+ 8 => 'a.cantidad',
+ 9 => 'a.created_at',
+ 10 => 'a.updated_at',
+ 11 => 'a.deleted_at'
];
- $orderField = $fields[$orderColumnIndex] ?? 'id';
+
+ $orderField = $fields[$orderColumnIndex] ?? 'a.id';
- $builder = $this->saldos->mdlGetSaldos($empresasID, $storagesUser);
+ // Usamos el método de filtros que ya tienes estructurado en el modelo
+ // Si la URL trae parámetros específicos (como cuando se usa el botón Aceptar), los pasa aquí
+ $empresaFiltro = (!empty($idEmpresaList) && $idEmpresaList != 0) ? [$idEmpresaList] : $empresasID;
+
+ $builder = $this->saldos->mdlGetSaldosFilters($empresaFiltro, $idAlmacen, $idProducto, $storagesUser);
$total = clone $builder;
$recordsTotal = $total->countAllResults(false);

… diff truncado a 60 líneas

📄 src/Models/SaldosModel.php ✏️ modificado +1 -1
🖥️ Diff — PHP
@@ -125,7 +125,7 @@ public function mdlGetSaldosFilters($idEmpresas, $idAlmacen = null, $idProducto
return $builder; // 👈 CLAVE
}
- public function mdlGetProductoEmpresa($empresas, $idProducto, $search) {
+ public function mdlGetProductoEmpresa($empresas, $idProducto, $search,$storagesUser) {
$builder = $this->db->table('products a')
->select(
📄 src/Views/saldos.php ✏️ modificado +49 -39
🖥️ Diff — PHP
@@ -84,7 +84,6 @@
<th><?= lang('saldos.fields.created_at') ?></th>
<th><?= lang('saldos.fields.updated_at') ?></th>
<th><?= lang('saldos.fields.deleted_at') ?></th>
-
<th><?= lang('saldos.fields.actions') ?></th>
</tr>
</thead>
@@ -129,12 +128,39 @@ function fncAceptar() {
method: 'GET',
dataType: "json"
},
+ initComplete: function () {
+ // Recorre cada columna para agregar un input debajo del título sin borrarlo
+ this.api().columns().every(function () {
+ var column = this;
+ var header = $(column.header());
+
+ // Omitir columna de acciones (índice 12)
+ if (column.index() === 12) {
+ return;
+ }
+
+ var title = header.text();
+ // Mantiene el texto del encabezado original y añade el campo de filtro debajo
+ header.html(`<div>${title}</div><div class="form-group mt-1 mb-0"><input type="text" class="form-control form-control-sm" placeholder="Filtrar..." /></div>`);
+
+ // Evento para capturar el valor escrito y filtrar la columna
+ $('input', column.header()).on('keyup change clear', function () {
+ if (column.search() !== this.value) {
+ column.search(this.value).draw();
+ }
+ });
+
+ // Evita conflictos de propagación al hacer clic en el input
+ $('input', column.header()).on('click', function (e) {
+ e.stopPropagation();
+ });
+ });
+ },
columnDefs: [{
- orderable: false,
- targets: [12],
- searchable: false,
- targets: [12]
- }],
+ orderable: false,
+ searchable: false,
+ targets: [12]
+ }],
columns: [{'data': 'id'},
{'data': 'nombreEmpresa'},
{'data': 'nombreAlmacen'},
@@ -157,8 +183,8 @@ function fncAceptar() {
<button class="btn btn-success btn-barcodeV3" data-id="${data.id}"><i class="fas fa-barcode"></i></button>
<button class="btn btn-primary btnEditExtra" data-toggle="modal" idSaldos="${data.id}" data-target="#modalAddExtraFields"> <i class=" fa fa-plus"></i></button>
<button class="btn btn-info btnAddEmploye" data-toggle="modal" idProducts="${data.id}" data-target="#modalProductoEmploye"> <i class=" fa fa-user"></i></button>
- </div>
- </td>`
+ </div>

… diff truncado a 60 líneas

🔗 Ver commit completo en GitHub →

⚡ César Systems — Blog técnico automatizado

📰 Noticias relacionadas (PHP)

  • Crear en mi web un apartado noticias programado en php — Elotrolado.net
    Hola eolianos, hace dos años que no utilizo php y estoy ahora mismo algo en blanco, necesito refrescarme un poco. La cosa es que he abierto una web, y queria en la pagina principal visualizar hasta 10 noticias, y tener la ultima noticia metida en la base ...
  • php: Últimas noticias, videos y fotos de php — Univision
    La semana pasada hacíamos un análisis sobre el crecimiento que el software de código abierto está teniendo dentro de Windows, y en esta oportunidad destacamos la apuesta de Microsoft al lenguaje PHP.

Comentarios

Entradas populares