Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá prezados,
Alguém poderia me ajudar com server side no datatable com php?
Eu já procurei em vários locais na web, encontrei alguns tutoriais, mais nenhum serviu para a minha aplicação, se alguém quiser dados para acessar o meu sistema para tentar poder me ajudar eu agradeço.
http://admin.efraiminformatica.com.br
usuario: convidado
senha: nameiswhat
No menu filmes em listar, eu tenho uma listagem da tabelas de banco de dados com mais de 3 mil registros, e o mesmo trava quando eu acesso este módulo de listagem, já tentei instalar os códigos que encontrei na internet, mais não consegui funcionar, utilizo uma estrutura de links em query string avançado, preciso fazer esta aplicação funcionar posso colocar aqui também os códigos, segue:
esta é a index.php da pasta filmes da minha view. Notem que pra resolver o problema de travamento eu coloque um limite de 50. Mais está listando apenas 50, quero os mais de 3 mil.
<table id="datatable" class="table table-striped table-bordered bootstrap-datatable datatable">
<thead>
<tr class=\"warning\">
<th>TOMBO</th>
<th>T�TULO ORIGINAL</th>
<th>T�TULO NACIONAL</th>
<th>ANO</th>
<th>DIREçãO</th>
<th>Aç�ES/LISTAGEM</th>
</tr>
</thead>
<tbody>
<?php
$base = BASE;
$empty = filter_input(INPUT_GET, 'empty', FILTER_VALIDATE_BOOLEAN);
if ($empty):
WLMsg("Oppsss: Você tentou editar um módulo que não existe no sistema!", WS_INFOR);
endif;
$action = filter_input(INPUT_GET, 'action', FILTER_DEFAULT);
if ($action):
$filmAction = filter_input(INPUT_GET, 'cod', FILTER_VALIDATE_INT);
$filmSelect = new AdminFilme;
switch ($action):
case 'delete':
$filmSelect->ExeDelete($filmAction);
WLMsg($filmSelect->getError()[0], $filmSelect->getError()[1]);
break;
default :
WLMsg("Ação não foi identificada pelo sistema, favor utilize os botões!", WS_ALERT);
endswitch;
endif;
$empi = 50;
$readAcervo = new Read;
$readAcervo->ExeRead("medien", "order by tombo asc limit 50");
if ($readAcervo->getResult()):
foreach ($readAcervo->getResult() as $listar):
?>
<tr>
<td><?= $listar->tombo; ?></td>
<td><?= $listar->titulooriginal; ?></td>
<td><?= $listar->titulonacional; ?></td>
<td><?= $listar->ano; ?></td>
<td><?= $listar->direcao; ?></td>
<td>
<a href="#" onclick="javascript:window.location.href = '<?= $base; ?>/painel.php?exe=filmes/index&cod=<?= $listar->tombo; ?>';" class="btn btn-small btn-primary" title="Ver <?= $listar->titulonacional; ?>"><i class="halflings-icon white eye-open"></i></a>
<a href="#" onclick="javascript:window.location.href = '<?= $base; ?>/painel.php?exe=filmes/update&codigo=<?= $listar->tombo; ?>';" class="btn btn-info btn-small" title="Editar <?= $listar->titulonacional; ?>"><i class="halflings-icon white edit"></i></a>
<a href="#" onclick="javascript:window.location.href = '<?= $base; ?>/painel.php?exe=filmes/index&cod=<?= $listar->tombo; ?>&action=delete';" class="btn btn-danger btn-small" title="Deletar <?= $listar->titulonacional; ?>"><i class="halflings-icon white trash"></i></a>
</td>
</tr>
<?php
endforeach;
else:
// $Pager->ReturnPage();
WLMsg("Desculpe, ainda não existem empresas cadastradas!", WS_INFOR);
endif;
?>
</tbody>
</table>
Agora vou mostrar os códigos do server_processing.php:
<?php
include_once("../conexao/conecta.php");
/ *
* Easy set variables
*/
/* Array of database columns which should be read and sent back to DataTables. Use a space where
* you want to insert a non-database field (for example a counter or static image)
*/
$aColumns = array('tombo', 'titulooriginal', 'titulonacional', 'ano','direcao');
/ Indexed column (used for fast and accurate table cardinality) /
$sIndexColumn = "id";
/ DB table to use /
$sTable = "medien";
/ Database connection information /
$gaSql['user'] = USER;
$gaSql['password'] = PASS;
$gaSql['db'] = BANCO;
$gaSql['server'] = HOST;
/ *
* If you just want to use the basic configuration for DataTables with PHP server-side, there is
* no need to edit below this line
*/
/*
* MySQL connection
*/
$gaSql['link'] = mysql_pconnect($gaSql['server'], $gaSql['user'], $gaSql['password']) or
die('Could not open connection to server');
mysql_select_db($gaSql['db'], $gaSql['link']) or
die('Could not select database ' . $gaSql['db']);
/*
* Paging
*/
$sLimit = "";
if (isset($_GET['iDisplayStart']) && $_GET['iDisplayLength'] != '-1') {
$sLimit = "LIMIT " . intval($_GET['iDisplayStart']) . ", " .
intval($_GET['iDisplayLength']);
}
/*
* Ordering
*/
$sOrder = "";
if (isset($_GET['iSortCol_0'])) {
$sOrder = "ORDER BY ";
for ($i = 0; $i < intval($_GET['iSortingCols']); $i++) {
if ($_GET['bSortable_' . intval($_GET['iSortCol_' . $i])] == "true") {
$sOrder .= $aColumns[intval($_GET['iSortCol_' . $i])] . " " .
($_GET['sSortDir_' . $i] === 'asc' ? 'asc' : 'desc') . ", ";
}
}
$sOrder = substr_replace($sOrder, "", -2);
if ($sOrder == "ORDER BY") {
$sOrder = "";
}
}
/*
* Filtering
* NOTE this does not match the built-in DataTables filtering which does it
* word by word on any field. It's possible to do here, but concerned about efficiency
* on very large tables, and MySQL's regex functionality is very limited
*/
$sWhere = "";
if (isset($_GET['sSearch']) && $_GET['sSearch'] != "") {
$sWhere = "WHERE (";
for ($i = 0; $i < count($aColumns); $i++) {
$sWhere .= $aColumns[$i] . " LIKE '%" . mysql_real_escape_string($_GET['sSearch']) . "%' OR ";
}
$sWhere = substr_replace($sWhere, "", -3);
$sWhere .= ')';
}
/ Individual column filtering /
for ($i = 0; $i < count($aColumns); $i++) {
if (isset($_GET['bSearchable_' . $i]) && $_GET['bSearchable_' . $i] == "true" && $_GET['sSearch_' . $i] != '') {
if ($sWhere == "") {
$sWhere = "WHERE ";
} else {
$sWhere .= " AND ";
}
$sWhere .= $aColumns[$i] . " LIKE '%" . mysql_real_escape_string($_GET['sSearch_' . $i]) . "%' ";
}
}
/*
* SQL queries
* Get data to display
*/
$sQuery = "
SELECT SQL_CALC_FOUND_ROWS " . str_replace(" , ", " ", implode(", ", $aColumns)) . "
FROM $sTable
$sWhere
$sOrder
$sLimit
";
$rResult = mysql_query($sQuery, $gaSql['link']) or die(mysql_error());
/ Data set length after filtering /
$sQuery = "
SELECT FOUND_ROWS()
";
$rResultFilterTotal = mysql_query($sQuery, $gaSql['link']) or die(mysql_error());
$aResultFilterTotal = mysql_fetch_array($rResultFilterTotal);
$iFilteredTotal = $aResultFilterTotal[0];
/ Total data set length /
$sQuery = "
SELECT COUNT(" . $sIndexColumn . ")
FROM $sTable
";
$rResultTotal = mysql_query($sQuery, $gaSql['link']) or die(mysql_error());
$aResultTotal = mysql_fetch_array($rResultTotal);
$iTotal = $aResultTotal[0];
/*
* Output
*/
$output = array(
"sEcho" => intval($_GET['sEcho']),
"iTotalRecords" => $iTotal,
"iTotalDisplayRecords" => $iFilteredTotal,
"aaData" => array()
);
while ($aRow = mysql_fetch_array($rResult)) {
$row = array();
for ($i = 0; $i < count($aColumns); $i++) {
if ($aColumns[$i] == "version") {
/* Special output formatting for 'version' column */
$row[] = ($aRow[$aColumns[$i]] == "0") ? '-' : $aRow[$aColumns[$i]];
} else if ($aColumns[$i] != ' ') {
/* General output */
$row[] = $aRow[$aColumns[$i]];
}
}
$output['aaData'][] = $row;
}
echo json_encode($output);
Agora vou mostrar os códigos do meu javascript custom.js:
$('#datatable').dataTable({
"sDom": "<'row-fluid'<'span6'l><'span6'f>r>t<'row-fluid'<'span12'i><'span12 center'p>>",
"sPaginationType": "bootstrap",
"oLanguage": {
"sLengthMenu": "_MENU_ records per page",
"bJQueryUI": true,
"bProcessing": true,
"bServerSide": true,
"sAjaxSource": "../server_side/server_processing.php"
}
});
Pessoal vou mostrar onde cada arquivo está nas pastas, vou colocar a estrutura:
o arquivo index.php se encontra nesta pasta: public_html/admin/views/filmes/index.php
O arquivo server_processing.php se encontra na pasta: public_html/admin/server_side/server_processing.php
O arquivo custom.js se encontra na pasta: public_html/admin/js/custom.js
O arquivo de conexao se encontra na pasta: public_html/admin/conexao/conecta.php
Utilizo uma programação diferente do que existe no server_processing.php
Utilizo uma estrutura um pouco mais avançada que aprendi em algumas aulas do Robson da Upinside, eu poderia adaptar meus códigos de CRUD no arquivo server_processing.php, mais como eu não entendi ao certo este script serverside, decidir colocar da forma que está.
Então pessoal preciso ver se alguém consegue me ajudar com este sisteminha aí.
Não, eu não comprei, eu fiz ele e ainda continuo a fazer, porém não sou chegado a trabalhar com DataTable, e agora que eu coloquei esse plugin de datatable eu gostei, mais então preciso fazer funcionar esse server side aí, se puder ajudar, estou a disposição.
Olá, eu utilizo no sistema da empresa o DataTables, muito interessante ele.
Mas sobre o seu problema, pode usar a versão AJAX ~> https://datatables.net/examples/ajax/simple.html
javascript
$(document).ready(function() {
$('#example').DataTable( {
"ajax": "data/arrays.txt"
} );
} );
html
<table id="example" class="display" cellspacing="0" width="100%">
<thead>
<tr>
<th>Name</th>
<th>Position</th>
<th>Office</th>
<th>Extn.</th>
<th>Start date</th>
<th>Salary</th>
</tr>
</thead>
<tfoot>
<tr>
<th>Name</th>
<th>Position</th>
<th>Office</th>
<th>Extn.</th>
<th>Start date</th>
<th>Salary</th>
</tr>
</tfoot>
</table>
json (gerado pelo php + mysql)
{
"data": [
[
"Tiger Nixon",
"System Architect",
"Edinburgh",
"5421",
"2011/04/25",
"$320,800"
],
[
"Garrett Winters",
"Accountant",
"Tokyo",
"8422",
"2011/07/25",
"$170,750"
],
[
"Ashton Cox",
"Junior Technical Author",
"San Francisco",
"1562",
"2009/01/12",
"$86,000"
],
[
"Cedric Kelly",
"Senior Javascript Developer",
"Edinburgh",
"6224",
"2012/03/29",
"$433,060"
]
]
}
mas enfim, é uma ideia
Aí eu vou ter que trabalhar com arrays no php também vou dar uma lida na documentação e posto uma resposta
Você pode passar esse script pronto? Dá eu tento fazer aqui e posto resultados!
>
Olá, eu utilizo no sistema da empresa o DataTables, muito interessante ele.
Mas sobre o seu problema, pode usar a versão AJAX ~> https://datatables.net/examples/ajax/simple.html
javascript
$(document).ready(function() {
$('#example').DataTable( {
"ajax": "data/arrays.txt"
} );
} );
html
<table id="example" class="display" cellspacing="0" width="100%">
<thead>
<tr>
<th>Name</th>
<th>Position</th>
<th>Office</th>
<th>Extn.</th>
<th>Start date</th>
<th>Salary</th>
</tr>
</thead>
<tfoot>
<tr>
<th>Name</th>
<th>Position</th>
<th>Office</th>
<th>Extn.</th>
<th>Start date</th>
<th>Salary</th>
</tr>
</tfoot>
</table>
json (gerado pelo php + mysql)
{
"data": [
[
"Tiger Nixon",
"System Architect",
"Edinburgh",
"5421",
"2011/04/25",
"$320,800"
],
[
"Garrett Winters",
"Accountant",
"Tokyo",
"8422",
"2011/07/25",
"$170,750"
],
[
"Ashton Cox",
"Junior Technical Author",
"San Francisco",
"1562",
"2009/01/12",
"$86,000"
],
[
"Cedric Kelly",
"Senior Javascript Developer",
"Edinburgh",
"6224",
"2012/03/29",
"$433,060"
]
]
}
mas enfim, é uma ideia
Pode me passar?
datatables.php
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>DataTables</title>
<link rel="stylesheet" href="[https://cdn.datatables.net/1.10.11/css/jquery.dataTables.min.css](https://cdn.datatables.net/1.10.11/css/jquery.dataTables.min.css)" type="text/css">
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body>
<table id="example" class="display" cellspacing="0" width="100%">
<thead>
<tr>
<th>Name</th>
<th>Position</th>
<th>Office</th>
<th>Extn.</th>
<th>Start date</th>
<th>Salary</th>
</tr>
</thead>
<tfoot>
<tr>
<th>Name</th>
<th>Position</th>
<th>Office</th>
<th>Extn.</th>
<th>Start date</th>
<th>Salary</th>
</tr>
</tfoot>
</table>
<script type="text/javascript" src="//code.jquery.com/jquery-1.12.0.min.js"></script>
<script type="text/javascript" src="https://cdn.datatables.net/1.10.11/js/jquery.dataTables.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$('#example').DataTable( {
"language": {
"lengthMenu": "Mostrar _MENU_ registros por página",
"sZeroRecords": "Ops! Nada encontrado",
"info": "Mostrando a página _PAGE_ de _PAGES_",
"infoEmpty": "Não há registros disponíveis",
"infoFiltered": "(filtered from _MAX_ total records)",
"sInfoFiltered": "(filtrado de um total de _MAX_ registros)",
"sInfo": "Mostrando _START_ para _END_ de _TOTAL_ registros",
"sSearch": "Buscar:",
"oAria": {
"sSortAscending": ": classificar a coluna do menor para o maior",
"sSortDescending": ": classificar a coluna do maior para o menor"
},
"oPaginate": {
"sFirst": "Primeiro",
"sLast": "Último",
"sNext": "Próximo",
"sPrevious": "Anterior"
}
},
"paging": true,
"lengthChange": true,
"searching": true,
"ordering": true,
"info": true,
"autoWidth": true,
"ajax": "data/arrays.txt",
"order": [[ 2, "asc" ],[ 1, "asc" ]]
} );
} );
</script>
</body>
</html>
data/arrays.txt (aqui você pode fazer o script php para buscar no banco de dados)
{
"data": [
[
"Tiger Nixon",
"System Architect",
"Edinburgh",
"5421",
"2011/04/25",
"$320,800"
],
[
"Garrett Winters",
"Accountant",
"Tokyo",
"8422",
"2011/07/25",
"$170,750"
],
[
"Ashton Cox",
"Junior Technical Author",
"San Francisco",
"1562",
"2009/01/12",
"$86,000"
],
[
"Cedric Kelly",
"Senior Javascript Developer",
"Edinburgh",
"6224",
"2012/03/29",
"$433,060"
],
[
"Airi Satou",
"Accountant",
"Tokyo",
"5407",
"2008/11/28",
"$162,700"
],
[
"Brielle Williamson",
"Integration Specialist",
"New York",
"4804",
"2012/12/02",
"$372,000"
],
[
"Herrod Chandler",
"Sales Assistant",
"San Francisco",
"9608",
"2012/08/06",
"$137,500"
],
[
"Rhona Davidson",
"Integration Specialist",
"Tokyo",
"6200",
"2010/10/14",
"$327,900"
],
[
"Colleen Hurst",
"Javascript Developer",
"San Francisco",
"2360",
"2009/09/15",
"$205,500"
],
[
"Sonya Frost",
"Software Engineer",
"Edinburgh",
"1667",
"2008/12/13",
"$103,600"
],
[
"Jena Gaines",
"Office Manager",
"London",
"3814",
"2008/12/19",
"$90,560"
],
[
"Quinn Flynn",
"Support Lead",
"Edinburgh",
"9497",
"2013/03/03",
"$342,000"
],
[
"Charde Marshall",
"Regional Director",
"San Francisco",
"6741",
"2008/10/16",
"$470,600"
],
[
"Haley Kennedy",
"Senior Marketing Designer",
"London",
"3597",
"2012/12/18",
"$313,500"
],
[
"Tatyana Fitzpatrick",
"Regional Director",
"London",
"1965",
"2010/03/17",
"$385,750"
],
[
"Michael Silva",
"Marketing Designer",
"London",
"1581",
"2012/11/27",
"$198,500"
],
[
"Paul Byrd",
"Chief Financial Officer (CFO)",
"New York",
"3059",
"2010/06/09",
"$725,000"
],
[
"Gloria Little",
"Systems Administrator",
"New York",
"1721",
"2009/04/10",
"$237,500"
],
[
"Bradley Greer",
"Software Engineer",
"London",
"2558",
"2012/10/13",
"$132,000"
],
[
"Dai Rios",
"Personnel Lead",
"Edinburgh",
"2290",
"2012/09/26",
"$217,500"
],
[
"Jenette Caldwell",
"Development Lead",
"New York",
"1937",
"2011/09/03",
"$345,000"
],
[
"Yuri Berry",
"Chief Marketing Officer (CMO)",
"New York",
"6154",
"2009/06/25",
"$675,000"
],
[
"Caesar Vance",
"Pre-Sales Support",
"New York",
"8330",
"2011/12/12",
"$106,450"
],
[
"Doris Wilder",
"Sales Assistant",
"Sidney",
"3023",
"2010/09/20",
"$85,600"
],
[
"Angelica Ramos",
"Chief Executive Officer (CEO)",
"London",
"5797",
"2009/10/09",
"$1,200,000"
],
[
"Gavin Joyce",
"Developer",
"Edinburgh",
"8822",
"2010/12/22",
"$92,575"
],
[
"Jennifer Chang",
"Regional Director",
"Singapore",
"9239",
"2010/11/14",
"$357,650"
],
[
"Brenden Wagner",
"Software Engineer",
"San Francisco",
"1314",
"2011/06/07",
"$206,850"
],
[
"Fiona Green",
"Chief Operating Officer (COO)",
"San Francisco",
"2947",
"2010/03/11",
"$850,000"
],
[
"Shou Itou",
"Regional Marketing",
"Tokyo",
"8899",
"2011/08/14",
"$163,000"
],
[
"Michelle House",
"Integration Specialist",
"Sidney",
"2769",
"2011/06/02",
"$95,400"
],
[
"Suki Burks",
"Developer",
"London",
"6832",
"2009/10/22",
"$114,500"
],
[
"Prescott Bartlett",
"Technical Author",
"London",
"3606",
"2011/05/07",
"$145,000"
],
[
"Gavin Cortez",
"Team Leader",
"San Francisco",
"2860",
"2008/10/26",
"$235,500"
],
[
"Martena Mccray",
"Post-Sales support",
"Edinburgh",
"8240",
"2011/03/09",
"$324,050"
],
[
"Unity Butler",
"Marketing Designer",
"San Francisco",
"5384",
"2009/12/09",
"$85,675"
],
[
"Howard Hatfield",
"Office Manager",
"San Francisco",
"7031",
"2008/12/16",
"$164,500"
],
[
"Hope Fuentes",
"Secretary",
"San Francisco",
"6318",
"2010/02/12",
"$109,850"
],
[
"Vivian Harrell",
"Financial Controller",
"San Francisco",
"9422",
"2009/02/14",
"$452,500"
],
[
"Timothy Mooney",
"Office Manager",
"London",
"7580",
"2008/12/11",
"$136,200"
],
[
"Jackson Bradshaw",
"Director",
"New York",
"1042",
"2008/09/26",
"$645,750"
],
[
"Olivia Liang",
"Support Engineer",
"Singapore",
"2120",
"2011/02/03",
"$234,500"
],
[
"Bruno Nash",
"Software Engineer",
"London",
"6222",
"2011/05/03",
"$163,500"
],
[
"Sakura Yamamoto",
"Support Engineer",
"Tokyo",
"9383",
"2009/08/19",
"$139,575"
],
[
"Thor Walton",
"Developer",
"New York",
"8327",
"2013/08/11",
"$98,540"
],
[
"Finn Camacho",
"Support Engineer",
"San Francisco",
"2927",
"2009/07/07",
"$87,500"
],
[
"Serge Baldwin",
"Data Coordinator",
"Singapore",
"8352",
"2012/04/09",
"$138,575"
],
[
"Zenaida Frank",
"Software Engineer",
"New York",
"7439",
"2010/01/04",
"$125,250"
],
[
"Zorita Serrano",
"Software Engineer",
"San Francisco",
"4389",
"2012/06/01",
"$115,000"
],
[
"Jennifer Acosta",
"Junior Javascript Developer",
"Edinburgh",
"3431",
"2013/02/01",
"$75,650"
],
[
"Cara Stevens",
"Sales Assistant",
"New York",
"3990",
"2011/12/06",
"$145,600"
],
[
"Hermione Butler",
"Regional Director",
"London",
"1016",
"2011/03/21",
"$356,250"
],
[
"Lael Greer",
"Systems Administrator",
"London",
"6733",
"2009/02/27",
"$103,500"
],
[
"Jonas Alexander",
"Developer",
"San Francisco",
"8196",
"2010/07/14",
"$86,500"
],
[
"Shad Decker",
"Regional Director",
"Edinburgh",
"6373",
"2008/11/13",
"$183,000"
],
[
"Michael Bruce",
"Javascript Developer",
"Singapore",
"5384",
"2011/06/27",
"$183,000"
],
[
"Donna Snider",
"Customer Support",
"New York",
"4226",
"2011/01/25",
"$112,000"
]
]
}
leorsamigo eu tenho botoes de ações, como eu faço pra colocar?
amigo eu tenho botoes de ações, como eu faço pra colocar?
infelizmente isto eu não implementei algo assim, mas dá uma olhada na documentação que deve ter algo a respeito
Remova do seu vocabulário as palavras terminadas em inha, inho, e só.
Exemplos:
Me da uma ajudinha com esse sisteminha.
É só uma modificação rapidinha.
etc...
Com relação ao script, você comprou esse 'sisteminha' ?