Ver Mensaje Individual
  #5 (permalink)  
Antiguo 27/09/2022, 21:22
Avatar de detective_jd
detective_jd
 
Fecha de Ingreso: abril-2011
Ubicación: Salto
Mensajes: 437
Antigüedad: 13 años, 7 meses
Puntos: 6
Respuesta: Realizar llamada a controlador mediante AJAX

Buenas a todos, al final pude generar el listado desde ajax y hacer click en los botones de paginación realizando los siguientes cambios:

DepartamentoController.php
Código PHP:
Ver original
  1. public function obtenerTodos(){
  2.         $json = [];
  3.        
  4.         Session::set('pDep', isset($_GET['p']) ? $_GET['p'] : 1);
  5.        
  6.         if(isset($_POST['stEstado'])){
  7.             Session::set('eDep', $this->clean($_POST['stEstado']));
  8.         } else {
  9.             Session::set('eDep', Session::get('eDep'));
  10.         }
  11.        
  12.         if(isset($_POST['txtbuscador'])){
  13.             Session::set('bDep', $this->clean($_POST['txtbuscador']));
  14.         } else {
  15.             Session::set('bDep', Session::get('bDep'));
  16.         }
  17.        
  18.         $params = [
  19.             "criterio"=> "%".Session::get('bDep')."%",
  20.             "estado" => Session::get('eDep')
  21.         ];
  22.        
  23.         $tabla = (new Departamento())->find($params);
  24.        
  25.         $departamentos = $this->getPaginator()->paginar($tabla, Session::get('pDep'));
  26.         $paginador = $this->getPaginator()->getPages();
  27.        
  28.         foreach($departamentos as $dep){
  29.             array_push($json, [
  30.                 "id" => $dep->getId(),
  31.                 "nombre" => $dep->getNombre(),
  32.                 "activo" => $dep->isActivo()
  33.             ]);
  34.         }
  35.        
  36.         header("Content-Type: application/json");
  37.         echo json_encode([
  38.             "tabla" => $json,
  39.             "paginador" => $paginador
  40.         ]);
  41.     }

