Hello,
when I active serverSide mode, iI get this error:
DataTables warning: table id=productos-table - Invalid JSON response. For more information about this error, please see http://datatables.net/tn/1
My editor and table code:
editor = new $.fn.dataTable.Editor( {
"ajax": "../php/mod_productos.php",
"table": "#productos-table",
"fields": [{
"label": "Titulo en español:",
"name": "dt_productos.titulo_es_ES"
}, {
"label": "Titulo en inglés:",
"name": "dt_productos.titulo_en_US"
}, {
"label": "Tienda:",
"name": "dt_productos.fk_tienda",
"dataProb": "1",
"type": "select"
}, {
"label": "Sinonimos:",
"name": "dt_rel_productos_sinonimos.fk_sino",
"type": "select"
}, {
"label": "Subsubcategoria:",
"name": "dt_rel_productos_subsubcategorias.fk_subsubcategoria",
"type": "select"
}, {
"label": "Tags:",
"name": "dt_productos.tags",
"type": "textarea"
}, {
"label": "Prioridad:",
"name": "dt_productos.prioridad"
}, {
"label": "Precio:",
"name": "dt_productos.precio"
}, {
"label": "Precio anterior:",
"name": "dt_productos.precio_ant"
}, {
"label": "Url:",
"name": "dt_productos.url"
}, {
"label": "Activo:",
"name": "dt_productos.activo",
"type": "select",
"ipOpts": [{ "label": "Si", "value": "1" },
{ "label": "No", "value": "0"}]
}, {
label: "Imagen:",
name: "dt_files[].id",
type: "uploadMany",
display: function ( fileId, counter ) {
return '<img src="'+table.file( 'dt_files', fileId ).web_path+'"/>';
},
noImageText: "No images"
}
]
} );
$('#productos-table').DataTable( {
dom: "Bfrtip",
ajax: {
url: "../php/mod_productos.php",
type: "POST"
},
serverSide: true,
columns: [
{data: "dt_productos.id_producto"},
{"data": "dt_productos.titulo_es_ES"},
{"data": "dt_productos.titulo_en_US"},
{"data": "dt_tiendas.titulo"},
{"data": "dt_sinonimos.titulo_es_ES",
defaultContent: "Sin sinonimo",
editField: "dt_rel_productos_sinonimos.fk_sino"
},
{"data": "dt_categorias_terciarias.titulo_es_ES",
defaultContent: "Sin subsubcategoria",
editField: "dt_rel_productos_subsubcategorias.fk_subsubcategoria"
},
{"data": "dt_productos.prioridad", editField: "dt_productos.prioridad"},
{"data": "dt_productos.precio", render: $.fn.dataTable.render.number(',', '.', 2, '', '€')},
{"data": "dt_productos.precio_ant", render: $.fn.dataTable.render.number(',', '.', 2, '', '€')},
{"data": "dt_productos.tags"},
{"data": "dt_productos.activo"},
{
data: "dt_files",
render: function ( file_id ) {
if (file_id.length>0) {
return file_id[0].id ? '<img src="'+table.file( 'dt_files', file_id[0].id ).web_path+'" style="width: 100px;"/>' :
'No tiene imagen';
}else{
return null;
}
},
defaultContent: "No tiene imagen",
editField: "dt_files[].id"
}
],
order: [1, 'desc'],
select: {
style: 'os',
selector: 'td:first-child'
},
buttons: [
{extend: "create", editor: editor},
{extend: "edit", editor: editor},
{extend: "remove", editor: editor}
]
} );
My PHP code:
<?php
// DataTables PHP library
include( "../../php/DataTables.php" );
// Alias Editor classes so they are easy to use
use
DataTables\Editor,
DataTables\Editor\Field,
DataTables\Editor\Format,
DataTables\Editor\Mjoin,
DataTables\Editor\Options,
DataTables\Editor\Upload,
DataTables\Editor\Validate;
// Build our Editor instance and process the data coming from _POST
Editor::inst( $db, 'dt_productos','id_producto' )
->fields(
Field::inst( 'dt_productos.id_producto' ),
Field::inst( 'dt_productos.titulo_es_ES' )->validator( 'Validate::notEmpty' ),
Field::inst( 'dt_productos.titulo_en_US' )->validator( 'Validate::notEmpty' ),
Field::inst( 'dt_productos.prioridad' ),
Field::inst( 'dt_productos.fk_tienda' )
->options( 'dt_tiendas', 'id_tienda', 'titulo' ),
Field::inst( 'dt_productos.precio' )
->validator( 'Validate::numeric' )
->setFormatter( 'Format::ifEmpty', null ),
Field::inst( 'dt_productos.precio_ant' )
->validator( 'Validate::numeric' )
->setFormatter( 'Format::ifEmpty', null ),
Field::inst( 'dt_productos.activo' )
->validator( 'Validate::numeric' ),
Field::inst( 'dt_tiendas.titulo' ),
Field::inst( 'dt_productos.tags' ),
Field::inst( 'dt_productos.url' ),
Field::inst( 'dt_rel_productos_sinonimos.fk_sino' )
->options( 'dt_sinonimos', 'id_sino', 'titulo_es_ES' ),
Field::inst( 'dt_sinonimos.titulo_es_ES' ),
Field::inst( 'dt_rel_productos_subsubcategorias.fk_subsubcategoria' )
->options( 'dt_categorias_terciarias', 'id_subsubcat', 'titulo_es_ES' ),
Field::inst( 'dt_categorias_terciarias.titulo_es_ES' )
)
->join(
Mjoin::inst( 'dt_files' )
->link( 'dt_productos.id_producto', 'dt_imagenes_productos.fk_producto' )
->link( 'dt_files.id', 'dt_imagenes_productos.fk_file' )
->fields(
Field::inst( 'id' )
->upload(Upload::inst($_SERVER['DOCUMENT_ROOT'].'/photos/products/ID.EXTN')
->db( 'dt_files', 'id', array(
'filename' => Upload::DB_FILE_NAME,
'filesize' => Upload::DB_FILE_SIZE,
'web_path' => Upload::DB_WEB_PATH,
'system_path' => Upload::DB_SYSTEM_PATH
) )
->dbClean( function ( $data ) {
// Remove the files from the file system
for ( $i=0, $ien=count($data) ; $i<$ien ; $i++ ) {
unlink( $data[$i]['system_path'] );
}
// Have Editor remove the rows from the database
return true;
} )
->validator( function ( $file ) {
return$file['size'] >= 100000 ?
"Files must be smaller than 100K" :
null;
} )
->allowedExtensions( [ 'png', 'jpg' ], "Please upload an image" )
)
)
)
->leftJoin( 'dt_rel_productos_sinonimos', 'dt_productos.id_producto', '=', 'dt_rel_productos_sinonimos.fk_producto' )
->leftJoin( 'dt_sinonimos','dt_rel_productos_sinonimos.fk_sino', '=', 'dt_sinonimos.id_sino' )
->leftJoin( 'dt_rel_productos_subsubcategorias', 'dt_productos.id_producto', '=', 'dt_rel_productos_subsubcategorias.fk_producto' )
->leftJoin( 'dt_categorias_terciarias','dt_rel_productos_subsubcategorias.fk_subsubcategoria', '=', 'dt_categorias_terciarias.id_subsubcat' )
->leftJoin( 'dt_tiendas','dt_productos.fk_tienda', '=', 'dt_tiendas.id_tienda' )
->where( 'dt_productos.activo', 1 , '=')
->on('postCreate', function ($editor, $id, $values, $row){
//thumbnails($db, $values);
/*$urlencrip = generateRandomString() . ($id * 5);
//resize(340, 440, $uploadPath, $fi);
$editor->db()->insert( 'dt_rel_productos_urls', array(
'fk_producto' => $id,
'url' => $urlencrip
));*/
})
->process( $_POST )
->json();
Thank you.