<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Yriase &#187; datatables</title>
	<atom:link href="http://www.yriase.fr/tag/datatables/feed" rel="self" type="application/rss+xml" />
	<link>http://www.yriase.fr</link>
	<description>Actu, Développement, Tutoriaux, Geek ...</description>
	<lastBuildDate>Sun, 05 Feb 2012 15:33:22 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>DataTables en version beta 1.7</title>
		<link>http://www.yriase.fr/806-datatables-en-version-beta-1-7.html</link>
		<comments>http://www.yriase.fr/806-datatables-en-version-beta-1-7.html#comments</comments>
		<pubDate>Fri, 28 May 2010 21:57:02 +0000</pubDate>
		<dc:creator>
<img alt="" src="http://0.gravatar.com/avatar/8d419a54322fb4b031f344a82a2f58ea?s=12&amp;d=identicon&amp;r=G" class="avatar avatar-12 photo" height="12" width="12" style=" border: 1px solid; border-color: #000000;"/>
seiyar81</dc:creator>
				<category><![CDATA[Brèves]]></category>
		<category><![CDATA[Développement Web]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[datatables]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.yriase.fr/?p=806</guid>
		<description><![CDATA[Datatables ce plugin pour jQuery, que j&#8217;ai déjà présenté par deux fois, permettant la gestion des tableaux HTML créé et maintenu par Allan Jardine viens d&#8217;être mis à jour en version beta 1.7. Au programme, plusieurs corrections de bug concernant les cookies, les performances, les données, l&#8217;ajout du scrolling vertical et horizontal dans le tableau, [...]]]></description>
			<content:encoded><![CDATA[<div class="post-pic"><img class="alignnone size-full wp-image-254" title="news-dt" src="http://www.yriase.fr/wp-content/uploads/2009/11/news-dt.png" alt="" width="670" height="100" /></div>
<p><strong>Datatables</strong> ce plugin pour jQuery, que j&#8217;ai déjà présenté par <a href="http://www.yriase.fr/554-datatables-base-de-donnees-traduction-et-jquery-ui.html">deux</a> <a href="http://www.yriase.fr/253-datatables-manipuler-ses-tableaux-html-avec-jquery.html">fois</a>, permettant la gestion des tableaux HTML créé et maintenu par <a href="http://www.sprymedia.co.uk/">Allan Jardine</a> viens d&#8217;être mis à jour en version beta 1.7.</p>
<div>Au programme, plusieurs corrections de bug concernant les cookies, les performances, les données, l&#8217;ajout du scrolling vertical et horizontal dans le tableau, on peut maintenant récupérer l&#8217;objet dataTables créé ou bien d&#8217;empêcher qu&#8217;on le récupère etc.</div>
<div></div>
<div>Pour essayer cette nouvelle version, plus d&#8217;infos sur la page <a href="http://datatables.net/new/1.7">officielle du plugin</a>.</div>
]]></content:encoded>
			<wfw:commentRss>http://www.yriase.fr/806-datatables-en-version-beta-1-7.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Datatables : base de données, traduction et jQuery-UI</title>
		<link>http://www.yriase.fr/554-datatables-base-de-donnees-traduction-et-jquery-ui.html</link>
		<comments>http://www.yriase.fr/554-datatables-base-de-donnees-traduction-et-jquery-ui.html#comments</comments>
		<pubDate>Tue, 02 Feb 2010 16:03:53 +0000</pubDate>
		<dc:creator>
<img alt="" src="http://0.gravatar.com/avatar/8d419a54322fb4b031f344a82a2f58ea?s=12&amp;d=identicon&amp;r=G" class="avatar avatar-12 photo" height="12" width="12" style=" border: 1px solid; border-color: #000000;"/>
seiyar81</dc:creator>
				<category><![CDATA[Développement Web]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[datatables]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[json]]></category>

		<guid isPermaLink="false">http://www.yriase.fr/?p=554</guid>
		<description><![CDATA[J&#8217;avais présenté ce fabuleux plugin pour jQuery qu&#8217;est Datatables et expliqué rapidement ce dont il est capable. Aujourd&#8217;hui je vous propose une mise en situation, avec comme objectif l&#8217;interaction avec une base de données, une traduction en français (ou une autre langue parmi les 29 disponibles), la mise en forme avec l&#8217;aide jQuery-UI, et d&#8217;autres [...]]]></description>
			<content:encoded><![CDATA[<div class="post-pic"><img src="http://www.yriase.fr/wp-content/uploads/2009/11/news-dt.png" alt="" title="news-dt" width="670" height="100" class="aligncenter size-full wp-image-254" /></div>
<p>J&#8217;avais présenté ce fabuleux plugin pour jQuery qu&#8217;est <a href="http://datatables.net/">Datatables</a> et expliqué rapidement ce dont il est capable.<br />
Aujourd&#8217;hui je vous propose une mise en situation, avec comme objectif l&#8217;interaction avec une base de données, une traduction en français (ou une autre langue parmi les 29 disponibles), la mise en forme avec l&#8217;aide jQuery-UI, et d&#8217;autres fonctionnalités.</p>
<p>Tout d&#8217;abord si vous ne possédez pas encore le plugin téléchargez-le <a href="http://datatables.net/releases/dataTables-1.6.1.zip">ici</a>.<br />
Ensuite nous allons placer le code de notre tableau dans notre page, imaginons que l&#8217;on souhaite afficher des utilisateurs : </p>
<pre class="brush: php">
&lt;table id="datatable" &gt;
  &lt;thead&gt;
       &lt;tr&gt;
            &lt;th&gt;Nom&lt;/th&gt;
            &lt;th&gt;Prénom&lt;/th&gt;
            &lt;th&gt;Inscription&lt;/th&gt;
            &lt;th&gt;Mail&lt;/th&gt;
            &lt;th&gt;&lt;/th&gt;
        &lt;/tr&gt;
  &lt;/thead&gt;
 &lt;tbody&gt;
       &lt;tr&gt;
            &lt;td colspan="4"&gt;Chargement des données...&lt;/td&gt;
        &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
</pre>
<p>Maintenant le code Javascript. Nous allond indiquer que l&#8217;on souhaite récupérer les données via un fichier côté serveur : </p>
<pre class="brush: jscript">
$(document).ready(function() {
	$('#datatable').dataTable( {
		"bProcessing": true,
		"bServerSide": true,
		"sAjaxSource": "get_data.php"
	} );
} );
</pre>
<p>Le plugin ira donc récupérer le fichier <em>get_data.php</em> pour remplir le tableau. Les données renvoyées par le fichier php doivent être au format <a href="http://fr.wikipedia.org/wiki/JavaScript_Object_Notation"><strong>JSON</strong></a>.<br />
Voici un exemple du contenu de get_data.php inspiré de la documentation de Datatables mais vous êtes libre de modifier le code pour utiliser PDO, ou une autre méthode d&#8217;accès à la base de données si vous utilisez un autre SGBD que MySQL.</p>
<pre class="brush: php">
&lt;?php
  /* MySQL connection */
	$gaSql['user']       = "username";
	$gaSql['password']   = "password";
	$gaSql['db']         = "mydb";
	$gaSql['server']     = "localhost";
	$gaSql['type']       = "mysql";

	$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'] ) )
	{
		$sLimit = "LIMIT ".mysql_real_escape_string( $_GET['iDisplayStart'] ).", ".
			mysql_real_escape_string( $_GET['iDisplayLength'] );
	}

	/* Ordering */
	if ( isset( $_GET['iSortCol_0'] ) )
	{
		$sOrder = "ORDER BY  ";
		for ( $i=0 ; $i&lt;mysql_real_escape_string( $_GET['iSortingCols'] ) ; $i++ )
		{
			$sOrder .= fnColumnToField(mysql_real_escape_string( $_GET['iSortCol_'.$i] ))."
			 	".mysql_real_escape_string( $_GET['sSortDir_'.$i] ) .", ";
		}
		$sOrder = substr_replace( $sOrder, "", -2 );
	}

	/* Filtrage - Remplace le filtrage côté client, peut donc être long si la base de données est importante
	 */
	$sWhere = "";
	if ( $_GET['sSearch'] != "" )
	{
		$sWhere = "WHERE nom LIKE '%".mysql_real_escape_string( $_GET['sSearch'] )."%' OR ".
		                "prenom LIKE '%".mysql_real_escape_string( $_GET['sSearch'] )."%' OR ".
		                "inscription = '".mysql_real_escape_string( $_GET['sSearch'] )."' OR ".
		                "mail = '".mysql_real_escape_string( $_GET['sSearch'] )."'";
	}

	$sQuery = "SELECT id, nom, prenom, inscription, mail FROM users $sWhere $sOrder $sLimit";
	$rResult = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error());

	$sQuery = "SELECT FOUND_ROWS()";

	$rResultFilterTotal = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error());
	$aResultFilterTotal = mysql_fetch_array($rResultFilterTotal);
	$iFilteredTotal = $aResultFilterTotal[0];

	$sQuery = "SELECT COUNT(id)	FROM users";
	$rResultTotal = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error());
	$aResultTotal = mysql_fetch_array($rResultTotal);
	$iTotal = $aResultTotal[0];

	$sOutput = '{';
	$sOutput .= '"sEcho": '.intval($_GET['sEcho']).', ';
	$sOutput .= '"iTotalRecords": '.$iTotal.', ';
	$sOutput .= '"iTotalDisplayRecords": '.$iFilteredTotal.', ';
	$sOutput .= '"aaData": [ ';
	while ( $aRow = mysql_fetch_array( $rResult ) )
	{
		$sOutput .= "[";
		$sOutput .= '"'.addslashes($aRow['nom']).'",';
		$sOutput .= '"'.addslashes($aRow['prenom']).'",';
		$sOutput .= '"'.addslashes(date(H:i d/m/Y'', $aRow['inscription'])).'",';
		$sOutput .= '"'.addslashes($aRow['mail']).'"';
		$sOutput .= '"<a href="user.php?id="'.$aRow['id'].'>Détails</a>"';
		$sOutput .= "],";
	}
	$sOutput = substr_replace( $sOutput, "", -1 );
	$sOutput .= '] }';

	echo $sOutput;

	function fnColumnToField( $i )
	{
		if ( $i == 0 )
			return "nom";
		else if ( $i == 1 )
			return "prenom";
		else if ( $i == 2 )
			return "inscription";
		else if ( $i == 3 )
			return "mail";
	}
?&gt;
</pre>
<p>Et voilà notre tableau se remplit automatiquement avec les données renvoyées par le fichier <em>get_data.php</em>.<br />
La méthode utilisée dans l&#8217;exemple pour renvoyer les données au format JSON est un peu barbare, utiliser json-encode sur un array serait à mon humble avis plus approprié, à vous de voir.</p>
<pre class="brush: php">
  <?php
 $sOutput = array('sEcho'=>intval($_GET['sEcho']),
				  'iTotalRecords'=>$iTotal,
				  'iTotalDisplayRecords'=>$iFilteredTotal);
 $aaData = array();        

	while ( $aRow = mysql_fetch_array( $rResult ) )
	{
            $tmp = array();
	    $tmp[] = addslashes($aRow['nom']);
		$tmp[] = addslashes($aRow['prenom']);
		$tmp[] = date(H:i d/m/Y'', $aRow['inscription']);
		$tmp[] = addslashes($aRow['mail']);
		$tmp[] = '&lt;a href="user.php?id='.$aRow['id'].'"&gt;Détails&lt;/a&gt;';

		$aaData[] = $tmp;
	}
   $sOutput['aaData'] = $aaData;

   echo json_encode($sOutput);
</pre>
<p>Je n&#8217;ai pas testé le code mais cela devrait fonctionner.</p>
<p>Bon tout ça c&#8217;est bien beau mais on aimerait bien avoir une traduction en français plutôt que d&#8217;avoir <em>Show 10 entries, Search</em> ect, car même si on comprend ça fait tâche.<br />
Et bien le plugin nous offre la possibilité de traduire le plugin dans pas moins de 29 langues dont l&#8217;anglais, l&#8217;allemand, l&#8217;espagnol, le portugais, le chinois etc.<br />
Pour mettre en place la traduction il n&#8217;y a rien de plus simple, on va rajouter une option dans la déclaration de notre tableau : </p>
<pre class="brush: jscript">
$(document).ready(function() {
	$('#datatable').dataTable( {
		"bProcessing": true,
		"bServerSide": true,
		"sAjaxSource": "get_data.php",
                "oLanguage": { "sUrl": "datatable_fr.txt" }
	} );
} );
</pre>
<p>Il suffit ensuite de placer la traduction correspondante dans le fichier <em>datatable_fr.txt</em>. La liste des codes à placer est <a href="http://datatables.net/plug-ins/i18n">disponible ici</a>.<br />
Vous pouvez modifier les traductions ou bien créer les vôtres très simplement. Pour éviter un appel du fichier sur le serveur vous pouvez également faire comme ceci : </p>
<pre class="brush: jscript">
$(document).ready(function() {
	$('#datatable').dataTable( {
		"bProcessing": true,
		"bServerSide": true,
		"sAjaxSource": "get_data.php",
                "oLanguage": { "sProcessing":   "Traitement en cours...",
                   "sLengthMenu":   "Afficher _MENU_ éléments",
	           "sZeroRecords":  "Aucun élément à afficher",
	           "sInfo": "Affichage de l'élement _START_ à _END_ sur _TOTAL_ éléments",
	           "sInfoEmpty": "Affichage de l'élement 0 à 0 sur 0 éléments",
	           "sInfoFiltered": "(filtré de _MAX_ éléments au total)",
	           "sInfoPostFix":  "",
	           "sSearch":       "Rechercher:",
	           "sUrl":          "",
	           "oPaginate": {
		        "sFirst":    "Premier",
		        "sPrevious": "Précédent",
		        "sNext":     "Suivant",
		        "sLast":     "Dernier"
	               }
                }
	} );
} );
</pre>
<p>Enfin on aimerait styliser notre tableau et donc utiliser la puissance de jQuery-UI. Pour cela rien de plus simple, il suffit de posséder les fichiers de jQuery-UI (.js, .css et les images) et de les avoir inclus. Comme pour la traduction une simple ligne suffit : </p>
<pre class="brush: jscript">
       ...
       "bJQueryUI": true,
       ...
</pre>
<p>Vous pouvez voir encore plus d&#8217;exemple sur <a href="http://datatables.net/examples/">cette page</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yriase.fr/554-datatables-base-de-donnees-traduction-et-jquery-ui.html/feed</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
	</channel>
</rss>

