Una piccola guida di come usare Angular JS e Bootstrap , per creare una tabella in modo veloce e che abbia la possibilita' di ordinarsi (senza ricaricare il contenuto) in base alla colonna che si sceglie.

Per questo esempio prelevero' dei dati dal DB di una libreria (quindi: titolo,autore,ecc..)

Come prima cosa creiamo un file PHP che prelevera' i dati dal DB e li restituira' nel formato JSON
Codice PHP:
<?php
$mysqli 
= new MySQLi(.................................................);

if(
$mysqli->connect_error) {
  echo 
'Database connection failed...' 'Error: ' $mysqli->connect_errno ' ' $mysqli->connect_error;
  exit;
} else {
  
$mysqli->set_charset('utf8');
}

$a_json = array();
$a_json_row = array();
if (
$data $mysqli->query("SELECT * FROM libreria")) {
    while(
$row mysqli_fetch_array($data)) {        
     
$a_json_row["categoria"] = $row['categoria'];
         
$a_json_row["titolo"] = $row['titolo'];
         
$a_json_row["anno"] = $row['anno'];
         
$a_json_row["autore"] = $row['autore'];
     
array_push($a_json$a_json_row);
    }
}

echo 
json_encode($a_json);
flush();
 
$mysqli->close();
?>
Quindi avremo un dato formattato JSON che avra' questo aspetto:
Codice:
[{"categoria":"Narrativa","titolo":"Il Pendolo di Foucault","anno":"1990","autore":"Umberto Eco"},....
Adesso creiamo il nostro file HTML con lo script
da notare tutti gli stili e la grafica in generale verra' generata usando le librerie di Bootstrap

come prima cosa carichiamo le librerie per gli script e gli style
Codice:
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.min.js"></script>
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
quindi creiamo una funzione AngularJS che eseguira' il nostro file PHP ed assegnera' il risultato all'oggetto VALORI
Codice:
function customController($scope,$http) {
  $http.get("cerca.php")
  .success(function(response) {$scope.valori = response;});    
}
successivamente creiamo la funzione per l'ordinamento della tabella
Codice:
 $scope.funzioneSORT = function(tipo) {
   $scope.tipo = tipo;
 };
gli script sono conclusi passiamo quindi al HTML ..

creiamo un DIV e gli assegniamo il controller AngularJS
Codice HTML:
<div ng-app="" ng-controller="customController"> 
quindi disegnamo la tabella :
nel THEAD oltre ai nomi delle colonne inseriremo dei glyph (immagini) con funzione pulsante che chiameranno la nostra funzione per l'ordinamento
Codice HTML:
...
<th><button type="button" class="btn btn-primary btn-xs" ng-click="funzioneSORT('categoria')"><span class="glyphicon glyphicon-signal"></span></button>Categoria</th>
...
infine il corpo della tabella , in cui definirimo i campi da visualizzare (estratti dall'oggetto VALORI) e dichiareremo che l'ordinamento sara' subordinato alla variabile TIPO (definita nel pulsati sopra citati e richiamata dalla funzione di ordinamento vista all'inizio).
Codice HTML:
<tr ng-repeat="x in valori | orderBy:tipo">
    <td>{{ x.categoria | uppercase }}</td>
    <td>{{ x.titolo }}</td>
    <td>{{ x.autore }}</td>
    <td>{{ x.anno }}</td>
</tr>
Fine! .. ed ecco il DEMO ed il codice HTML completo..

Codice HTML:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.min.js"></script>
<script>
function customController($scope,$http) {
  $http.get("cerca.php")
  .success(function(response) {$scope.valori = response;});  
  $scope.funzioneSORT = function(tipo) {
   $scope.tipo = tipo;
  };   
}
</script>
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css"> 
</head>
<body>
<div ng-app="" ng-controller="customController"> 
<table class="table table-striped table-bordered">
  <thead>
  <tr class="success">
    <th><button type="button" class="btn btn-primary btn-xs" ng-click="funzioneSORT('categoria')"><span class="glyphicon glyphicon-signal"></span></button>Categoria</th>
    <th><button type="button" class="btn btn-primary btn-xs" ng-click="funzioneSORT('titolo')"><span class="glyphicon glyphicon-signal"></span></button>Titolo</th>
    <th><button type="button" class="btn btn-primary btn-xs" ng-click="funzioneSORT('autore')"><span class="glyphicon glyphicon-signal"></span></button>Autore</th>
    <th><button type="button" class="btn btn-primary btn-xs" ng-click="funzioneSORT('anno')"><span class="glyphicon glyphicon-signal"></span></button>Anno</th>
  </tr>
  </thead>
  <tr ng-repeat="x in valori | orderBy:tipo">
    <td>{{ x.categoria | uppercase }}</td>
    <td>{{ x.titolo }}</td>
    <td>{{ x.autore }}</td>
    <td>{{ x.anno }}</td>
  </tr>
</table>
</div>
</body>
</html>
NLSweb