[Resuelto] configurar jquery datatables en client side usando enteros en la db

Iniciado por gAb1, 11 Enero 2016, 06:37 AM

0 Miembros y 1 Visitante están viendo este tema.

gAb1

Me gustaría hacer funcionar correctamente el buscador y de paso optimizar la tabla, pasar de server side a client side. Como no tengo idea de como funciona el client side de datatables pues active la opción para scriptearlo con php.

"El problema" si es que se le puede llamar así, es que no almaceno strings en la tabla a buscar, en lugar uso enteros para trabajar y luego con php muestro los strings desde otras tablas. Entonces, actualmente estoy usando joins (unos 5) entonces si quiero buscar tiene que ser con enteros (y eso no es profesional, el cliente y los usuarios tienen que poder buscar por el nombre...).

Un simple select a la tabla de la db devolveria enteros, menos un texto largo (descripción). ¿Hay alguna manera, al usar datatables en modo clientside, de acceder a las tablas donde están los nombres asociados a los enteros? O es mejor crear un objeto manualmente con los nombres?

Así es como lo inicializo:

Código (javascript) [Seleccionar]
$('#example').DataTable( {
   processing: true,
   serverSide: true,
   lengthChange: false,
   ajax: '/get?op=2',
   language: {
       "url": "//cdn.datatables.net/plug-ins/9dcbecd42ad/i18n/Spanish.json"
   },
   columns: [
       { data: 'id' },
       { data: 'test' }
   ],
   select: true
});


¿Sería muy dificil hacer esto?

Gracias!

eLank0

Primera duda al respecto.

¿Por qué si usas 'client side' tienes activada la propiedad serverSide?

Segunda duda.

¿De dónde sacas los datos? ¿Dónde está esa tabla? Es que me da la sensación de que hablas de client side cuando realmente haces consultas aún servidor.

Salu2

gAb1

Sorry, parece que me explique mal. (Cuando digo tabla me refiero a una tabla de la base de datos)

Dije que quiero configurar datatables en modo clientside, no que lo este usando. Actualmente manejo todo en el script php y datatables simplemente recibe los datos y los muestra.

Es bastante complicado hacer funcionar el buscador de esta manera ya que cuando el script recibe la palabra del buscador lo que esta comparando son enteros y no strings.

Lo que necesito saber es:

1. Configurar datatables para que trabaje en modo cliente, pasandole la tabla entera (SELECT * FROM table) y que todo el trabajo lo soporte datatables.

2. Sustituir los enteros por los strings (de otra tabla). Digamos que la tabla principal contiene enteros y otras tablas contienen el entero como ID (primary key) y en la segunda columna el string (el nombre legible).

3. Hacer que funcione el buscador usando strings (y que datatables sea capaz de "traducir" la palabra o letras a los ids asociados).

Mi fuerte no es el javascript, por eso intento evitarlo a toda costa y cargar al servidor con todo  :-\

Edito: Aclaro la segunda pregunta.

eLank0

Tendrás que cargar previamente los datos y luego ejecutarlos en jQuery Datatables. En la web oficial tienes miles de ejemplos:

https://www.datatables.net/examples/data_sources/js_array.html

Salu2

gAb1

Vale, pero esa es la parte facil, pasarle un array con toda la info, el problema viene para sustituir los ids con los nombres. ¿Como puedo hacer esto?

Si data contiene enteros y quiero mostrar nombres... Se me ocurre crear otro array con los strings y el key como id, pero lo que no sé es como decirle a datatables que sustituya los enteros de data con los strings del otro array... Estoy mirando en los ejemplos pero no encuentro ninguno.

¿Sabes si es posible hacer esto?

Si no es posible con datatables habrá que hacerlo manualmente y pasarle el array con los nombres en lugar de los enteros. Tendré que pensar en como hacerlo, aunque primero me gustaría saber si datatables tiene esa opción.

Gracias.

Edito: Se me ocurre crear otro script php, o en el mismo que seleciona toda la tabla. Coger los nombres de las diferentes tablas y pasarlos en un array (cada entero de la principal es una tabla distinta) y luego devolver todos los arrays en uno. En el script separar los arrays y dentro de cada columna hacer que el valor de la columna sea, por ejemplo columna 2 "$strings[0][$coldata2]". Donde no estoy seguro es como sacar "$coldata2", que seria el entero de data.

La función dentro de cada columna como sería? render?

En terminar de trabajar armo el código, a ver si con tu ayuda consigo hacerlo funcionar.

gAb1

Vale ya lo he solucionado todo de la manera mas sencilla posible.

Código (javascript) [Seleccionar]
$('#example').DataTable( {
    processing: true,
    lengthChange: false,
    ajax: {
       url: '/get?op=2',
       dataSrc: ''
    },
    language: {
        "url": "//website.com/js/DataTables-Spanish.json"
    },
    columns: [
        { data: 'id' },
        { data: 'columns' }
        // more columns
    ],
    select: true
});


Lo único que habia que hacer era dejar la query completa (con todos los joins) pero quitar el where y el order by, solo coger datos sin ninguna opción más ya que todo eso lo manjea datatables.

Y el buscador también funciona ya que la información que se le pasa es la que muestra.