departamento.js
Código Javascript:
Ver original
  1. function load_data(page_number = 1){
  2.         $.ajax({
  3.             url: "index.php?c=departamentos&a=obtenerTodos",
  4.             type: "GET",
  5.             dataType: "JSON",
  6.             data: {
  7.                 txtbuscador: $("#buscador").val(),
  8.                 p: page_number
  9.             },
  10.             success: function(data) {
  11.                 var paginador = data.paginador;
  12.                 var tabla = data.tabla;
  13.                 var vTabla = '';
  14.                 var vPaginador = '';
  15.                 var i;
  16.  
  17.                 for (i = 0; i < tabla.length; i++) {
  18.                     vTabla += '<tr>' +
  19.                     '<td></td>' +
  20.                     '<td>' + tabla[i].nombre + '</td>' +
  21.                     '<td>' + (tabla[i].activo ? "Activo" : "Inactivo") + '</td>' +
  22.                     '</tr>';
  23.                 }
  24.  
  25.                 if(paginador !== null){
  26.                     vPaginador += "<div class='d-flex justify-content-center'>";
  27.                     vPaginador +="<ul class='pagination' id='pagination'>";
  28.  
  29.                     if(paginador["primero"]){
  30.                         vPaginador += "<li class='page-item'>";
  31.                         vPaginador +="<a class='page-link' id='" + paginador["primero"] +"' title='Primero'>";
  32.                         vPaginador +="<i class='fas fa-angle-double-left'>&nbsp;</i>";
  33.                         vPaginador +="</a>";
  34.                         vPaginador +="</li>";
  35.                     } else {
  36.                         vPaginador +="<li class='page-item disabled'>";
  37.                         vPaginador +="<span class ='page-link'>";
  38.                         vPaginador +="<i class='fas fa-angle-double-left'>&nbsp;</i>";
  39.                         vPaginador +="</span>";
  40.                         vPaginador +="</li>";
  41.                     }
  42.  
  43.                     if(paginador["anterior"]){
  44.                         vPaginador +="<li class='page-item'>";
  45.                         vPaginador +="<a class='page-link' id='" + paginador["anterior"] +"' title='Anterior'>";
  46.                         vPaginador +="<i class='fas fa-angle-left'>&nbsp;</i>";
  47.                         vPaginador +="</a>";
  48.                         vPaginador +="</li>";
  49.                     } else {
  50.                         vPaginador +="<li class='page-item disabled'>";
  51.                         vPaginador +="<span class='page-link'>";
  52.                         vPaginador +="<i class='fas fa-angle-left'>&nbsp;</i>";
  53.                         vPaginador +="</span>";
  54.                         vPaginador +="</li>";
  55.                     }
  56.  
  57.                     for(i = 0; i < paginador["rango"].length; i++){
  58.                         if(paginador["actual"] === paginador["rango"][i]){
  59.                             vPaginador +="<li class='page-item active'>";
  60.                             vPaginador +="<span class='page-link'>";
  61.                             vPaginador += paginador["rango"][i];
  62.                             vPaginador +="</span>";
  63.                             vPaginador +="</li>";
  64.                         } else {
  65.                             vPaginador +="<li class='page-item'>";
  66.                             vPaginador +="<a class='page-link' id='" + paginador["rango"][i]+"' class='page-link'>";
  67.                             vPaginador += paginador['rango'][i];
  68.                             vPaginador +="</a>";
  69.                             vPaginador +="</li>";
  70.                         }
  71.                     }
  72.  
  73.                     if(paginador["siguiente"]){
  74.                         vPaginador +="<li class='page-item'>";
  75.                         vPaginador +="<a class='page-link' id='" + paginador["siguiente"] +"' title='Siguiente'>";
  76.                         vPaginador +="<i class='fas fa-angle-right'>&nbsp;</i>";
  77.                         vPaginador +="</a>";
  78.                         vPaginador +="</li>";
  79.                     } else {
  80.                         vPaginador +="<li class='page-item disabled'>";
  81.                         vPaginador +="<span class='page-link'>";
  82.                         vPaginador +="<i class='fas fa-angle-right'>&nbsp;</i>";
  83.                         vPaginador +="</span>";
  84.                         vPaginador +="</li>";
  85.                     }
  86.  
  87.                     if(paginador["ultimo"]){
  88.                         vPaginador +="<li class='page-item'>";
  89.                         vPaginador +="<a class='page-link' id='" + paginador["ultimo"] +"' title='Último'>";
  90.                         vPaginador +="<i class='fas fa-angle-double-right'>&nbsp;</i>";
  91.                         vPaginador +="</a>";
  92.                         vPaginador +="</li>";
  93.                     } else {
  94.                         vPaginador +="<li class='page-item disabled'>";
  95.                         vPaginador +="<span class='page-link'>";
  96.                         vPaginador +="<i class='fas fa-angle-double-right'>&nbsp;</i>";
  97.                         vPaginador +="</span>";
  98.                         vPaginador +="</li>";
  99.                     }
  100.  
  101.                     vPaginador +="</ul>";                                
  102.                     vPaginador += "</div>";
  103.                 }
  104.  
  105.                 $('#DataResult').html(vTabla);
  106.                 $('#DataPages').html(vPaginador);
  107.             },
  108.             error: function(jqXHR, textStatus, errorThrown) {
  109.                 alert(errorThrown);
  110.             }
  111.         });
  112.     }
  113.    
  114.     $(window).on("load", function() {
  115.         load_data();
  116.     });
  117.    
  118.     $(document).on("click","#pagination a",function(e) {
  119.         e.preventDefault();
  120.         var page_id = $(this).attr("id");
  121.         load_data(page_id);
  122.     });
  123.    
  124.     [B]$("#buscador").keyup(function(e){
  125.     e.preventDefault();
  126.     load_data();
  127.     });[/B]
  128.     });

El único problema es que ahora, al realizar una búsqueda escribiendo en la caja de texto, el filtro no cambia para nada, antes de pasar a ajax, los filtros andaban bien y no sé que necesito para dejar funcional el buscador.

Espero sus respuestas y saludos
__________________
Si te interesa, visita mi perfil de Linkedin. Gracias

Última edición por detective_jd; 14/10/2022 a las 21:33