<?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; Javascript</title>
	<atom:link href="http://www.yriase.fr/category/javascript-informatique/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>Créer un calendrier dynamique en Javascript avec FullCalendar</title>
		<link>http://www.yriase.fr/865-fullcalendar-calendrier-dynamique.html</link>
		<comments>http://www.yriase.fr/865-fullcalendar-calendrier-dynamique.html#comments</comments>
		<pubDate>Sun, 24 Oct 2010 15:10:20 +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[fullcalendar]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://www.yriase.fr/?p=865</guid>
		<description><![CDATA[Comme on le sait jQuery possède un nombre de plugins tout simplement énorme ! Il y a certes du tri à faire et certains plugins tente de réinventer la roue, en vain&#8230; FullCalendar ne fait pas partie de ceux-là. Vous avez besoin d&#8217;ajouter un calendrier permettant une gestion des évènements, un affichage par jour/semaine/mois, et [...]]]></description>
			<content:encoded><![CDATA[<div class="post-pic"><img src="http://www.yriase.fr/wp-content/uploads/2010/10/fullcalendar.png" alt="" title="FullCalendar" width="670" height="100" class="alignnone size-full wp-image-866" /></div>
<p>Comme on le sait jQuery possède un nombre de plugins tout simplement énorme ! Il y a certes du tri à faire et certains plugins tente de réinventer la roue, en vain&#8230;</p>
<p><a href="http://arshaw.com/fullcalendar/">FullCalendar</a> ne fait pas partie de ceux-là. Vous avez besoin d&#8217;ajouter un calendrier permettant une gestion des évènements, un affichage par jour/semaine/mois, et thèmable ? Alors il vous faut <a href="http://arshaw.com/fullcalendar/">FullCalendar</a> !</p>
<p>Le plugin offre plusieurs vues pour afficher les évènements : par jour, semaine, mois avec des versions type agenda ou basique.<br />
Un de ces autres points forts c&#8217;est d&#8217;être compatible avec jQuery UI et il s&#8217;adapte ainsi à votre thème tout seul, plutôt pratique.<br />
Une extension lui permet même de récupérer les évènements de votre Google Calendar !</p>
<p>Voyons voir un peu comment le mettre en place : </p>
<pre class="brush: jscript">
	$(document).ready(function() {

		var date = new Date();
		var d = date.getDate();
		var m = date.getMonth();
		var y = date.getFullYear();

		$('#calendar').fullCalendar({
			header: {
				left: 'prev,next today',
				center: 'title',
				right: 'month,agendaWeek,agendaDay'
			},
			theme: true,
			editable: true,
			events: [
				{
					id: 1
					title: 'Aller sur Yriase.fr',
					start: new Date(y, m, 28),
					end: new Date(y, m, 29),
					url: 'http://www.yriase.fr/',
					allDay: true
				},
				{
					id: 2
					title: 'Nourrir le chat !',
					start: new Date(y, m, 28, 8, 0),
					end: new Date(y, m, 29, 8, 15),
					allDay: false
				}
			]
		});

	});
</pre>
<p>Ce bout de code plutôt simple, inialise votre Calendrier avec 2 évènements et l&#8217;adaptation au thème jQuery UI. Le proriété <em>editable</em> indique que les évènements ne peuvent être déplacés (peut être remplacée par la propriété editable de chanque évènement).</p>
<p>Comme vous pouvez le constater les évènements sont en réalité des objets JSON, auxquels on peut donc ajouter des proriétés.<br />
Ainsi on peut par exemple ajouter une propriété type qui pourrait nous permettre de filtrer les évènements par type.<br />
Ce qui serait encore mieux serait de pouvoir ajouter un bouton ou ensemble de boutons pour filtrer, qui soient intégrés au calendrier.<br />
Ca tombe bien, j&#8217;avais prévu d&#8217;expliquer comme faire !</p>
<p>Le but de la manoeuvre est simple, ajouter des boutons au calendrier simplement en modifiant les valeurs dans la déclaration de la propriété <em>header</em>. Par exemple : </p>
<pre class="brush: jscript">
			header: {
				left: 'prev,next today',
				center: 'title',
				right: 'all,mandatory,not_mandatory month,agendaWeek,agendaDay'
			}
</pre>
<p>On ajoute ici trois boutons donc <em>all,mandatory, not_mandatory</em> pour afficher/cacher les évènements obligatoires ou pas. Pas très original mais c&#8217;est bon pour l&#8217;exemple !</p>
<p>Maintenant il va nous falloir modifier un petit peu le fichier <em>fullcalendar.js</em>.<br />
Aux alentours de la ligne 80, la déclaration de la propriété <em>buttonText</em>.<br />
Ajouter au tableau les lignes :<br />
                all: &#8216;All&#8217;,<br />
                mandatory: &#8216;Mandatory&#8217;,<br />
                not_mandatory: &#8216;Not Mandatory&#8217;,</p>
<p>Ensuite vers la ligne 710 cherchez : </p>
<pre class="brush: jscript">
              if (publicMethods[buttonName]) {
			buttonClick = publicMethods[buttonName];
	      }
	       else if (views[buttonName]) {
			buttonClick = function() {
			  button.removeClass(tm + '-state-hover');
			  changeView(buttonName)
			};
	     }
</pre>
<p>et ajoutez après : </p>
<pre class="brush: jscript">
else {
      buttonClick = function() {
	button.removeClass(tm + '-state-hover');
        button.addClass(tm + '-state-active');
        if(button.hasClass('fc-button-all')) {
              $('.fc-button-mandatory').removeClass(tm + '-state-active');
              $('.fc-button-not_mandatory').removeClass(tm + '-state-active');
        } else if (button.hasClass('fc-button-mandatory')) {
              $('.fc-button-all').removeClass(tm + '-state-active');
              $('.fc-button-not_mandatory').removeClass(tm + '-state-active');
        } else if (button.hasClass('fc-button-not_mandatory')) {
              $('.fc-button-all').removeClass(tm + '-state-active');
              $('.fc-button-mandatory').removeClass(tm + '-state-active');
        }
      };
 }
</pre>
<p>Cette partie s&#8217;occupe de marquer comme actif le bouton cliqué.<br />
Enfin juste après se trouve cette partie : </p>
<pre class="brush: jscript">
if (icon) {
	button = $("
<div class='fc-button-" + buttonName + " ui-state-default'><a><span class='ui-icon ui-icon-" + icon + "'/></a></div>

");
}
else if (text) {
...
</pre>
<p>Mettez dans le corps du <em>else if(text)</em> : </p>
<pre class="brush: jscript">
if(buttonName == 'all')
  button = $("
<div class='fc-button-" + buttonName + " " + tm + "-state-active " + tm + "-state-default'>" +
		"<a><span>" + text + "</span></a></div>

");
else
  button = $("
<div class='fc-button-" + buttonName + " " + tm + "-state-default'>" +
		"<a><span>" + text + "</span></a></div>

");
</pre>
<p>Maintenant il ne vous reste plus qu&#8217;a mettre en place les fonctions pour filtrer les évènements selon leur type.<br />
Mais ça ce sera pour une autre fois !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yriase.fr/865-fullcalendar-calendrier-dynamique.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Utiliser Google Font API pour ajouter des polices à ses pages Web</title>
		<link>http://www.yriase.fr/834-utiliser-google-font-api-pour-ajouter-des-polices-a-ses-pages-web.html</link>
		<comments>http://www.yriase.fr/834-utiliser-google-font-api-pour-ajouter-des-polices-a-ses-pages-web.html#comments</comments>
		<pubDate>Mon, 02 Aug 2010 10:25:06 +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[api]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[fonts]]></category>
		<category><![CDATA[Google]]></category>

		<guid isPermaLink="false">http://www.yriase.fr/?p=834</guid>
		<description><![CDATA[Parmis les nombreuses API disponibles dans ses Code Labs, Google a mis en place une API particulièrement intéressante : Google Font API ! Cette dernière nous permet très simplement d&#8217;inclure une ou plusieurs polices hébergées sur les serveurs de Google via un simple fichier CSS. Un petit exemple pour illustrer le tout, dans la balise [...]]]></description>
			<content:encoded><![CDATA[<p><span style="font-size: small;">Parmis les nombreuses API disponibles dans ses Code Labs, Google a mis en place une API particulièrement intéressante : Google Font API !</span></p>
<p><span style="font-size: small;">Cette dernière nous permet très simplement d&#8217;inclure une ou plusieurs polices hébergées sur les serveurs de Google via un simple fichier CSS.</span></p>
<p><span style="font-size: small;">Un petit exemple pour illustrer le tout, dans la balise head : </span></p>
<p><span style="font-size: small;"> </span></p>
<pre class="brush: php"><span style="font-size: small;">&lt;link href='http://fonts.googleapis.com/css?family=Lobster' rel='stylesheet' type='text/css' /&gt;</span></pre>
<p><span style="font-size: small;">Et plus loin dans le corps de la page : </span></p>
<p><span style="font-size: small;"> </span></p>
<pre class="brush: php"><span style="font-size: small;">&lt;span style="font-family: 'Lobster', arial, serif; font-size: 16px;"&gt;Hello World !&lt;/span&gt;</span></pre>
<p><span style="font-size: small;">Ce qui donne le résultat suivant : </span></p>
<link href='http://fonts.googleapis.com/css?family=Lobster' rel='stylesheet' type='text/css' />
<span style="font-family: 'Lobster', arial, serif; font-size: 16px;">Hello World</span></p>
<p><span style="font-size: small;">Tout de même bien pratique cette API ! Vous pouvez consulter la liste des polices disponibles sur <a title="WebFonts Google Font API" href="http://code.google.com/webfonts" target="_blank">cette page</a>.</span></p>
<p><span style="font-size: small;">Sachez qu&#8217;il est aussi possible d&#8217;utiliser un script Javascript co-développé par Google et <a href="http://typekit.com/">TypeKit</a> : WebFont Loader.</span></p>
<p><span style="font-size: small;"><span style="font-size: x-small;"><span>Rien de bien compliqué ici non plus, si ce n&#8217;est que vous pouvez mieux contrôler le chargement des polices via WebFont Loader :</span></span></span></p>
<p><span style="font-size: small;"><span style="font-size: x-small;"><span style="font-size: 10px;"><br />
</span></span></span></p>
<pre class="brush: jscript">      WebFontConfig = {
        google: { families: [ 'Lobster', 'Nobile' ] }
      };
      (function() {
        var wf = document.createElement('script');
        wf.src = ('https:' == document.location.protocol ? 'https' : 'http') +
            '://ajax.googleapis.com/ajax/libs/webfont/1/webfont.js';
        wf.type = 'text/javascript';
        wf.async = 'true';
        var s = document.getElementsByTagName('script')[0];
        s.parentNode.insertBefore(wf, s);
      })();
</pre>
<p>Vous pouvez ensuite définir vos styles comme ceci :</p>
<pre class="brush: css">&lt;style&gt;
      .wf-inactive p {
        font-family: serif
      }
      .wf-active p {
        font-family: 'Lobster', serif
      }
      .wf-inactive h1 {
        font-family: serif;
        font-size: 18px
      }
      .wf-active h1 {
        font-family: 'Nobile', serif;
        font-size: 18px
      }
&lt;/style&gt;
</pre>
<p>L&#8217;avantage de WebFont Loader est qu&#8217;il supporte le chargement de polices via plusieurs fournisseurs. Ainsi vous pouvez charger des polices provenant des serveurs de Google mais aussi de TypeKit, Ascender, et même de n&#8217;importe quel fournisseur via un loader dit &laquo;&nbsp;custom&nbsp;&raquo; :</p>
<pre class="brush: jscript">WebFontConfig = {
  custom: { families: ['OneFont', 'AnotherFont'],
    urls: [ 'http://www.yriase.fr/mystylesheet1.css',
      'http://www.weblike.me/stylesheet2.css' ] }
};
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.yriase.fr/834-utiliser-google-font-api-pour-ajouter-des-polices-a-ses-pages-web.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<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>ZendX_JQuery : view helper pour les bouttons</title>
		<link>http://www.yriase.fr/749-zendx_jquery-view-helper-pour-les-bouttons.html</link>
		<comments>http://www.yriase.fr/749-zendx_jquery-view-helper-pour-les-bouttons.html#comments</comments>
		<pubDate>Tue, 13 Apr 2010 13:49:11 +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[Javascript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[zend framework]]></category>
		<category><![CDATA[zendx_jquery]]></category>

		<guid isPermaLink="false">http://www.yriase.fr/?p=749</guid>
		<description><![CDATA[Après le view helper pour la progressbar de jQuery UI, je me suis amusé à coder un view helper pour les bouttons. Le principe reste le même, cependant j&#8217;ai ajouté un paramètre pour gérer le passage des évènements à la création du boutton. /** * Zend Framework * * LICENSE * * This source file [...]]]></description>
			<content:encoded><![CDATA[<p>Après le view helper pour la progressbar de jQuery UI, je me suis amusé à coder un view helper pour les bouttons. Le principe reste le même, cependant j&#8217;ai ajouté un paramètre pour gérer le passage des évènements à la création du boutton.</p>
<pre class="brush: php">
/**
 * Zend Framework
 *
 * LICENSE
 *
 * This source file is subject to the new BSD license that is bundled
 * with this package in the file LICENSE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://framework.zend.com/license/new-bsd
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@zend.com so we can send you a copy immediately.
 *
 * @category    ZendX
 * @package     ZendX_JQuery
 * @subpackage  View
 * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
 * @license     http://framework.zend.com/license/new-bsd     New BSD License
 * @version     $Id: Slider.php 20165 2010-01-09 18:57:56Z bkarwin $
 */

/**
 * @see ZendX_JQuery_View_Helper_UiWidget
 */
require_once "ZendX/JQuery/View/Helper/UiWidget.php";

/**
 * jQuery Button View Helper
 *
 * @uses 	   Zend_Json
 * @package    ZendX_JQuery
 * @subpackage View
 * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
 * @license    http://framework.zend.com/license/new-bsd     New BSD License
 */
class ZendX_JQuery_View_Helper_Button extends ZendX_JQuery_View_Helper_UiWidget
{
    /**
     * Create a jQuery button
     *
     * @link   http://docs.jquery.com/UI/Button
     * @param  string $id
     * @param  string $value
     * @param  array  $params
     * @param  array  $attribs
     * @param  array  $events
     * @return string
     */
    public function button($id, $value, array $params = array(), array $attribs = array(), array $events = array())
    {
        if(!isset($attribs['id'])) {
            $attribs['id'] = $id;
        }

        $jqh = ZendX_JQuery_View_Helper_JQuery::getJQueryHandler();
        $params = ZendX_JQuery::encodeJson($params);
        $events = $this->getEvents($events);

        $js = sprintf('%s("#%s").button(%s)%s;', $jqh, $attribs['id'], $params, $events);
        $this->jquery->addOnLoad($js);

        $html = &quot;&lt;button &quot;.$this-&gt;_htmlAttribs($attribs).&quot; &gt;&quot;;
        $html .= $value;
        $html .= '&lt;/button&gt;';

        return $html;
    }

    public function getEvents($events)
    {
        if(!count($events)) return '';
        else {
            $retour = '';
            foreach ($events as $event => $function) {
                $retour .= '.'.$event.'('.$function.')';
            }
            return $retour;
        }
    }

}
</pre>
<p>Pour l&#8217;utiliser on place le fichier Button.php (avec le code ci-dessus) dans le dossier <em>ZendX/JQuery/View/Helper/</em> et pour l&#8217;utiliser : </p>
<pre class="brush: php">
echo $this->button("button1", "Mon Button", array('icons' => new Zend_Json_Expr("{primary: 'ui-icon-gear'}")),
        array(), array('click'=> "function(){ alert('Hello World !'); }" ));
</pre>
<p>Enjoy !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yriase.fr/749-zendx_jquery-view-helper-pour-les-bouttons.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Zend Framework et jQuery une équipe qui gagne</title>
		<link>http://www.yriase.fr/656-zend-framework-et-jquery-une-quipe-qui-gagne.html</link>
		<comments>http://www.yriase.fr/656-zend-framework-et-jquery-une-quipe-qui-gagne.html#comments</comments>
		<pubDate>Sat, 27 Mar 2010 22:12:20 +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[PHP]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[zend]]></category>
		<category><![CDATA[zend framework]]></category>

		<guid isPermaLink="false">http://www.yriase.fr/?p=656</guid>
		<description><![CDATA[Si Zend a fait le choix d’intégrer Dojo à son Framework, il faut bien avouer qu’aujourd’hui jQuery a acquit une certaine popularité auprès des développeurs. Notamment grâce à sa modularité, qui est son principal atout, mais également par sa simplicité d’utilisation qui rend accessible à tous le développement d’applications évoluées en Javascript. Et bien sachez [...]]]></description>
			<content:encoded><![CDATA[<p>Si Zend a fait le choix d’intégrer Dojo à son Framework, il faut bien avouer qu’aujourd’hui jQuery a acquit une certaine popularité auprès des développeurs. Notamment grâce à sa modularité, qui est son principal atout, mais également par sa simplicité d’utilisation qui rend accessible à tous le développement d’applications évoluées en Javascript.</p>
<p>Et bien sachez qu’il est possible (i.e. déjà prévu) d’intégrer jQuery au Zend Framework. En effet un package existe et est fournit avec le framework dans le dossier “<em>extras/library/ZendX</em>”. </p>
<h4>Mise en place</h4>
<p>Pour pouvoir l’utiliser vous devez d’abord copier le dossier <em>ZendX</em> dans le même répertoire que le dossier <em>Zend.</em><br />
<br />Vous obtenez ensuite l’architecture suivante :<em>&#160;</em></p>
<p><img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="zendx" border="0" alt="zendx" src="http://www.yriase.fr/wp-content/uploads/2010/03/zendx.jpg" width="242" height="50" /> </p>
<p>Ensuite il va nous falloir utiliser le “<em>view helper</em>” fournit par ZendX_JQuery. Plusieurs méthodes s’offrent à nous :</p>
<ul>
<li>Dans les contrôleurs/vues où l’on souhaite utiliser JQuery on ajoute
<pre class="brush: php">	$this-&gt;view-&gt;addHelperPath(&quot;ZendX/JQuery/View/Helper&quot;, &quot;ZendX_JQuery_View_Helper&quot;);
	// ou bien, et cela revient au même
	ZendX_JQuery::enableView($this-&gt;view);
	</pre>
</li>
<li>Pour l’utiliser dans toute l’application on ajoute à notre fichier <em>BootStrap</em>
<pre class="brush: php">      $view = new Zend_View();
      $view-&gt;addHelperPath('ZendX/JQuery/View/Helper/', 'ZendX_JQuery_View_Helper');

      $viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer();
      $viewRenderer-&gt;setView($view);
      Zend_Controller_Action_HelperBroker::addHelper($viewRenderer);
    </pre>
</li>
</ul>
<p>Je préfère personnellement choisir les vues auxquelles je souhaite appliquer le “<em>view helper</em>” plutôt que de l’utiliser dans toute l’application.</p>
<p>Vous pouvez tout d’abord choisir entre utiliser les fichiers de jQuery et jQuery UI du CDN de Google ou bien utiliser vos propres fichiers.</p>
<ul>
<li>CDN de Google : utilisé par défaut, vous pouvez spécifier la version à charger avec
<pre class="brush: php">		$view-&gt;jQuery-&gt;setVersion('1.4.2');
		$view-&gt;jQuery-&gt;setUiVersion('1.8'); // pour jQuery UI
       </pre>
</li>
<li>Vos fichiers :
<pre class="brush: php">
	// Pour inclure vous-même les fichiers dans la balise head.
	$view-&gt;jQuery()-&gt;setRenderMode(ZendX_JQuery::RENDER_JAVASCRIPT | ZendX_JQuery::RENDER_JQUERY_ON_LOAD);
	// Pour indiquer le chemin de vos fichiers et laisser le framework gérer le tout
	$view-&gt;jQuery()-&gt;
	</pre>
</li>
</ul>
<p>Petite précision toutefois, les fichiers de thèmes de jQuery UI ne sont pas disponibles sur le CDN, vous devez donc les inclure vous-même avec par exemple la fonction <em>jQuery-&gt;addStylesheet($pathToFile);</em></p>
<h5>Utilisation</h5>
<p>Tout ceci ne nous dit pas comment faire pour utiliser jQuery dans notre application, rassurez-vous c’est on ne peut plus simple.</p>
<p>Imaginons par exemple un simple lien pour charger une partie de la page en Ajax : </p>
<pre class="brush: php">echo $this-&gt;ajaxLink(&quot;Get Index&quot;, &quot;/index&quot;,
                        array('update' =&gt; '#mydiv',
                              'method' =&gt; 'POST',
                              'beforeSend' =&gt; 'aCallbackFunction()',
                              'complete' =&gt; 'alert(data)')); ?&gt;</pre>
<p>Rien de bien compliqué ici, <em>#mydiv</em> indiquant la div au sein de laquelle il faut insérer le contenu, <em>/index</em> l&#8217;url de la page à récupérer, beforeSend et complete les callback à utiliser. </p>
<p>Pas plus de code à écrire, le code généré sera inséré à l&#8217;appel de <em>$this-&gt;jQuery();</em>. </p>
<p>Mais on peut utiliser jQuery pour plus que des simples liens. Ainsi on peut dans des formulaires : </p>
<pre class="brush: php">// Créé un input avec auto-complétion
echo $this-&gt;autoComplete(&quot;country&quot;, &quot;&quot;,
                             array('source' =&gt; array('France', 'United Kingdom', 'United States', 'Germany', 'Italy', 'Spain')));
// On peut donc facilement charger la source via une base de données

// Créé un input avec un calendrier
echo $this-&gt;datePicker(&quot;datePicker&quot;, '',
                        array('defaultDate' =&gt; date('d/m/Y', time()),
                                'onClose' =&gt; new Zend_Json_Expr('myFunction')));

// Créé un slider
echo $this-&gt;slider(&quot;slider&quot;, &quot;&quot;,
                        array('min'=&gt;'0', 'max'=&gt;'100', 'step'=&gt;'5'));</pre>
<p>On peut également utiliser le framework pour créer des <em>dialogs, tabContainer, accordionContainer.</em></p>
<p>Vous pouvez en apprendre plus avec <a href="http://framework.zend.com/manual/fr/zendx.jquery.html">la documentation</a>, attention toutefois car des <em>helpers</em> sont toujours disponibles tels que <em>ZendX_JQuery_View_Helper_ColorPicker </em>ou<em> ZendX_JQuery_View_Helper_Spinner </em>alors que jQuery UI ne supporte plus les éléments.</p>
<p>Avec cette gestion de jQuery, ce dernier devient une bonne alternative à Dojo pour développer avec le Zend Framework.<br />
  <br />Je l’ai personnellement adopté, et vous comptez-vous un jour passer à jQuery grâce à cette utilisation simplifiée ?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yriase.fr/656-zend-framework-et-jquery-une-quipe-qui-gagne.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>jQuery : poster un formulaire simplement avec AJAX</title>
		<link>http://www.yriase.fr/617-jquery-poster-un-formulaire-simplement-avec-ajax.html</link>
		<comments>http://www.yriase.fr/617-jquery-poster-un-formulaire-simplement-avec-ajax.html#comments</comments>
		<pubDate>Thu, 18 Mar 2010 16:54:22 +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[PHP]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://www.yriase.fr/?p=617</guid>
		<description><![CDATA[jQuery, ce merveilleux framework qui nous permet de faire tellement de choses &#8230; Bien souvent je suis passé à côté de fonctionnalités on ne peut plus simple à utiliser mais tellement utiles. Du genre, je dois envoyer ce formulaire avec AJAX, il contient plein de champs différents, comment faire pour que ce soit le plus [...]]]></description>
			<content:encoded><![CDATA[<p><strong><a href="http://docs.jquery.com/Main_Page">jQuery</a></strong>, ce merveilleux framework qui nous permet de faire tellement de choses &#8230; Bien souvent je suis passé à côté de fonctionnalités on ne peut plus simple à utiliser mais tellement utiles.</p>
<p>Du genre, je dois envoyer ce formulaire avec AJAX, il contient plein de champs différents, comment faire pour que ce soit le plus simple et rapide possible ?</p>
<p>Tout d&#8217;abord imaginons un formulaire regroupant plusieurs champs sur toute la page.</p>
<pre class="brush: php">
<form method="post" id="formulaire">
<h3>Coordonnées</h3>

<label>Mail :
<input type="text" name="mail" value="" /></label>

<label>Téléphone :
<input type="text" name="tel" value="" /></label>

...

<label>Newsletter :
<input type="checkbox" name="newsletter" /></label>

...
<input type="submit" value="Envoyer" />
</form>
<div id="post"></div>
</pre>
<p>Rien de bien compliqué jusque là mais n&#8217;oubliez pas d&#8217;inclure la librairie jQuery !<br />
On créé ensuite la page qui va traiter nos données, appelons-la post.php : </p>
<pre class="brush: php">
<ul>
  &lt;?php
    foreach($_POST as $key => $value)
      echo "
<li>$key => $value</li>

";
  ?&gt;
 </ul>
</pre>
<p>Il ne nous reste plus que la partie qui nous intéresse ici, le code javascript : </p>
<pre class="brush: jscript">
$(document).ready(function(){
	$("#formulaire").submit(function(){
		$.ajax({type:"POST", data: $(this).serialize(), url:"post.php",
			success: function(data){
				$("#post").html(data);
			},
                        error: function(){
			        $("#post").html('Une erreur est survenue.');
			}
		});
		return false;
	});
});
</pre>
<p>Tout ce qu&#8217;on a à faire c&#8217;est ré-implémenter la fonction submit du formulaire et sérialiser ses champs avec la fonction <em>&#8216;serialize()&#8217;</em> pour envoyer les données.<br />
C&#8217;est tout bête mais je ne connaissais pas cette fonction et on ne développe pas toujours avec un IDE qui liste pour nous les fonctions à utiliser !<br />
Enfin comme dit le vieil adage : RTFM !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yriase.fr/617-jquery-poster-un-formulaire-simplement-avec-ajax.html/feed</wfw:commentRss>
		<slash:comments>1</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>

