

<?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/"
	>

<channel>
	<title>Waanser</title>
	<atom:link href="http://www.waanser.com/feed" rel="self" type="application/rss+xml" />
	<link>http://www.waanser.com</link>
	<description>Un blog utilisant WordPress</description>
	<pubDate>Thu, 07 Jan 2010 15:53:36 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Web-Service en SOAP avec php</title>
		<link>http://www.waanser.com/web-20/2346-web-service-en-soap-avec-php.html</link>
		<comments>http://www.waanser.com/web-20/2346-web-service-en-soap-avec-php.html#comments</comments>
		<pubDate>Mon, 07 Dec 2009 20:10:23 +0000</pubDate>
		<dc:creator>roul</dc:creator>
		
		<category><![CDATA[Général]]></category>

		<category><![CDATA[WEB 2.0]]></category>

		<guid isPermaLink="false">http://www.waanser.com/?p=2346</guid>
		<description><![CDATA[Dans cet article, nous allons apprendre à faire notre premier web-service SOAP en 15 minutes top chrono !
Pour suivre, il est indispensable d&#8217;utiliser eclipse, car celui-ci possède un mode graphique pour la création de web-service qui va nous faciliter la vie.
Le fonctionnement

 Avant toutes choses, je vais vous expliquer rapidement le fonctionnement d&#8217;un Web-Service.
Vous savez [...]]]></description>
			<content:encoded><![CDATA[<p>Dans cet article, nous allons apprendre à faire notre premier web-service SOAP en 15 minutes top chrono !</p>
<p>Pour suivre, il est indispensable d&#8217;utiliser eclipse, car celui-ci possède un mode graphique pour la création de web-service qui va nous faciliter la vie.</p>
<h2>Le fonctionnement</h2>
<hr/>
 Avant toutes choses, je vais vous expliquer rapidement le fonctionnement d&#8217;un Web-Service.</p>
<p>Vous savez certainement qu&#8217;un <span style="color:green"> Web-Service est un programme qui permet la communication et l&#8217;échange de données entre des applications et des systèmes totalement différents.</span><br/> <br/>Pour que le Web-Service puisse communiquer avec n&#8217;importe quels systèmes, il faut utiliser un même format de données.  Pour nous, ça sera le <span style="color:blue"> <strong>SOAP</strong></span>(c&#8217;est un protocole procédural basé sur du XML). Dans ce format, il faut aussi bien définir les données qui seront reçues et envoyées par le Web-Service.<br/><br/> Ne vous inquiétez pas si cela vous paraît trop abstrait, on va tout expliquer avec un exemple. <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<hr/>
Par exemple grâce à Web-Service, on pourrait faire communiquer une application java d&#8217;un téléphone portable avec une application en php. (ça fait rêver &#8230; :D)</p>
<p>Voici une petite illustration du fonctionnement de ce Web-Service :<br />
<br/><br />
<strong>Première étape : </strong><br />
 L&#8217;application java va faire appel au web-service en envoyant un message <strong>WSDL </strong>(en SOAP).<br />
<br/><br />
<a href="http://media.waanser.com/2009/11/etape1.jpg"><img src="http://media.waanser.com/2009/11/etape1.jpg" alt="etape1" title="etape1" width="718" height="196" class="alignnone size-full wp-image-2351" /></a></p>
<hr/>
<strong>Deuxième étape : </strong><br />
Le serveur de Web-Service reçoit la demande, effectue un traitement en fonction de celui-ci et renvoie la réponse dans un format <strong>WSDL</strong>.<br />
<br/><br/></p>
<p><a href="http://media.waanser.com/2009/12/etape2.jpg"><img src="http://media.waanser.com/2009/11/etape2.jpg" alt="SOAP PHP" title="etape2" width="680" height="175" class="size-full wp-image-2354" /></a><br />
<br/><br />
Qui avait dit que c&#8217;était compliqué les web-service <img src='http://www.waanser.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ?<br />
<br/><br />
Fini la théorie passons à la pratique, nous allons faire un Web-Service qui nous donne le jour en fonction de la date que l&#8217;on envoie.</p>
<h2>Création du wsdl</h2>
<hr/>
Par exemple, on envoie le 13/11/2009 et le web-service nous renverra vendredi. Si on fait un schéma, cela va donner ça.<br />
<br/></p>
<p><a href="http://media.waanser.com/2009/11/soapws.jpg"><img src="http://media.waanser.com/2009/11/soapws.jpg" alt="soapws" title="soapws" width="721" height="314" class="alignnone size-medium wp-image-2361" /></a></p>
<p>Nous allons créer un nouveau projet que nous appellerons <strong>MonWebService </strong>(il n&#8217;y a pas plus clair ^^).<br />
<br/><br />
On va commencer par faire <strong>le format WSDL </strong>(fichier soap) de notre web service.</p>
<hr/>
<p><a href="http://media.waanser.com/2009/12/ws11.jpg"><img src="http://media.waanser.com/2009/12/ws11-300x247.jpg" alt="ws11" title="ws11" width="300" height="247" class="alignnone size-medium wp-image-2372" /></a><br />
<br/><br />
On le nomme <strong>monFormat.wsdl</strong></p>
<p>Pour nous aider, Eclipse nous construit automatiquement un format wsdl par défaut, nous allons le reprendre et le paramétrer. Mais avant tout, je vais vous parler rapidement de l&#8217;interface. <br/></p>
<hr/><br/><br />
En bas à Gauche, vous avez remarqué 2 onglets :<br />
 &nbsp;&nbsp;&nbsp;&nbsp;<strong>Desing </strong>=> l&#8217;interface<br />
 &nbsp;&nbsp;&nbsp;&nbsp;<strong>Source </strong>=> le format wsdl que l&#8217;interface génère<br />
Rassurez vous, nous aurons pas à toucher au fichier source, on va créer notre format <strong>wsdl </strong>seulement avec l&#8217;interface <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> <br/><br />
Vous devriez voir ça, normalement :</p>
<hr/>
<p><a href="http://media.waanser.com/2009/12/ws3.jpg"><img src="http://media.waanser.com/2009/12/ws3.jpg" alt="eclipse affichage defaut wsdl soap webservice" title="ws3" width="600" height="100" class="size-medium wp-image-2381" /></a></p>
<p>C&#8217;est avec la boîte à gauche que l&#8217;on définit l&#8217;adresse du serveur du web-service ( c&#8217;est là où tout le traitement php va se faire), Dans le champ de saisie, il faudra mettre : <strong>http://localhost/MonWebService/serveur.php</strong></p>
<hr/>
A droite, ce sont les <strong>différents services</strong> (ou opérations) que le web-service propose.<br/><br />
Dans notre exemple, nous proposons qu&#8217;un seul service. On va l&#8217;appeler <strong>QuelJour</strong>.<br />
Le nom de l&#8217;opération par défaut est <strong>NewOperation </strong>en double cliquant dessus on peut le renommer.<br/><br />
C&#8217;est d&#8217;ailleurs  ce que l&#8217;on va faire en le renommant <strong>QuelJour</strong>.</p>
<hr/>
Juste en dessous, on voit 2 lignes :</p>
<p><strong>Input </strong>qui représente les données que va recevoir le Web-Service<br />
<strong>Output </strong>qui représente les données que va envoyer le Web-Service<br />
<br/><br />
Tout le monde suit ? <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<hr/>
Nous allons définir le paramètre d&#8217;entrée. </p>
<p>En entrée, on aura besoin d&#8217;une <strong>chaine de caractère(string)</strong>.<br />
Pour se faire, on fait un clique droit sur case la plus à droite de la <strong>ligne input</strong>, dans le menu contextuel<br />
On clique sur <strong>Set Type</strong> puis<strong> Existing Type</strong> et là on sélectionne <strong>string</strong>.<br />
<br/><br />
On réitère cette opération pour le paramètre de sortie.</p>
<hr/>
Ce qui va donner :<br />
<a href="http://media.waanser.com/2009/12/w2.jpg"><img src="http://media.waanser.com/2009/12/w2.jpg" alt="webservice wsdl interface eclipse" title="w2" width="600" height="100" class="size-medium wp-image-2374" /></a><br />
<br/><br />
Voilà nous avons définit notre format de web service !</p>
<hr/>
<h2>Du serveur au client</h2>
<p>On va s&#8217;attaquer à notre serveur, préparez vos doigts ça va coder !</p>
<p>On va le nommer<strong> serveur.php</strong><br />
<span style="color:red">Attention</span>, le chemin de votre fichier doit être le même que celui que vous avez paramétré dans votre web-service. <br/><br />
Ex : <span style="color:green">http://localhost/MonWebService/serveur.php</span> => <span style="color:green">C:\wam\www\MonWebService\serveur.php</span></p>
<p>Voici le code source, les commentaires parlent d&#8217;eux-même :<br />
<br/></p>
<pre class="brush: php">
// Pour supprimer le cache du web-service
ini_set(&#039;soap.wsdl_cache_enabled&#039;, 0);
// Pour définir le temp maximal d&#039;éxecution de notre web-service
ini_set(&#039;default_socket_timeout&#039;, 180);

// Nom de notre web-service
class Server {
     // Le service QuelJour que l&#039;on a définit dans notre format wsdl
    function QuelJour($parm) {
    	return &#039;Web-Service ok&#039;;
    }
}
// On tente d&#039;instancier la classe soapServer
// Si cela s&#039;avère impossible, on affiche une erreur
try {
    $server = new SoapServer(&#039;monFormat.wsdl&#039;,  array(&#039;trace&#039; =&gt; 1,&#039;encoding&#039;	=&gt; &#039;ISO-8859-1&#039;));
    // On définit la classe qui va gérer les requêtes SOAP (pour nous c&#039;est la class Server)
    $server -&gt; setclass(&#039;Server&#039;);
    $server-&gt;setPersistence(SOAP_PERSISTENCE_REQUEST);
} catch (Exception $e) {
    echo &#039;erreur&#039;.$e;
}
// Si l&#039;appel provient d&#039;un Web-Service
if ($_SERVER[&#039;REQUEST_METHOD&#039;] == &#039;POST&#039;) {
	try {
		$server -&gt; handle();}
	catch (Exception $e) {
    echo &#039;erreur&#039;.$e;
	}
}
// Facultatif seulement pour montrer les fonctions disponibles par le web-service
else {
    echo &#039;&lt;strong&gt;This SOAP server can handle following functions : &lt;/strong&gt;&#039;;
    echo &#039;&lt;ul&gt;&#039;;
    foreach($server -&gt; getFunctions() as $func) {
        echo &#039;&lt;li&gt;&#039; , $func , &#039;&lt;/li&gt;&#039;;
    }
    echo &#039;&lt;/ul&gt;&#039;;
}
</pre>
<p><br/><br />
Si tout se passe bien et si on se rend sur cette adresse :<br />
http://localhostMonWebService/serveur.php<br />
<br/><br />
On devrait voir :<br />
<img src="http://media.waanser.com/2009/12/ws4.jpg" alt="web service php serveur soap wsdl" title="ws4" width="449" height="82" class="size-full wp-image-2385" /></a><br />
<br/><br />
Tout marche ? On est trop fort \o/</p>
<hr/>
Pour l&#8217;instant, on va juste afficher un message qui indique que le web-service fonctionne bien. (eh oui, on commence simple pour faire plus compliquer ensuite <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> )<br />
<br/><br />
Côté client, nous allons créer un fichier <strong>client.php</strong></p>
<pre class="brush: php">
// Pour supprimer le cache du web-service
ini_set(&#039;soap.wsdl_cache_enabled&#039;, 0);

// Nouveau Client SOAP
try {
    // Nouvelle instance de la classe soapClient
   $client = new SoapClient(&#039;http://localhost/MonWebService/monFormat.wsdl&#039;, array(&#039;trace&#039; =&gt; 1));
   $parm = date(&#039;Y-m-d&#039;);
    // Appel de la méthode QuelJour du service web
   try{
    $oReturn =  $client -&gt; __soapCall(&#039;QuelJour&#039;, array(&#039;string&#039; =&gt;$parm));
	} catch (SoapFault $fault) {
    	trigger_error(&quot;SOAP Fault: (faultcode: {$fault-&gt;faultcode}, faultstring: {$fault-&gt;faultstring})&quot;, E_USER_ERROR);
	}
        // affiche le résultat
	var_dump($oReturn);
} catch (SoapFault $fault) {
    echo &#039;erreur : &#039;.$fault;
}
</pre>
<hr/>
On a plus qu&#8217;à se rendre sur <strong>http://localhostMonWebService/client.php</strong> pour voir notre message.<br />
<br/><br />
Eh voilà la mécanique est en place, on va pouvoir améliorer notre web-service, mais là on ne va rien apprendre, ce n&#8217;est que du php :).<br />
<br/><br />
On va revenir sur notre serveur (fichier <strong>serveur.php</strong>), dans la fonction <strong>QuelJour</strong><br />
pour traiter la chaîne en paramètre.<br />
<br/><br />
Notre fonction va donc devenir : </p>
<pre class="brush: php">
    function QuelJour($parm) {
    	$aJour[1] = &#039;Lundi&#039;;
    	$aJour[2] = &#039;Mardi&#039;;
    	$aJour[3] = &#039;Mercredi&#039;;
    	$aJour[4] = &#039;Jeudi&#039;;
    	$aJour[5] = &#039;Vendredi&#039;;
    	$aJour[6] = &#039;Samedi&#039;;
    	$aJour[0] = &#039;Dimanche&#039;;
    	return $aJour[date(&quot;w&quot;,strtotime($parm))];
    }
</pre>
<hr/>
<h2>Debugger un web-service</h2>
<p>Le debugage d&#8217;un web-service est toujours difficile. Le client interprète directement la réponse du web-service et si la réponse n&#8217;est pas correctement formaté (qui ne respecte pas le format wsdl du web-service), il affiche une erreur du type : <br/><br />
<span style="color:red">( ! ) Fatal error: SOAP Fault: (faultcode: Client, faultstring: looks like we got no XML document) in /var/www/MonWebService/client.php on line 17 Call Stack #TimeMemoryFunctionLocation 10.000158584{main}( )../client.php:0 20.002180708trigger_error ( )../client.php:17</span></p>
<hr/>
Mais il ne renvoie pas l&#8217;erreur php du serveur. Je suis d&#8217;accord avec vous, ce n&#8217;est pas facile la vie d&#8217;un développeur :&#8217;(<br />
Pour savoir, ce que renvoie exactement le serveur, nous allons utiliser l&#8217;application <strong>SOAPUI</strong><br />
<br/><br />
Une fois installée, vous allez créer un projet. Pour ceci vous allez dans<br />
<strong>File </strong>→ <strong>New soapUIProject</strong>.</p>
<hr/>
Là, une fenêtre apparaît, vous cliquez sur parcourir (browse&#8230;), vous sélectionnez votre fichier wsdl<br />
(<strong>monFormat.wsdl</strong>) puis <strong>OK</strong>.<br/><br />
<a href="http://media.waanser.com/2009/12/ws5.jpg"><img src="http://media.waanser.com/2009/12/ws5.jpg" alt="web service xsql soapui" title="ws5" width="180" height="47" class="size-full wp-image-2390" /></a></p>
<hr/>
Dans le menu <strong>projects</strong>, vous déroulez votre arborescence <strong>monformat </strong> jusqu&#8217;à voir le nom de la fonction que vous voulez tester, (pour nous c&#8217;est <strong>Queljour</strong>).<br/><br />
Clique droit puis<strong> New Request</strong> et SoapUI créer votre interface pour communiquer avec les web-service.<br />
<br/><br />
Si vous avez bien suivit, voila ce que vous devriez voir :<br />
<br/><br />
<a href="http://media.waanser.com/2009/12/ws6.jpg"><img src="http://media.waanser.com/2009/12/ws6.jpg" alt="webservice debug entete http" title="ws6" width="650" height="90" class="size-full wp-image-2391" /></a><br/><br />
Vous avez plus qu&#8217;à faire les tests et récupérer directement le résultat du web service. </p>
<p><strong>Les erreurs : </strong><br />
<br/><br />
Pendant le développement de différents de web-services, je suis tombé sur des erreurs de toute part, malheureusement je ne les ai pas tous mémorisé mais voici un début de liste qui pourrait vous aider. Si vous aussi vous êtes embétez un petit commentaire et on pourra certainement vous aider. <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<hr/>
SoapFault exception: [HTTP] Not Found in /var/www/lab/customer.php:10 Stack trace: #0 [internal function]: SoapClient->__doRequest(&#8217;__call(&#8217;getServerDate&#8217;, Array) #2 {main}<br />
=> wsdl trouve pas le serveur</p>
]]></content:encoded>
			<wfw:commentRss>http://www.waanser.com/web-20/2346-web-service-en-soap-avec-php.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>Google Maps, marqueur, bulle info, déplacement</title>
		<link>http://www.waanser.com/javascript/api-google-map/2262-google-maps-marqueur-bulle-info-deplacement.html</link>
		<comments>http://www.waanser.com/javascript/api-google-map/2262-google-maps-marqueur-bulle-info-deplacement.html#comments</comments>
		<pubDate>Sun, 22 Nov 2009 12:27:41 +0000</pubDate>
		<dc:creator>roul</dc:creator>
		
		<category><![CDATA[API Google Maps]]></category>

		<guid isPermaLink="false">http://www.waanser.com/?p=2262</guid>
		<description><![CDATA[Dans ce tutoriel, nous allons pousser nos connaissances dans l&#8217;Api Google Maps.
Nous allons voir comment mettre en place des marqueurs, des bulles info et des déplacements sur les cartes.
Vous allez voir c&#8217;est très simple.  
Préparation
On va reprendre l&#8217;affichage d&#8217;une simple carte (celle du tutoriel précédent)
Je vous rappelle le code source :

&#60;!DOCTYPE html PUBLIC &#34;-//W3C//DTD [...]]]></description>
			<content:encoded><![CDATA[<p>Dans ce tutoriel, nous allons pousser nos connaissances dans l&#8217;Api Google Maps.<br />
Nous allons voir comment mettre en place des marqueurs, des bulles info et des déplacements sur les cartes.<br />
Vous allez voir c&#8217;est très simple. <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2>Préparation</h2>
<p>On va reprendre l&#8217;affichage d&#8217;une simple carte (celle du <a href="http://www.waanser.com/javascript/api-google-map/2054-notre-premiere-carte-avec-lapi-google-maps.html">tutoriel précédent</a>)</p>
<p>Je vous rappelle le code source :</p>
<pre class="brush: javascript">
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot; &quot;http://www.w3.org/TR/html4/loose.dtd&quot;&gt;
&lt;html&gt;
&lt;head&gt;
	&lt;!-- source:www.waanser.com --&gt;
	&lt;!-- auteur:roul --&gt;
	&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=ISO-8859-1&quot;&gt;
	&lt;title&gt;Jardin des Tuileries&lt;/title&gt;
	&lt;script src=&quot;http://maps.google.com/maps?file=api;key=ABQIAAAAzg_ZseRgldxWcy2tNYAEYRT2yXp_ZAY8_ufC3CFXhHIE1NvwkxSS7F5U7RNXncIf02uklkFtcG80gw&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
	&lt;script type=&quot;text/javascript&quot;&gt;
		var map;
	 	function initialize() {
	      if (GBrowserIsCompatible()) {
	        map = new GMap2(document.getElementById(&quot;map&quot;));
	        map.setCenter(new GLatLng(48.86175,2.331119), 15);
	        map.setUIToDefault();
	      }
	    }
	 &lt;/script&gt;
	&lt;div id=&quot;map&quot; style=&quot;width: 500px; height: 300px&quot;&gt;&lt;/div&gt;
	&lt;script type=&quot;text/javascript&quot;&gt;
		window.onload = function(){initialize()};
	&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<h2>Marqueur</h2>
<p>Pour mettre en place des marqueurs, il faut juste donner les coordonnées.<br />
Là, on est en terrain connu, on va créer un point géographique. </p>
<p>Dans cet exemple, on va mettre un point sur la pyramide du Louvre.</p>
<pre class="brush: javascript">
var point = new GLatLng(48.860800,2.335800);
</pre>
<p>Et là, on a plus qu&#8217;à mettre le marqueur :</p>
<pre class="brush: javascript">
map.addOverlay(new GMarker(point));
</pre>
<div id="map" style="width: 500px; height: 300px"></div>
<p>Facile, non ?</p>
<h2>Bulle info</h2>
<p>Maintenant que l&#8217;on sait mettre des marqueurs, nous allons voir comment mettre des bulles info dans nos cartes.</p>
<p>C&#8217;est avec la commande <strong>map.openInfoWindow</strong> que nous allons afficher une bulle info avec le message &#8220;Demain, rdv ici !&#8221;<br />
Voici la syntaxe :</p>
<p>map.openInfoWindow(<em>point géographique</em>,<em>nœud de texte</em>)</p>
<p>Et Voici le code source :</p>
<pre class="brush: javascript">
map.openInfoWindow(new GLatLng(48.860800,2.335800),
                   document.createTextNode(&quot;Demain, rdv ici !&quot;));
</pre>
<div id="map2" style="width: 500px; height: 300px"></div>
<h2>Déplacement</h2>
<p>Pour finir, nous allons voir comment nous déplacer dans une carte.</p>
<p>C&#8217;est la commande panTo qui va nous permettre de centrer l&#8217;utilisateur sur un lieu défini.<br />
Il prend en paramètre un point géographique (un objet GLatLng).</p>
<p>Voici un ensemble d&#8217;utilisation, on va centrer la carte sur la place concorde à Paris :</p>
<pre class="brush: javascript">
  function animate() {
   	map.panTo(new GLatLng(48.865731,2.32378));
  }
</pre>
<p>Pour appliquer cet exemple, nous allons créer un bouton.<br />
A l&#8217;instant même de cliquer sur ce bouton, le script va se lancer automatiquement.<br />
(Ce qui va normalement centrer la carte sur la place concorde <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> )</p>
<pre class="brush: html">
&lt;form&gt;
&lt;p&gt;
&lt;input type=&quot;button&quot; value=&quot;Au concorde !&quot; onclick=&quot;animate();&quot; /&gt;
&lt;/p&gt;
&lt;/form&gt;
</pre>
<p>Eh voilà, le résultat :</p>
<div id="map3" style="width: 500px; height: 300px"></div>
<p>   <br/></p>
<form id="form_waan">
<input type="button" value="Au concorde !" onclick="animate();" />
</form>
<p><br/></p>
<p>Maintenant que vous êtes des As de google map, je vous laisse faire des merveilles avec l&#8217;api de google.</p>
<p> <script type="text/javascript">
	window.onload = function(){initialize();initialize2();;initialize3()};
</script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.waanser.com/javascript/api-google-map/2262-google-maps-marqueur-bulle-info-deplacement.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>Installer et utiliser Pear</title>
		<link>http://www.waanser.com/php/general-php/2237-tutoriel-installer-pear.html</link>
		<comments>http://www.waanser.com/php/general-php/2237-tutoriel-installer-pear.html#comments</comments>
		<pubDate>Wed, 01 Jul 2009 19:25:27 +0000</pubDate>
		<dc:creator>roul</dc:creator>
		
		<category><![CDATA[Général]]></category>

		<guid isPermaLink="false">http://www.waanser.com/?p=2237</guid>
		<description><![CDATA[Pear est une bibliothèque php qui permet de gérer les installations des librairies php.
Nous allons voir dans ce tutoriel comment installer PEAR et faire une première utilisation.
Installation
Pour l&#8217;installation, nous allons commencer à ouvrir une invite de commande dos.
Et commencer par faire :
set PATH=%PATH%;C:\wamp\php
Normalement dans votre dossier php, vous avez un dossier PEAR, il faut s&#8217;y [...]]]></description>
			<content:encoded><![CDATA[<p>Pear est une bibliothèque php qui permet de gérer les installations des librairies php.<br />
Nous allons voir dans ce tutoriel comment installer PEAR et faire une première utilisation.</p>
<h2>Installation</h2>
<p>Pour l&#8217;installation, nous allons commencer à ouvrir une invite de commande dos.<br />
Et commencer par faire :</p>
<p>set PATH=%PATH%;C:\wamp\php</p>
<p>Normalement dans votre dossier php, vous avez un dossier PEAR, il faut s&#8217;y rendre. </p>
<p>Par exemple, pour wamp il faut taper :     cd C:\wamp\php\PEAR</p>
<hr/>
<p>Vous trouverez un fichier <strong>php go-pear.phar</strong>, il suffit de l&#8217;exécuter :</p>
<p>php go-pear.phar</p>
<p>Et là, l&#8217;installation se lance <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div id="attachment_2238" class="wp-caption alignnone" style="width: 453px"><a href="http://media.waanser.com/2009/06/pear.jpg"><img src="http://media.waanser.com/2009/06/pear.jpg" alt="installation pear" title="pear" width="443" height="110" class="size-full wp-image-2238" /></a><p class="wp-caption-text">installation pear</p></div>
<p>Si vous voulez que l&#8217;installation de pear concerne toutes les sessions d&#8217;utilisateurs, il faut mettre system.</p>
<hr/>
<p>Un récapitulatif des chemins de configuration de pear est affiché, vous pouvez laisser la configuration par défaut, elle est très bien.</p>
<div id="attachment_2239" class="wp-caption alignnone" style="width: 575px"><a href="http://media.waanser.com/2009/06/pear1.jpg"><img src="http://media.waanser.com/2009/06/pear1.jpg" alt="installation pear" title="pear1" width="565" height="306" class="size-full wp-image-2239" /></a><p class="wp-caption-text">installation pear</p></div>
<p>Dernière étape, on accepte de modifier notre fichier php.ini pour qu&#8217;il prenne en compte notre bibliothèque PEAR.</p>
<div id="attachment_2240" class="wp-caption alignnone" style="width: 542px"><a href="http://media.waanser.com/2009/06/pear2.jpg"><img src="http://media.waanser.com/2009/06/pear2.jpg" alt="pear installation" title="pear" width="532" height="104" class="size-full wp-image-2240" /></a><p class="wp-caption-text">pear installation</p></div>
<p>Eh voilà c&#8217;est installé <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div id="attachment_2241" class="wp-caption alignnone" style="width: 440px"><a href="http://media.waanser.com/2009/06/pear3.jpg"><img src="http://media.waanser.com/2009/06/pear3.jpg" alt="pear installation" title="pear3" width="430" height="119" class="size-full wp-image-2241" /></a><p class="wp-caption-text">pear installation</p></div>
<hr/>
<h2>Première utilisation</h2>
<p>Nous allons installer la librairie <strong>DATE</strong></p>
<p>Dans un premier temps nous allons faire :</p>
<p>set PATH=%PATH%;C:\wamp\php\PEAR</p>
<p>Il faut aller ensuite sur <a href="http://pear.php.net/packages.php">http://pear.php.net/packages.php</a>.</p>
<p>Date and Time -> Date -> Download.</p>
<hr/>
<p>On va récupérer la commande pour le téléchargement :</p>
<div id="attachment_2242" class="wp-caption alignnone" style="width: 284px"><a href="http://media.waanser.com/2009/06/pear4.jpg"><img src="http://media.waanser.com/2009/06/pear4.jpg" alt="utilisation pear" title="pear4" width="274" height="100" class="size-full wp-image-2242" /></a><p class="wp-caption-text">utilisation pear</p></div>
<p>Pour moi, il faut taper :</p>
<p>pear install Date-1.5.0a1</p>
<hr/>
Si vous avez une erreur du type :</p>
<p>PEAR Fatal error: Allowed memory size of 8388608 bytes exhausted</p>
<p>Il faut modifier votre fichier C:\wamp\php\php.ini, aller dans l&#8217;attribut memory_limit = 8M<br />
et remplacer par : memory_limit = 256M</p>
<p>Comme ça, on est tranquille <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<hr/>
<pre class="brush: php">
// on fait appel a notre librairie PEAR
set_include_path(get_include_path() . &quot;;C:\wamp\php\PEAR\pear&quot;);

require_once &#039;DATE.php&#039;;
$now = new Date();

//UNIX timestamp:
echo $now-&gt;getTime().&#039;&lt;br/&gt;&#039;;

//format de date iso
echo $now-&gt;getDate();
</pre>
<p>Et voilà, vous savez utiliser PEAR <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.waanser.com/php/general-php/2237-tutoriel-installer-pear.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>Layout et connexion à une base avec Zend</title>
		<link>http://www.waanser.com/php/zend-framework/2201-layout-et-connexion-a-une-base-avec-zen-zend_db.html</link>
		<comments>http://www.waanser.com/php/zend-framework/2201-layout-et-connexion-a-une-base-avec-zen-zend_db.html#comments</comments>
		<pubDate>Tue, 09 Jun 2009 21:39:16 +0000</pubDate>
		<dc:creator>roul</dc:creator>
		
		<category><![CDATA[Zend Framework]]></category>

		<guid isPermaLink="false">http://www.waanser.com/?p=2201</guid>
		<description><![CDATA[Notion fondamentale de zend framework, nous allons voir dans cet article comment organiser le contenu de nos pages avec l&#8217;utilisation des layouts. Nous allons aussi faire une première approche de Zend_Db, la classe de zend qui manipule la base de données.
Les layouts
Dans cet article, nous allons reprendre  le code source du tutoriel précédent.
Pour éviter [...]]]></description>
			<content:encoded><![CDATA[<p>Notion fondamentale de zend framework, nous allons voir dans cet article comment organiser le contenu de nos pages avec l&#8217;utilisation des layouts. Nous allons aussi faire une première approche de <strong>Zend_Db</strong>, la classe de zend qui manipule la base de données.<span id="more-2201"></span></p>
<h2>Les layouts</h2>
<p>Dans cet article, nous allons reprendre <a href='http://media.waanser.com/2009/04/zenfacile.rar'> le code source</a> du tutoriel précédent.</p>
<p>Pour éviter d&#8217;avoir à recopier les mêmes morceaux de code pour chaque page, il est important de bien savoir structurer nos pages (définir une entête,un corps, un pied de page &#8230;). Avec Zend cette organisation se fait à travers les layouts.</p>
<pre class="brush: php">
// setup controller
$frontController = Zend_Controller_Front::getInstance();
$frontController-&gt;throwExceptions(true);
$frontController-&gt;setControllerDirectory(&#039;./application/controllers&#039;);
// on définit le chemin des layouts
$aOptions = array(
    &#039;layout&#039;     =&gt; &#039;home&#039;,
    &#039;layoutPath&#039; =&gt; &#039;./application/layouts&#039;
);
Zend_Layout::startMvc($aOptions);
</pre>
<hr/>
<strong>Zend_Layout::startMvc($aOptions);</strong><br />
Démarre le layout en prenant les options en paramètre.<br />
Dans les options :<br />
<strong>layoutPath </strong>=> le chemin où seront stockés les layouts<br />
<strong>layout    </strong>=> le nom du layout</p>
<hr/>
<p>Vous l&#8217;aurez compris, nous allons créer un dossier <strong>layouts</strong> dans notre dossier application où seront stockés nos layouts. Voici notre nouvelle arborescence :</p>
<div id="attachment_2203" class="wp-caption alignnone" style="width: 174px"><a href="http://media.waanser.com/2009/06/zend.jpg"><img src="http://media.waanser.com/2009/06/zend.jpg" alt="layouts zend" title="zend" width="164" height="127" class="size-full wp-image-2203" /></a><p class="wp-caption-text">layouts zend</p></div>
<hr/>
zenfacile => application => layouts => home.phtml</p>
<hr/>
<pre class="brush: html">
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot;
        &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; xml:lang=&quot;fr&quot; lang=&quot;fr&quot;&gt;
&lt;head&gt;
    &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html;charset=utf-8&quot; /&gt;
	&lt;title&gt;&lt;?php echo $this-&gt;title; ?&gt;&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div id=&quot;content&quot;&gt;
    &lt;h1&gt;&lt;?php echo $this-&gt;welcome; ?&gt;&lt;/h1&gt;
    &lt;?php echo $this-&gt;layout()-&gt;content; ?&gt;
&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p><strong> $this->layout()->content;</strong> sera le contenu de nos pages.</p>
<p>Nous allons retourner dans notre contrôleur principal.</p>
<hr/>
zenfacile => application => controllers => IndexControler.php</p>
<hr/>
<pre class="brush: php">
class IndexController extends Zend_Controller_Action
{
    function indexAction()
    {
    	    $this-&gt;view-&gt;title = &quot;Mes amis&quot;;
    	    $this-&gt;view-&gt;welcome = &quot;Bienvenue&quot;;
    }
</pre>
<p>Le rendu n&#8217;est pas super, mais ça au moins le mérite de montrer que ça marche.</p>
<div id="attachment_2210" class="wp-caption alignnone" style="width: 251px"><a href="http://media.waanser.com/2009/06/zend1.jpg"><img src="http://media.waanser.com/2009/06/zend1.jpg" alt="zend layout" title="zend1" width="241" height="101" class="size-full wp-image-2210" /></a><p class="wp-caption-text">zend layout</p></div>
<h2>La base de données avec Zend_Db </h2>
<p>Pour se connecter à la base de données, il faut bien naturellement indiquer les identifiants de connexions.<br />
Avec Zend, on passe par un fichier de configuration ini.</p>
<hr/>
zenfacile => index.php</p>
<hr/>
<pre class="brush: php">
Zend_Loader::registerAutoload();
//on définit un nouvel objet de configuration
$oConfig = new Zend_Config_Ini(&#039;./application/config.ini&#039;, &#039;connexion&#039;);
// Mise en place de la BDD
$oDb = Zend_Db::factory($oConfig-&gt;db);
// on définit notre objet de base de données par défaut
Zend_Db_Table::setDefaultAdapter($oDb);
</pre>
<p>new Zend_Config_Ini(le chemin de notre fichier ini, la section concerner);</p>
<hr/>
zenfacile => application => config.ini</p>
<hr/>
<p>[connexion]<br />
db.adapter = PDO_MYSQL<br />
db.params.host = localhost<br />
db.params.username = root<br />
db.params.password =<br />
db.params.dbname = zendfacile</p>
<p>Nous allons créer la base de donnée, voici la table :</p>
<pre class="brush: sql">
CREATE TABLE ami (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
nom VARCHAR( 255 ) NOT NULL ,
prenom VARCHAR( 255 ) NOT NULL
)
</pre>
<p>Les données :</p>
<pre class="brush: sql">
INSERT INTO zendfacile.ami (id ,nom ,prenom)
VALUES (NULL , &#039;Laporte&#039;, &#039;Jean&#039;);

INSERT INTO zendfacile.ami (id ,nom ,prenom)
VALUES (NULL , &#039;LaPie&#039;, &#039;Marie&#039;);
</pre>
<p>Maintenant que notre base est faite, on va s&#8217;attaquer au code <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<hr/>
zenfacile => application => controllers => IndexControler.php</p>
<hr/>
<pre class="brush: php">
class IndexController extends Zend_Controller_Action
{
    function indexAction()
    {
    	    $this-&gt;view-&gt;title = &quot;Mes amis&quot;;
    	    $this-&gt;view-&gt;welcome = &quot;Bienvenue&quot;;
    	    $oAmi = new Ami();
    	     $this-&gt;view-&gt;ami = $oAmi-&gt;fetchAll();
    }
</pre>
<p> $oAmi = new Ami();<br />
va faire appel au modéle ami. On l&#8217;a pas créé ?<br />
j&#8217;allais l&#8217;oublier <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<hr/>
zenfacile => application => models=> Ami.php</p>
<hr/>
<pre class="brush: php">
class Ami extends Zend_Db_Table
{
    protected $_name = &#039;ami&#039;;
}
</pre>
<p>On a plus qu&#8217;à afficher notre résultat :</p>
<pre class="brush: html">
&lt;table&gt;
&lt;tr&gt;
	&lt;th&gt;Nom&lt;/th&gt;
	&lt;th&gt;Prenom&lt;/th&gt;
	&lt;th&gt;&amp;amp;amp;amp;amp;amp;nbsp;&lt;/th&gt;
&lt;/tr&gt;

&lt;?php foreach($this-&gt;ami as $ami) : ?&gt;
&lt;tr&gt;
	&lt;td&gt;&lt;?php echo $ami-&gt;nom;?&gt;&lt;/td&gt;
	&lt;td&gt;&lt;?php echo $ami-&gt;prenom;?&gt;&lt;/td&gt;

&lt;/tr&gt;
&lt;?php endforeach; ?&gt;
&lt;/table&gt;
</pre>
<p>C&#8217;est pas beau, mais on a ce que l&#8217;on a demandé <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> :<br />
<div id="attachment_2214" class="wp-caption alignnone" style="width: 215px"><a href="http://media.waanser.com/2009/06/zend2.jpg"><img src="http://media.waanser.com/2009/06/zend2.jpg" alt="Zend_Db" title="zend" width="205" height="190" class="size-full wp-image-2214" /></a><p class="wp-caption-text">Zend_Db</p></div><br />
<a href='http://media.waanser.com/2009/06/zenfacile.rar'>Voici le pack complet qui regroupe tout le code source fonctionnel</a><br />
<br/></p>
<p>Voilà une première mise en bouche des possibilités de Zend, dans les prochains articles nous irons plus loin dans l&#8217;univers de ZEND.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.waanser.com/php/zend-framework/2201-layout-et-connexion-a-une-base-avec-zen-zend_db.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>FBML techniques de propagation virales</title>
		<link>http://www.waanser.com/php/api-facebook/2147-fbml-api-facebook-les-techniques-de-propagation.html</link>
		<comments>http://www.waanser.com/php/api-facebook/2147-fbml-api-facebook-les-techniques-de-propagation.html#comments</comments>
		<pubDate>Fri, 05 Jun 2009 16:44:36 +0000</pubDate>
		<dc:creator>roul</dc:creator>
		
		<category><![CDATA[Api Facebook]]></category>

		<guid isPermaLink="false">http://www.waanser.com/?p=2147</guid>
		<description><![CDATA[La force d&#8217;une application facebook est le fait qu&#8217;elle peut toucher un grand nombre d&#8217;utilisateur très rapidement à un cout nul. Pour cela il faut savoir utiliser les techniques de propagation. Nous allons voir cela dans cet article.
Les demandes d&#8217;ajouts
Nous allons commencer par faire les demandes d&#8217;ajouts.

Si vous ne l&#8217;avez déjà pas fait, pour pouvoir [...]]]></description>
			<content:encoded><![CDATA[<p>La force d&#8217;une application facebook est le fait qu&#8217;elle peut toucher un grand nombre d&#8217;utilisateur très rapidement à un cout nul. Pour cela il faut savoir utiliser les techniques de propagation. Nous allons voir cela dans cet article.</p>
<h2>Les demandes d&#8217;ajouts</h2>
<p>Nous allons commencer par faire les demandes d&#8217;ajouts.</p>
<hr />
Si vous ne l&#8217;avez déjà pas fait, pour pouvoir tester les notifications il est essentiel de rendre public votre application.<br />
Il faut donc que vous retourner dans les paramètres de votre application.<br />
Il faudra ensuite se rendre dans l&#8217;onglet <strong>Paramètres avancées</strong>, pour désactiver le mode bac à sable. (il devrait plutôt s&#8217;appeler mode développeur, non ? <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> )</p>
<div id="attachment_2128" class="wp-caption alignnone" style="width: 334px"><a href="http://media.waanser.com/2009/05/facebook8.jpg"><img class="size-full wp-image-2128" title="facebook8" src="http://media.waanser.com/2009/05/facebook8.jpg" alt="api facebook mode bac à sable" width="324" height="31" /></a><p class="wp-caption-text">api facebook mode bac à sable</p></div>
<p>Aussi, je vous conseille aussi de créer un deuxième compte plutôt que piquer celui de votre sœur <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Nous allons donc créer une page de demande d&#8217;ajout.</p>
<p>Voici ce que l&#8217;on va mettre, les explications sont juste en-dessous :</p>
<pre class="brush: html">
&lt;!-- demande d&#039;ajout --&gt;
&lt;fb:fbml&gt;
&lt;fb:request-form action=&quot;index.php&quot; method=&quot;POST&quot; invite=&quot;true&quot; type=&quot; De Malade &quot; content=&quot;Je suis sur que je te bats facilement au quizz.&quot;
&lt;?php echo htmlentities(&quot;&lt;fb:req-choice url=\&quot;http://apps.facebook.com/waanser/\&quot; label=\&quot;J&#039;accepte le défis\&quot;&quot;) ?&gt;&quot; &gt;
&lt;fb:multi-friend-selector showborder=&quot;false&quot; actiontext=&quot;Défie tes amis !&quot;&gt;
&lt;/fb:request-form&gt;
&lt;/fb:fbml&gt;
</pre>
<p>Voilà ce que ça va donner :</p>
<div id="attachment_2111" class="wp-caption alignnone" style="width: 432px"><a href="http://media.waanser.com/2009/05/facebook2.jpg"><img class="size-full wp-image-2111" title="facebook2" src="http://media.waanser.com/2009/05/facebook2.jpg" alt="demande d'ajouts " width="422" height="150" /></a><p class="wp-caption-text">facebook demande d&#39;ajouts </p></div>
<p>Même si c&#8217;est long, on va y aller pas à pas :</p>
<hr />
<dl>
<dt><strong>action = &#8220;index.php&#8221;</strong></dt>
<dd>Une fois le formulaire validé, l&#8217;application va nous rediriger vers la page index.php</dd>
<dt><strong>method = &#8220;POST&#8221;</strong></dt>
<dd>Tout comme les formulaires traditionnels, c&#8217;est la méthode d&#8217;envoie des données (POST ou GET)</dd>
<dt><strong>invite = &#8220;true&#8221;</strong></dt>
<dd>Pour indiquer que le formulaire est une invitation</dd>
<dt><strong><strong>type =  &#8221; De Malade &#8220;</strong></strong></dt>
<dd>C&#8217;est le texte qui va s&#8217;afficher à la fin de l&#8217;entête de l&#8217;invitation</dd>
<dt><strong>content = &#8220;Je suis sur &#8230;</strong></dt>
<dd>Le contenu du message</dd>
<dt><strong>&lt;fb:req-choice</strong></dt>
<dd>C&#8217;est pour créer un bouton</dd>
<dt><strong>url = &#8220;http://apps.facebook.com/waanser/&#8221;</strong></dt>
<dd>L&#8217;url que redirige la fenêtre</dd>
<dt><strong>label = &#8220;J&#8217;accepte le défis&#8221;</strong></dt>
<dd>Le message sur le bouton</dd>
<dt><strong>&lt;fb:multi-friend-selector</strong></dt>
<dd>La fenêtre où l&#8217;utilisateur choisit les amis à défier</dd>
</dl>
<hr />
<p>Eh oui, facebook nous laisse la possibilité de tout paramétrer <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2>Les fils d&#8217;actualités</h2>
<p>Publier les fils d&#8217;actualités, est une des fonction phare de facebook.</p>
<p>Pour créer ces fils d&#8217;actualités, il faut dans un premier temps créer et enregistrer les maquettes d&#8217;évènements.</p>
<p>Pour enregistrer les maquettes de fils d&#8217;actualités c&#8217;est par <a href="http://developers.facebook.com/tools.php?feed">ici</a>.<br />
Vous avez reconnu ? C&#8217;est la page boîte à outil que facebook propose pour les développeurs.</p>
<hr />
Étape très difficile ^^<br />
La première étape sera de sélectionner l&#8217;application qui va utiliser la maquette.</p>
<div id="attachment_2168" class="wp-caption alignnone" style="width: 337px"><a href="http://media.waanser.com/2009/06/api_facebook.png"><img class="size-full wp-image-2168" title="api_facebook" src="http://media.waanser.com/2009/06/api_facebook.png" alt="api facebook" width="327" height="90" /></a><p class="wp-caption-text">api facebook</p></div>
<p>Vous avez la possibilité de faire 2 types d&#8217;actualités :</p>
<ul>
<li>les actualités standards</li>
<li>les actualités sur une ligne</li>
</ul>
<h2>Comment créer une maquette</h2>
<p>Vous tombez sur un panneau d&#8217;administration, c&#8217;est avec ça que l&#8217;on va faire notre fameuse maquette.</p>
<p>Là, c&#8217;est la structure de votre maquette :</p>
<div id="attachment_2117" class="wp-caption alignnone" style="width: 327px"><a href="http://media.waanser.com/2009/05/facebook3.jpg"><img class="size-full wp-image-2117" title="facebook3" src="http://media.waanser.com/2009/05/facebook3.jpg" alt="facebook template" width="317" height="52" /></a><p class="wp-caption-text">facebook template</p></div>
<p>On le devine tout seul, cette partie c&#8217;est le rendu :</p>
<div id="attachment_2118" class="wp-caption alignnone" style="width: 192px"><a href="http://media.waanser.com/2009/05/facebook4.jpg"><img class="size-full wp-image-2118" title="facebook4" src="http://media.waanser.com/2009/05/facebook4.jpg" alt="rendu maquette facebook" width="182" height="61" /></a><p class="wp-caption-text">rendu maquette facebook</p></div>
<p>Et enfin, c&#8217;est un exemple de données que l&#8217;on va appliquer dans la structure :</p>
<div id="attachment_2119" class="wp-caption alignnone" style="width: 336px"><a href="http://media.waanser.com/2009/05/facebook5.jpg"><img class="size-full wp-image-2119" title="facebook5" src="http://media.waanser.com/2009/05/facebook5.jpg" alt="maquette facebook" width="326" height="141" /></a><p class="wp-caption-text">maquette facebook</p></div>
<hr />
<a href="http://www.perdu.com">Perdu ?</a> <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Il faut savoir que la maquette est constituée d&#8217;une structure (qui ne changera jamais) et de données dynamique.<br />
On veut que notre file d&#8217;actualité ressemble à ça :</p>
<hr />
<div id="attachment_2120" class="wp-caption alignnone" style="width: 207px"><a href="http://media.waanser.com/2009/05/facebook6.jpg"><img class="size-full wp-image-2120" title="facebook6" src="http://media.waanser.com/2009/05/facebook6.jpg" alt="exemple maquette facebook" width="197" height="31" /></a><p class="wp-caption-text">exemple maquette facebook</p></div>
<p>Pour mieux comprendre, nous allons décomposer le message  :</p>
<p>donnée : <span style="color:red"> rouge </span><br />
structure : <span style="color:green"> vert </span><br />
<span style="color:red"><strong>Julien </strong></span><span style="color:green">maitrise </span><span style="color:red"> <strong>l&#8217;histoire</strong></span><span style="color:green"> à </span><span style="color:red"> <strong>65</strong></span><span style="color:green">%</span></p>
<p>Il savoir que facebook appel les données dynamiques ; <strong>un jeton</strong>.</p>
<p>Pour indiquer les données dynamiques, nous allons utiliser cette syntaxe :<em> {*nom du jeton*}</em><br />
La maquette va ressembler à ça :<br />
<em>{*actor*}</em> maitrise <em>{*theme*}</em> à <em>{*points*}</em> %</p>
<hr />
Si vous appuyez sur le bouton mettre l&#8217;aperçu à jour, vous aurez une belle erreur (Feed Story Preview Error)</p>
<div id="attachment_2121" class="wp-caption alignnone" style="width: 459px"><a href="http://media.waanser.com/2009/05/facebook7.jpg"><img class="size-full wp-image-2121" title="facebook7" src="http://media.waanser.com/2009/05/facebook7.jpg" alt="erreur prévualsisation maquette" width="449" height="213" /></a><p class="wp-caption-text">erreur prévualsisation maquette</p></div>
<p>En fait, votre maquette est bonne ! Mais pour que la prévisualisation se passe bien, il faut lui fournir un jeu de données. <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<hr />
Pour donner cet exemple, il suffit de se reporter dans la zone de texte : Exemple de données de modèle<br />
et mettre : <em>{&#8221;points&#8221;:&#8221;65&#8243;,&#8221;theme&#8221;:&#8221;l&#8217;histoire&#8221;}</em></p>
<p>Et là Miracle ! ça fonctionne <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><em>{*author*} </em> est un jeton par défaut que facebook met d&#8217;office pour afficher le nom de l&#8217;utilisateur.</p>
<hr />
<strong> Attention, vous devez passer (bouton ignorer) la prochaine étape (Créer un modèle d&#8217;actualité courte), sinon facebook va enregistrer cette dernière maquette.</strong></p>
<hr />
Si vous voulez faire une actualité courte, c&#8217;est par ici:</p>
<p>L&#8217;actualité courte permet d&#8217;afficher des médias comme les images :</p>
<p>Pour afficher les images, il faut continuer dans la partie : Exemple de données de modèle</p>
<p>Voici la syntaxe :</p>
<p><em>{&#8221;images&#8221;:[{"src":"url de li'mage", "href":"la cible du lien"}</em></p>
<p>Voici un exemple :</p>
<p><em>{"images":[{"src":"http://media.waanser.com/2009/05/genie.png", "href":"http://apps.facebook.com/waanser/"}</em></p>
<hr />
<p><strong>Créer un lien d'action</strong></p>
<p>Étape très importante, parce que c'est le lien qui va renvoyer l'utilisateur vers notre application.</p>
<div id="attachment_2131" class="wp-caption alignnone" style="width: 285px"><a href="http://media.waanser.com/2009/05/f.jpg"><img class="size-full wp-image-2131" title="f" src="http://media.waanser.com/2009/05/f.jpg" alt="api facebook lien d'action" width="275" height="32" /></a><p class="wp-caption-text">api facebook lien d&#39;action</p></div>
<hr />
Cette partie n&#8217;est pas compliquée, vous avez deux champs ;<br />
<strong>Texte de lien d&#8217;action</strong> : le texte du lien.</p>
<p><strong>URL de lien d&#8217;action</strong> : l&#8217;adresse de redirection du lien.</p>
<hr />
<div id="attachment_2132" class="wp-caption alignnone" style="width: 333px"><a href="http://media.waanser.com/2009/05/facebook9.jpg"><img class="size-full wp-image-2132" title="facebook9" src="http://media.waanser.com/2009/05/facebook9.jpg" alt="api facebook lien d'action" width="323" height="140" /></a><p class="wp-caption-text">api facebook lien d&#39;action</p></div>
<p>Vous avez plus qu&#8217;à passer à l&#8217;étape suivante, puis à cliquer sur <em>enregistre le lot de modèles</em>.<br />
Facebook va alors vous donner un bundle id<a href="http://media.waanser.com/2009/05/facebook10.jpg"><img class="alignnone size-full wp-image-2133" title="facebook10" src="http://media.waanser.com/2009/05/facebook10.jpg" alt="facebook10" width="442" height="101" /></a></p>
<p>Il faut bien le conserver, vous en aurez bientôt besoin.</p>
<h2>Utilisez la maquette dans votre application</h2>
<p>Nous allons commencer avec l&#8217;exemple le plus simple, celui où il y a qu&#8217;une seule ligne.</p>
<hr />
Nous allons donc créer un fichier php qui fera appel a notre maquette.<br />
Facebook impose d&#8217;utiliser le format JSON pour appeler la maquette et par la même occasion envoyer les données paramétrables.</p>
<p>{&#8221;content&#8221;: {&#8221;feed&#8221;: {&#8221;template_id&#8221;:identifiant de la maquette , &#8220;template_data&#8221;: {&#8221;nom du jeton 1&#8243;:&#8221;valeur du jeton 1&#8243;,&#8221;nom du jeton 2&#8243;:&#8221;valeur du jeton 2&#8243;} } }, &#8220;method&#8221;:&#8221;feedStory&#8221; }</p>
<hr />
Pour nous, ça va donner :</p>
<p>{&#8221;content&#8221;: {&#8221;feed&#8221;: {&#8221;template_id&#8221;:43745522324, &#8220;template_data&#8221;: {&#8221;points&#8221;:&#8221;65&#8243;,&#8221;theme&#8221;:&#8221;l&#8217;histoire&#8221;} } }, &#8220;method&#8221;:&#8221;feedStory&#8221; }</p>
<p>Le php propose une librairie pour manipuler le json, nous allons en bénéficier pour faire un beau feed json<br />
facilement paramétrable. <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<hr />
<pre class="brush: php">
$arr = array(
&#039;content&#039; =&gt; array(
&#039;feed&#039; =&gt; array(
&#039;template_id&#039; =&gt; 43745522324,&#039;template_data&#039; =&gt; array(
&#039;points&#039; =&gt; &#039;65&#039;, &#039;theme&#039; =&gt; &#039;l\&#039;histoire&#039;
)
)
),&#039;method&#039; =&gt; &#039;feedStory&#039;
);

echo json_encode($arr);
</pre>
<h2>Notification</h2>
<p>Nous allons voir comment générer des notifications, rassurez-vous, c&#8217;est beaucoup plus simple que les fils d&#8217;actualités <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Voici la syntaxe :</p>
<p><em>$oFacebook-&gt;api_client-&gt;notifications_send(DESTINATAIRE, MESSAGE, TYPE);</em></p>
<hr />
<strong>DESTINATAIRE </strong>: le destinataire de la notification<br />
<strong>MESSAGE </strong>: ça c&#8217;est le message à afficher<br />
<strong>TYPE </strong>: ça c&#8217;est le type de message, il y a 2 types possibles  :</p>
<ul>
<li>app_to_user =&gt; L&#8217;expéditeur c&#8217;est l&#8217;application</li>
<li>app_to_user =&gt; L&#8217;expéditeur c&#8217;est  l’utilisateur enregistré r</li>
</ul>
<hr />
<p>Voici un exemple d&#8217;utilisation :</p>
<pre class="brush: php">
$oFacebook-&gt;api_client-&gt;notifications_send($iUid, &#039;some info&#039;, &#039;user_to_user&#039;);
$oFacebook-&gt;api_client-&gt;notifications_send($iUid, &#039;some info&#039;, &#039;app_to_user&#039;);
</pre>
<p>Le rendu :</p>
<div id="attachment_2144" class="wp-caption alignnone" style="width: 213px"><a href="http://media.waanser.com/2009/05/not.jpg"><img class="size-full wp-image-2144" title="not" src="http://media.waanser.com/2009/05/not.jpg" alt="api facebook notification" width="203" height="104" /></a><p class="wp-caption-text">api facebook notification</p></div>
<p>Et voilà vous avez tous les outils en main pour propager votre application.</p>
<p>Bonne propagation <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.waanser.com/php/api-facebook/2147-fbml-api-facebook-les-techniques-de-propagation.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>Les premiers pas avec l&#8217;api Google Maps</title>
		<link>http://www.waanser.com/javascript/api-google-map/2054-notre-premiere-carte-avec-lapi-google-maps.html</link>
		<comments>http://www.waanser.com/javascript/api-google-map/2054-notre-premiere-carte-avec-lapi-google-maps.html#comments</comments>
		<pubDate>Wed, 20 May 2009 16:14:43 +0000</pubDate>
		<dc:creator>roul</dc:creator>
		
		<category><![CDATA[API Google Maps]]></category>

		<guid isPermaLink="false">http://www.waanser.com/?p=2054</guid>
		<description><![CDATA[L&#8217;api Google Maps est certainement un des outils les plus en vogue sur la toile. Dans cet article nous allons apprendre à afficher notre toute première carte via l&#8217;api Google Maps.
Inscription
Tout d&#8217;abord il va falloir inscrire son site auprès de google sur ce site.
On peut très bien mettre comme adresse 127.0.0.1 ou localhost
Google va vous [...]]]></description>
			<content:encoded><![CDATA[<p>L&#8217;api Google Maps est certainement un des outils les plus en vogue sur la toile. Dans cet article nous allons apprendre à afficher notre toute première carte via l&#8217;api Google Maps.</p>
<h2>Inscription</h2>
<p>Tout d&#8217;abord il va falloir inscrire son site auprès de google sur ce <a href="http://code.google.com/apis/maps/signup.html">site</a>.</p>
<p>On peut très bien mettre comme adresse 127.0.0.1 ou localhost</p>
<div id="attachment_2057" class="wp-caption alignnone" style="width: 501px"><a href="http://media.waanser.com/2009/05/api_googlemap.png"><img src="http://media.waanser.com/2009/05/api_googlemap.png" alt="api googlemap" title="api_googlemap" width="491" height="123" class="size-full wp-image-2057" /></a><p class="wp-caption-text">api googlemap</p></div>
<p>Google va vous renvoyer dans une page d&#8217;administration. Il vous donnera votre clef, pour faire appel à l&#8217;api Google Maps.</p>
<p>Si vous avez pris comme URL <strong>localhost </strong>vous aurez cette clé : ABQIAAAAzg_ZseRgldxWcy2tNYAEYRT2yXp_ZAY8_ufC3CFXhHIE1NvwkxSS7F5U7RNXncIf02uklkFtcG80gw</p>
<h2>La carte</h2>
<p>Dans la partie <strong>head </strong>de notre page web nous allons charger la librairie JS de Google Maps</p>
<pre class="brush: javascript">
&lt;script src=&quot;http://maps.google.com/maps?file=api&amp;amp;amp;amp;amp;amp;amp;v=2&amp;amp;amp;amp;amp;amp;amp;key= VOTRE CLE =true&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
</pre>
<p>Là on va créer une fonction javascript qui va charger la carte. </p>
<p>Voici le code, les explications sont juste en-dessous : <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<pre class="brush: javascript">
&lt;script type=&quot;text/javascript&quot;&gt;
 function initialize() {
      if (GBrowserIsCompatible()) {
        var map = new GMap2(document.getElementById(&quot;map&quot;));
        map.setCenter(new GLatLng(48.86175,2.331119), 15);
        map.setUIToDefault();
      }
    }
 &lt;/script&gt;
</pre>
<p>La fonction GBrowserIsCompatible est une fonction de l&#8217;api google map qui vérifie que le navigateur est compatible avec l&#8217;api Google Maps.</p>
<p>Pour afficher la carte, il faut indiquer à Google Maps un<strong> point géographique </strong>et un <strong>indice de zoom</strong>.</p>
<hr/>
Pour définir un  point géographique nous allons utiliser l&#8217;objet <strong>GLatLng</strong>.<br />
Voici ça syntaxe :<br />
new GLatLng(latitude,longitude)</p>
<p>Enfin pour définir la carte nous allons utiliser la méthode <strong>setCenter </strong>de l&#8217;objet <strong>map</strong><br />
Voici ça syntaxe :<br />
map.setCenter(objet GLatLng, indice de zoom);</p>
<p>La méthode <strong>setUIToDefault()</strong> sert juste à afficher les boutons de navigations sur la carte.</p>
<hr/>
On à fait le plus dur, on va pouvoir afficher la carte <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<pre class="brush: html">
  &lt;body&gt;
    &lt;div id=&quot;map&quot; style=&quot;width: 500px; height: 300px&quot;&gt;&lt;/div&gt;
   	&lt;script type=&quot;text/javascript&quot;&gt;
		window.onload = function(){initialize()};
	&lt;/script&gt;
  &lt;/body&gt;
</pre>
<p>Vous aurez reconnu le jardin des Tuileries :</p>
<div id="map" style="width: 500px; height: 300px"></div>
<p>   <script type="text/javascript">
		window.onload = function(){initialize()};
	</script></p>
<h2>Astuce pour avoir la géolocalisation</h2>
<p>J&#8217;ai trouver une méthode vraiment facile pour récupérer les coordonnées d&#8217;un lieu voulut. (si vous avez trouvez plus simple n&#8217;hésitez pas à partager <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> )</p>
<p>Pour cela il faut aller sur <a href="http://maps.google.fr/">google maps</a>, vous tapez sur le moteur le nom du lieu que vous vous voulez afficher. (on va dire bastille).</p>
<p>Une fois la carte bien centrée, vous cliquez sur le bouton <strong>Envoyer</strong></p>
<div id="attachment_2073" class="wp-caption alignnone" style="width: 231px"><a href="http://media.waanser.com/2009/05/api_googlemap1.png"><img src="http://media.waanser.com/2009/05/api_googlemap1.png" alt="api Google Maps" title="api_googlemap1" width="221" height="78" class="size-full wp-image-2073" /></a><p class="wp-caption-text">api Google Maps</p></div>
<p>Une fenêtre apparait et là il suffit de récupérer les bonnes informations :</p>
<div id="attachment_2074" class="wp-caption alignnone" style="width: 569px"><a href="http://media.waanser.com/2009/05/api_googlemap2.png"><img src="http://media.waanser.com/2009/05/api_googlemap2.png" alt="api Google Maps" title="api_googlemap2" width="559" height="346" class="size-full wp-image-2074" /></a><p class="wp-caption-text">api Google Maps</p></div>
<p>note : si vous n&#8217;avez pas toutes les informations, il faut naviguer un tout petit peu dans la map et tout devrait s&#8217;afficher <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Voilà c&#8217;est fini pour cet article. Dans les prochains articles nous allons voir plus en détail l&#8217;api Google Maps, notamment dans la personnalisation de la carte.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.waanser.com/javascript/api-google-map/2054-notre-premiere-carte-avec-lapi-google-maps.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>Javascript comme vous ne l&#8217;avez jamais vu !</title>
		<link>http://www.waanser.com/javascript/general-js/1945-le-javascript-comme-vous-lavez-jamais-vu.html</link>
		<comments>http://www.waanser.com/javascript/general-js/1945-le-javascript-comme-vous-lavez-jamais-vu.html#comments</comments>
		<pubDate>Mon, 18 May 2009 15:01:25 +0000</pubDate>
		<dc:creator>roul</dc:creator>
		
		<category><![CDATA[Général]]></category>

		<guid isPermaLink="false">http://www.waanser.com/?p=1945</guid>
		<description><![CDATA[Le Javascript est souvent considéré à tord comme un langage jouet, alors qu&#8217;il offre d&#8217;énorme possibilités.
Nous allons voir dans cet article des fonctions que vous avez jamais soupçonné l&#8217;existence ainsi que des façons de développer propre à JS.
Vous êtes prêt à avoir un regard nouveau sur le javascript ? Alors c&#8217;est parti  
Prototype
Vous avez [...]]]></description>
			<content:encoded><![CDATA[<p>Le Javascript est souvent considéré à tord comme un langage jouet, alors qu&#8217;il offre d&#8217;énorme possibilités.<br />
Nous allons voir dans cet article des fonctions que vous avez jamais soupçonné l&#8217;existence ainsi que des façons de développer propre à JS.</p>
<p>Vous êtes prêt à avoir un regard nouveau sur le javascript ? Alors c&#8217;est parti <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2>Prototype</h2>
<p>Vous avez jamais entendu parler d&#8217;héritage en JS ? C&#8217;est normal, puisque nous sommes dans un langage de prototype. Mais nous avons autre chose qui remplace le système d&#8217;héritage ; <strong>l&#8217;ajout de propriété</strong>.</p>
<p>Voici une chaine toute simple :</p>
<pre class="brush: javascript">
var sMoi = &#039;Roul&#039;;
</pre>
<p><br/><br />
Nous allons ajouter une fonction à notre chaine. Pour cela nous allons ajouter une propriété à au <strong>prototype </strong>String. On peux dire que le prototype est la structure de l&#8217;entité concerné (String).</p>
<p>Cela va donner :</p>
<pre class="brush: javascript">
String.prototype.direBonjour=function(){
	return &#039;Bonjour &#039; + this.valueOf();
};
</pre>
<p>Pour faire appel à cette fonction il suffit de faire :</p>
<pre class="brush: javascript">
var sMoi = &#039;Roul&#039;;
alert(sMoi.direBonjour());
</pre>
<p>Le navigateur affiche :<br />
<div id="attachment_1953" class="wp-caption alignnone" style="width: 336px"><a href="http://media.waanser.com/2009/05/js1.png"><img src="http://media.waanser.com/2009/05/js1.png" alt="javascript prototype" title="js1" width="326" height="125" class="size-full wp-image-1953" /></a><p class="wp-caption-text">javascript prototype</p></div></p>
<p>Pas mal, non ? <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Si vous ne connaissez pas, je vous conseille d&#8217;avoir toujours sous la main le site de <a href="http://www.w3schools.com/jsref/">w3schools</a> qui contient la référence complète du javascript.</p>
<p>Un autre exemple plus complexe :</p>
<p>On va adapter la méthode array_map de php (Applique une fonction sur les éléments d&#8217;un tableau) pour<br />
les tableau JS.</p>
<pre class="brush: javascript">
Array.prototype.map= function(fx)
{
	if (0 == this.length)
		return undefined;

	for (var index = 0; index &lt; this.length; ++index)
		this[index] = fx(this[index]);
	return this;
}

alert([1, 2, 3, 4, 5].map(function(iNb)
{
	iNb = parseInt (iNb, 10);
	return (iNb * iNb);
}));
</pre>
<p>Voilà le rendu :<br />
<div id="attachment_1958" class="wp-caption alignnone" style="width: 336px"><a href="http://media.waanser.com/2009/05/js2.png"><img src="http://media.waanser.com/2009/05/js2.png" alt="js prototype" title="js2" width="326" height="126" class="size-full wp-image-1958" /></a><p class="wp-caption-text">js prototype</p></div></p>
<p>Vous êtes toujours là ? On peut passer à la suite. <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2>La variable native : arguments</h2>
<p><strong>arguments</strong> est une variable locale créer nativement dans une fonction. Les arguments de la fonction y sont stockés. Cela peu être pratique pour certaines fonctions.<br />
Voici un exemple :</p>
<pre class="brush: javascript">
function getSum() {
	var iSum =0;
	for (var iCompt = 0; iCompt &lt; arguments.length; ++iCompt)
		iSum += arguments[iCompt];
	return iSum;
}

alert(getSum(1,2,3,4,5,6));
</pre>
<p>Le résultat :</p>
<div id="attachment_1961" class="wp-caption alignnone" style="width: 336px"><a href="http://media.waanser.com/2009/05/js3.png"><img src="http://media.waanser.com/2009/05/js3.png" alt="js prototype" title="js3" width="326" height="126" class="size-full wp-image-1961" /></a><p class="wp-caption-text">js prototype</p></div>
<h2>Attention à la portée des variables</h2>
<p>Il faut bien faire attention de bien déclarer vos variables, parce que vous risquez d&#8217;avoir des surprises.<br />
Voyez l&#8217;exemple :</p>
<pre class="brush: javascript">
function getCalc(iEntierA)
{
	iEntierA = iEntierA + 2;
	iResultat = iEntierA * 2;
	var EntierB = 3;
	return iResultat;
}

var iResultat = 8;
var iEntierA = 6;
var iEntierB = 4;

document.write(&#039;iResultat = &#039; + iResultat + &#039;&lt;br/&gt;&#039;);
document.write(&#039;iEntierA = &#039; + iEntierA + &#039;&lt;br/&gt;&#039;);
document.write(&#039;iEntierB = &#039; + iEntierB + &#039;&lt;br/&gt;&#039;);
document.write(&#039;--------------------------&lt;br/&gt;&#039;);
document.write(&#039;getCalc(1) = &#039; + getCalc(1)+ &#039;&lt;br/&gt;&#039;);
document.write(&#039;--------------------------&lt;br/&gt;&#039;);
document.write(&#039;iResultat = &#039; + iResultat + &#039;&lt;br/&gt;&#039;);
document.write(&#039;iEntierA = &#039; + iEntierA + &#039;&lt;br/&gt;&#039;);
document.write(&#039;iEntierB = &#039; + iEntierB + &#039;&lt;br/&gt;&#039;);
</pre>
<p>Voici le rendu : </p>
<hr/>
iResultat = 8<br />
iEntierA = 6<br />
iEntierB = 4<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
getCalc(1) = 6<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
iResultat = 6<br />
iEntierA = 6<br />
iEntierB = 4</p>
<hr/>
<p>On voit clairement que <strong>iResultat</strong> est modifiée et qu&#8217;elle a prit la variable de la fonction.<br/><br />
<strong>Mais pourquoi ?</strong><br/><br />
Comme elle n&#8217;a pas été déclarée localement dans la fonction (comme <strong>EntierB </strong>), Javascript la retrouvée dans les variables globales. Et l&#8217;affectation de la nouvelle valeur a touchée la variable global.<br/><br />
Et <strong>iEntierA</strong> ? Comment ça ce fait qu&#8217;elle ne soit pas modifiée ?<br />
Comme elle est en paramètre de la fonction <strong>getCalc</strong>, la déclaration se fait implicitement.</p>
<h2>Les objets anonymes</h2>
<p>Les objets anonymes sont des objets très flexibles où l&#8217;on peut ajouter toutes sorte de propriétés.</p>
<p>Voici une utilisation utile dans une fonction de ces objets :</p>
<pre class="brush: javascript">
function getPresentation(oMe)
{
	undefined === oMe.prenom ? 0 : alert(&#039;nom : &#039; + oMe.prenom);
	undefined === oMe.nom ? 0 : alert(&#039;nom : &#039; + oMe.nom);
	undefined === oMe.age ? 0 : alert(&#039;age : &#039; + oMe.age);
}

getPresentation({prenom: &#039;Yann&#039;, age: 26});
getPresentation({prenom: &#039;Romain&#039;});
</pre>
<hr/>
<p>Eh voilà, on a vu quelques notions méconnues de javascript. <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Si vous avez des remarques où des interrogations sur le JS, n&#8217;hésitez pas à nous le faire partager <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.waanser.com/javascript/general-js/1945-le-javascript-comme-vous-lavez-jamais-vu.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>Plateforme Php: CodeIgniter &#038; Smarty</title>
		<link>http://www.waanser.com/php/framework/codeigniter/255-plateforme-php-partie-1-codeigniter-et-smarty.html</link>
		<comments>http://www.waanser.com/php/framework/codeigniter/255-plateforme-php-partie-1-codeigniter-et-smarty.html#comments</comments>
		<pubDate>Fri, 01 May 2009 22:38:27 +0000</pubDate>
		<dc:creator>tilkc</dc:creator>
		
		<category><![CDATA[CodeIgniter]]></category>

		<guid isPermaLink="false">http://www.waanser.com/?p=255</guid>
		<description><![CDATA[Dans ce tutoriel nous allons donc intégrer Smarty pour CodeIgniter afin de faciliter le développement d&#8217;une application WEB.


Installation
Nous allons télécharger WampServeur, CodeIgniter et Smarty.
Pour WampServeur, suivez les instructions d&#8217;installation.
Pour CodeIgniter et Smarty il suffit de dezipper les fichiers.
Dans WampServeur nous allons créer notre dossier de base de notre site
C:/wamp/www/tutorielwaanser

Intégration de Smarty
Dans le fichier index.php ajouter [...]]]></description>
			<content:encoded><![CDATA[<p>Dans ce tutoriel nous allons donc intégrer Smarty pour CodeIgniter afin de faciliter le développement d&#8217;une application WEB.<br />
<span id="more-255"></span></p>
<hr />
<h1>Installation</h1>
<p>Nous allons télécharger WampServeur, CodeIgniter et Smarty.</p>
<p>Pour <a title="Téléchargement de WampServeur" href="http://www.wampserver.com/download.php" target="_blank">WampServeur</a>, suivez les instructions d&#8217;installation.<br />
Pour <a title="Téléchargement de CodeIgniter" href="http://codeigniter.com/downloads/" target="_blank">CodeIgniter</a> et <a title="Téléchargement de Smarty" href="http://www.smarty.net/" target="_blank">Smarty</a> il suffit de dezipper les fichiers.</p>
<p>Dans WampServeur nous allons créer notre dossier de base de notre site<br />
C:/wamp/www/tutorielwaanser</p>
<hr />
<h1>Intégration de Smarty</h1>
<p>Dans le fichier index.php ajouter la constante :<strong> WEBSITE_PATH</strong></p>
<pre class="brush: php">
if (strpos($system_folder, &#039;/&#039;) === FALSE) {

if (function_exists(&#039;realpath&#039;) AND @realpath(dirname(__FILE__)) !== FALSE)
{
$system_folder = realpath(dirname(__FILE__)).&#039;/&#039;.$system_folder;
}
} else {
// Swap directory separators to Unix style for consistency
$system_folder = str_replace(&quot;\\&quot;, &quot;/&quot;, $system_folder);
}

define(&#039;WEBSITE_PATH&#039;, realpath(dirname(__FILE__)).&#039;/&#039;.$application_folder );
</pre>
<p>Dans le fichier <strong>system/application/config/config.php</strong> modifier la variable :</p>
<pre class="brush: php">
$config[&#039;subclass_prefix&#039;] = &#039;WAANSER_&#039;;
</pre>
<p><strong>Créer les arborescences suivantes :<br />
- system/smarty/libs </strong>et copier  les dossiers<strong> Internals et plugins de Smarty</strong><strong><br />
</strong></p>
<p><strong>system/application/smarty/plugins<br />
system/application/smarty/tpl</strong></p>
<p><strong>system/application/tmp/smarty/cache<br />
system/application/tmp/smarty/templates_c</strong></p>
<p>Renommer le fichier <strong>Smarty.class.php en Smarty.php</strong><br />
<strong>Copier les fichier Smarty.php, Smarty_Compiler.class.php et Config_File.class.php</strong> dans le dossier <strong>system/libraries</strong></p>
<hr />Dans le fichier <strong>system/libraries/Smarty.php</strong> couper les constantes et copier les dans le fichier <strong>application/config/constants.php</strong></p>
<pre class="brush: php">
//  ******* Smarty ********
define(&#039;DIR_SEP&#039;, DIRECTORY_SEPARATOR);
define(&#039;SMARTY_DIR&#039;, BASEPATH.&#039;smarty&#039;.DIRECTORY_SEPARATOR);
define(&#039;SMARTY_CORE_DIR&#039;, BASEPATH.&#039;smarty/libs/internals&#039; . DIRECTORY_SEPARATOR);

define(&#039;SMARTY_PHP_PASSTHRU&#039;,   0);
define(&#039;SMARTY_PHP_QUOTE&#039;,      1);
define(&#039;SMARTY_PHP_REMOVE&#039;,     2);
define(&#039;SMARTY_PHP_ALLOW&#039;,      3);
</pre>
<p>Ensuite nous devons créer les libraries <strong>WAANSER_controller</strong> et <strong>WAANSER_smarty </strong>dans le dossier <strong>system\application\libraries</strong></p>
<pre class="brush: php">

class WAANSER_Controller extends Controller {

/**
* @desc	for template
* @var 	obj smarty
*/
public $oMySmarty = null;

public function Controller() {

parent::Controller();

$this-&gt;loadSmarty();
}

public function loadSmarty() {

$this-&gt;oMySmarty = &amp;amp;amp;amp;amp;amp;load_class(&#039;Smarty&#039;);
}

}
</pre>
<p>Ce fichier va nous permettre d&#8217;étendre le contrôleur d&#8217;origine, pour récupérer tous le processus de chargement des classes, et nous ajoutons un attribut $oMySmarty qui sera un objet de la classe Smarty.</p>
<p>Avec cet objet on pourra changer de générateur de template.<br />
On peut, même si c&#8217;est moche :)  utiliser le générateur de templates par défaut en même temps que le générateur Smarty.</p>
<pre class="brush: php">

class WAANSER_Smarty extends Smarty {

/**
* @desc	class constructor
* @version	1.0.0
* @date	20090307
*/
public function __construct() {

parent::Smarty();
$this-&gt;setParams();
}

/**
* @desc 	initialise les variables pour smarty
* @version 1.0.0
* @date	20090307
*/

public function setParams() {
$this-&gt;template_dir = APPPATH.&#039;smarty/tpl&#039;;
$this-&gt;compile_dir = APPPATH.&#039;tmp/smarty/templates_c&#039;;
$this-&gt;plugins_dir = array(APPPATH.&#039;smarty/libs/plugins&#039;, APPPATH.&#039;smarty/plugins&#039;);
}

}

?&gt;
</pre>
<p>Il nous reste a changer le fichier welcome dans le dossier <strong>system\application\controllers</strong>, il suffit juste de changer l&#8217;appel au fichier parent.</p>
<pre class="brush: php">

class Welcome extends WAANSER_Controller {

function Welcome()
{
parent::Controller();
}

function index()
{
$this-&gt;oMySmarty-&gt;assign(&#039;TEST_WAANSER&#039;, &#039;Smarty est OK&#039;);
$this-&gt;oMySmarty-&gt;display(&#039;welcome.tpl&#039;);
//$this-&gt;load-&gt;view(&#039;welcome_message&#039;);
}
}
</pre>
<p>Et de lui ajouter une variable avec la methode <strong>assign </strong>et de lui indiquer le template a afficher avec la methode <strong>display</strong>.</p>
<p>Ensuite ajouter le fichier <strong>welcome.tpl</strong> dans le dossier <strong>system\application\smarty\tpl</strong></p>
<pre class="brush: php">

&lt;p&gt;{$TEST_WAANSER}&lt;/p&gt;
</pre>
<p>Au prochain Tuto <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong><br />
</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.waanser.com/php/framework/codeigniter/255-plateforme-php-partie-1-codeigniter-et-smarty.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>Installation et configuration de Magento</title>
		<link>http://www.waanser.com/magento/1480-intallation-et-configuration-de-magento.html</link>
		<comments>http://www.waanser.com/magento/1480-intallation-et-configuration-de-magento.html#comments</comments>
		<pubDate>Tue, 14 Apr 2009 21:44:19 +0000</pubDate>
		<dc:creator>roul</dc:creator>
		
		<category><![CDATA[Magento]]></category>

		<guid isPermaLink="false">http://www.waanser.com/?p=1480</guid>
		<description><![CDATA[Magento est le CMS de site de e-commerce par excellence. Élu meilleur nouveau projet Open Source par Sourceforge, magento est une référence dans son domaine. L&#8217;installation n&#8217;est pas toujours facile, c&#8217;est pour cela que dans ce didacticiel, nous allons apprendre pas à pas à mettre en place ce CMS.

Installation
Comme tout, il va falloir télécharger Magento, [...]]]></description>
			<content:encoded><![CDATA[<p>Magento est le CMS de site de e-commerce par excellence. Élu meilleur nouveau projet Open Source par Sourceforge, magento est une référence dans son domaine. L&#8217;installation n&#8217;est pas toujours facile, c&#8217;est pour cela que dans ce didacticiel, nous allons apprendre pas à pas à mettre en place ce CMS.</p>
<hr/>
<h2>Installation</h2>
<p>Comme tout, il va falloir télécharger Magento, sur <a href="http://www.magentocommerce.com/download">le site officiel</a>.<br />
Il faut que vous soyez enregistré pour avoir accès au téléchargement.</p>
<p>Magento vous propose plusieurs types de dossier à télécharger. Je vous conseil de prendre le <strong>Downloader </strong> :</p>
<p><a href="http://media.waanser.com/2009/04/magento.png"><img src="http://media.waanser.com/2009/04/magento.png" alt="magento" title="magento" width="680" height="52" class="size-full wp-image-1486" /></a></p>
<p>Pour notre site de e-commerce, nous allons créer un dossier monecom. Nous allons mettre le contenu du dossier décompressé de magento dans ce dossier.</p>
<p>Voilà ce que vous devriez avoir dans votre dossier :</p>
<p><a href="http://media.waanser.com/2009/04/magento1.jpg"><img src="http://media.waanser.com/2009/04/magento1.jpg" alt="magento" title="magento1" width="486" height="185" class="size-full wp-image-1485" /></a></p>
<p>On va se rendre sur notre site : http://localhost/monecom/</p>
<p>Là il faut cliquer sur le bouton <em>Start the download process</em></p>
<p><a href="http://media.waanser.com/2009/04/magento1.png"><img src="http://media.waanser.com/2009/04/magento1.png" alt="magento" title="magento1" width="700" height="205" class="size-full wp-image-1489" /></a></p>
<p>Eh là vous voyez que Magento télécharge les dernières librairies. (c&#8217;est magique <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> )</p>
<hr/>
<p>Attention il est fort probable que vous voyez ce genre de message :</p>
<p>magento-core/Lib_Varien requires PHP extension &#8220;curl&#8221;<br />
magento-core/Lib_Varien requires PHP extension &#8220;gd&#8221;<br />
magento-core/Lib_Varien requires PHP extension &#8220;pdo_mysql&#8221;<br />
magento-core/Lib_Varien requires PHP extension &#8220;mcrypt&#8221;</p>
<hr/>
<p>C&#8217;est normal, il faut que vous activez les extensions <strong>curl, gb, pdo_mysql, mcrypt</strong>. </p>
<p>Comment faire ? </p>
<p><strong>Si vous travaillez dans un environnement Windows</strong></p>
<p>Il faut ouvrir votre fichier <strong>php.ini</strong>.<br />
Il se trouve dans votre répertoire apache2 dans le dossier bin.</p>
<p>Il faut que vous ajoutez :</p>
<p>extension=php_curl.dll<br />
extension=php_gd2.dll<br />
extension=php_mcrypt.dll<br />
extension=php_pdo_mysql.dll<br />
et le tour est  joué <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<hr/>
<strong>Si vous travaillez dans un environnement Linux.</strong></p>
<p>On va avoir de besoin de la commande apt.<br />
Pour faire ça proprement, nous allons commencer par faire apt get update pour mettre à jour votre liste de paquets disponibles.<br />
Puis, nous allons demander à notre serveur quels sont les paquets disponibles pour l&#8217;extension curl :<br />
<strong>apt-cache search php curl</strong></p>
<p><a href="http://media.waanser.com/2009/04/apt.jpg"><img src="http://media.waanser.com/2009/04/apt.jpg" alt="apt-cache search php curl" title="apt" width="302" height="50" class="size-full wp-image-1490" /></a></p>
<p>Là, on choisit notre paquet :  php5-curl<br />
Et on fait : <strong>apt-get install php5-curl</strong></p>
<p>Pour les autres extensions, c&#8217;est la même manipulation <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<hr/>
<h2>Configuration</h2>
<p>On va pouvoir configurer magento ^^.<br />
Une fois que vous avez accepté la licence, vous serez dans la partie <strong>localization</strong>.<br />
Comme moi, vous avez beau sélectionner le pays France, rien n&#8217;y veut, Magento garde comme pays les états-unis. C&#8217;est normal, on n&#8217;a pas installé la librairie pour le pays français. Mais on y reviendra plus tard. (un peu de patience <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> )<br />
On va passer à l&#8217;étape suivante, <strong>configuration</strong>.</p>
<hr/>
<strong>Database Connection</strong> <br/><br/></p>
<p>Là on est en terrain connu, pas besoin de modifier le host. Pour le nom de la base, il est préférable de le changer, pour une question de sécurité. Pour nous, ça sera <strong>eco_mangeto</strong>.<br />
Après il faut que vous indiquiez le login et mot de passe pour votre base de données (il y a que vous qui connaissez çà <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> )<br />
Pour le champ Table Prefix nous allons mettre <strong>eco_</strong> (toujours pour une question de sécurité).</p>
<hr/>
<strong>Web access options</strong><br/><br/></p>
<p>Le champ <strong>Base URL</strong>, c&#8217;est l&#8217;adresse de votre site. (Pour ma part ça sera http://localhost/monecom/ )<br />
Admin Path c&#8217;est le chemin que l&#8217;on va accéder pour le panneau d&#8217;administration, nous allons l&#8217;appeler <strong>laconf</strong>.<br />
(Je sais c&#8217;est un peu concon comme nom, mais au moins les éventuels pirates auront du mal à deviner :p ).</p>
<p>Je vous conseille de cocher Use Web Server (Apache) Rewrites. Pour activer la réécriture de vos url. Cela va aider notre référencement naturel.</p>
<p>Pour la sauvegarde des données (Save session data in ), File System est un bon choix. Ça sert à rien de surcharger notre base inutilement.</p>
<p>Attention, il ne faut pas mettre une restriction de mot de passe sur le de fichier htaccess, sinon Magento ne va pas pouvoir continuer l&#8217;installation et dira que votre adresse n&#8217;est pas correct.</p>
<hr/>
<strong>Create Admin Account</strong><br/><br/></p>
<p>Là, vous n&#8217;avez pas besoin de moi pour remplir ce formulaire :).</p>
<p>Juste une précision, le champ <strong>Encryption Key</strong>, c&#8217;est une clé qui va assurer la sécurité de votre site, il est préférable qu&#8217;elle soit longue. (Moi j&#8217;ai inventé une longue phrase qui veux rien dire ^^).</p>
<p>Bravo ! Votre Magento fonctionne <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2>Magento en français</h2>
<p>Pour rendre notre panneau d&#8217;administration en français, il faut aller sur <a href="http://www.magentocommerce.com/extension/414/magento-community-modules--french-france-language-pack">ce lien</a>.</p>
<p>Il faut cliquer ensuite sur ce bouton : </p>
<p><a href="http://media.waanser.com/2009/04/magento2.png"><img src="http://media.waanser.com/2009/04/magento2.png" alt="magento" title="magento2" width="247" height="39" class="size-full wp-image-1491" /></a></p>
<p>Là il va vous donner un lien, pour moi c&#8217;est <strong>magento-community/Locale_Mage_community_fr_FR</strong>.</p>
<p>Nous allons retourner dans la page d&#8217;administration de notre site web : <strong>http://localhost/monecom/laconf</strong>.</p>
<p>Nous allons ensuite dans le dossier <strong>sytem</strong>, puis dans le sous menu <strong>Magento Connect Manager</strong>.</p>
<p>Et la vous voyez apparaître :</p>
<p><a href="http://media.waanser.com/2009/04/magento3.png"><img src="http://media.waanser.com/2009/04/magento3.png" alt="magento" title="magento3" width="716" height="95" class="size-full wp-image-1494" /></a></p>
<p>Vous n&#8217;êtes pas perdu ? <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Dans le champ <strong>Paste extension key to install</strong> vous allez mettre le lien que vous avez récupéré (magento-community/Locale_Mage_community_fr_FR).</p>
<p>Un clique sur <strong>install</strong> et la librairie est prêt à l&#8217;emploi.</p>
<p>Pour changer la langue, il faut aller dans <strong>System </strong>->  <strong>Configuration</strong>.</p>
<p>Pour le menu <strong>General </strong>on va dans<strong> Options de locale</strong>.</p>
<p>Dans le champ <strong>Profil local</strong> on choisit français.</p>
<p>Bravo !  Votre plateforme Magento est prêt à l&#8217;emploi. <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Dans les prochains tutoriels nous allons voir les fonctionnalités les plus importantes de magento.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.waanser.com/magento/1480-intallation-et-configuration-de-magento.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>Une approche de Zend Framework 1.7</title>
		<link>http://www.waanser.com/php/zend-framework/1425-une-approche-de-zend-framework-17.html</link>
		<comments>http://www.waanser.com/php/zend-framework/1425-une-approche-de-zend-framework-17.html#comments</comments>
		<pubDate>Thu, 09 Apr 2009 16:54:36 +0000</pubDate>
		<dc:creator>roul</dc:creator>
		
		<category><![CDATA[Zend Framework]]></category>

		<guid isPermaLink="false">http://www.waanser.com/?p=1425</guid>
		<description><![CDATA[Zend fait parti de ces frameworks qui font beaucoup parler d&#8217;eux. Pour les néophytes ce n&#8217;est pas toujours évident de mettre en place et d&#8217;utiliser ce framework. Sans entrer dans les détails nous allons voir comment installer la dernière version en ligne de zend, la 1.7.
Ce qu&#8217;il faut
Si vous le savez pas, il faut php5 [...]]]></description>
			<content:encoded><![CDATA[<p>Zend fait parti de ces frameworks qui font beaucoup parler d&#8217;eux. Pour les néophytes ce n&#8217;est pas toujours évident de mettre en place et d&#8217;utiliser ce framework. Sans entrer dans les détails nous allons voir comment installer la dernière version en ligne de zend, la 1.7.</p>
<h2>Ce qu&#8217;il faut</h2>
<p>Si vous le savez pas, il faut <strong>php5</strong> et activé le <strong>module_rewrite</strong> </p>
<div id="attachment_1426" class="wp-caption alignnone" style="width: 357px"><a href="http://media.waanser.com/2009/04/zend.png"><img src="http://media.waanser.com/2009/04/zend.png" alt="zend" title="zend" width="347" height="359" class="size-full wp-image-1426" /></a><p class="wp-caption-text">zend</p></div>
<p>Et on télécharge la <a href="http://framework.zend.com/download/latest">dernière version</a>.</p>
<p>On va créer notre dossier <em>zenfacile</em> où seront enregistrées les pages. Dans ce dossier on va créer un dossier <em>Zend</em>. Dans ce dossier on va mettre la librairie Zend.</p>
<p><a href="http://media.waanser.com/2009/04/zend1.png"><img src="http://media.waanser.com/2009/04/zend1.png" alt="zend" title="zend1" class="alignnone size-full wp-image-1428" /></a></p>
<h2>Arborescence</h2>
<p>L&#8217;arborescence de notre site va suivre une structure MVC traditionnel :<br />
<a href="http://media.waanser.com/2009/04/zend2.png"><img src="http://media.waanser.com/2009/04/zend2.png" alt="zend" title="zend2" class="alignnone size-full wp-image-1429" /></a></p>
<p>Comme on va faire de la réécriture d&#8217;url, on va ajouter un fichier .htaccess</p>
<pre class="brush: php">
# Règles de réécriture pour Zend Framework
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* index.php

# Sécurité : Ne pas autoriser le parcours de répertoires
Options -Indexes

# Configuration PHP
php_flag magic_quotes_gpc off
php_flag register_globals off
php_flag short_open_tag on
</pre>
<p>voici le fichier <a href='http://media.waanser.com/2009/04/.htaccess'>.htaccess</a></p>
<p>Maintenant tout est prêt, on va pouvoir s&#8217;attaquer au php.<br />
(eh oui ça va très vite on y va pas avec de la dentelle) <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>On va commencer par l&#8217;index.php</p>
<p>On va pas se précipiter, on va déjà voir si la librairie est bien chargé :</p>
<pre class="brush: php">
error_reporting(E_ALL|E_STRICT);
ini_set(&#039;display_errors&#039;, 1);
date_default_timezone_set(&#039;Europe/Paris&#039;);

// mise en place des répertoires et chargement des classes
set_include_path(&#039;.&#039;
    . PATH_SEPARATOR . &#039;./library&#039;
    . PATH_SEPARATOR . &#039;./application/models/&#039;
    . PATH_SEPARATOR . get_include_path());
include &quot;Zend/Loader.php&quot;;

echo &#039;salut Zend !&#039;;
</pre>
<p>Le message salut Zend !  devrait s&#8217;afficher sur cette page  :<a href="http://localhost/zenfacile/" >http://localhost/zenfacile</a></p>
<p>C&#8217;est bon ? <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Voici ce que l&#8217;on va mettre :</p>
<pre class="brush: php">
&lt;?php

error_reporting(E_ALL|E_STRICT);
ini_set(&#039;display_errors&#039;, 1);
date_default_timezone_set(&#039;Europe/Paris&#039;);

// mise en place des répertoires et chargement des classes
set_include_path(&#039;.&#039;
    . PATH_SEPARATOR . &#039;./library&#039;
    . PATH_SEPARATOR . &#039;./application/models/&#039;
    . PATH_SEPARATOR . get_include_path());
include &quot;Zend/Loader.php&quot;;

Zend_Loader::registerAutoload();

// setup controller
$frontController = Zend_Controller_Front::getInstance();
$frontController-&gt;throwExceptions(true);
$frontController-&gt;setControllerDirectory(&#039;./application/controllers&#039;);

// run!
$frontController-&gt;dispatch();
?&gt;
</pre>
<p>Normalement vous avez une belle fatal erreur :</p>
<hr/>
<b>Fatal error</b>:  Uncaught exception &#8216;Zend_Controller_Dispatcher_Exception&#8217; with message &#8216;Invalid controller specified (index)&#8217; in C:\wamp\www\zenfacile\Zend\Controller\Dispatcher\Standard.php:241<br />
Stack trace:#0 C:\wamp\www\zenfacile\Zend\Controller\Front.php(934): Zend_Controller_Dispatcher_Standard-&gt;dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) #1 C:\wamp\www\zenfacile\index.php(23): Zend_Controller_Front-&gt;dispatch() #2 {main}<br />
  thrown in <b>C:\wamp\www\zenfacile\Zend\Controller\Dispatcher\Standard.php</b> on line <b>241</b></p>
<hr/>
<p>Pas de panique c&#8217;est normal :). Par défaut Zend recherche le contrôleur Index.</p>
<p>Et comme il n&#8217;existe pas, Zend nous génère une erreur.</p>
<h2>Strucuture MVC</h2>
<p>On va créer ce controleur :</p>
<hr/>
zenfacile => application => controllers => IndexControler.php</p>
<hr/>
<p>Le nom de la classe doit forcément ce terminer par <strong>Controller</strong></p>
<pre class="brush: php">
class IndexController extends Zend_Controller_Action
{
    function indexAction()
    {
    	 $this-&gt;view-&gt;title = &quot;Mon Zend&quot;;
    }
}
</pre>
<p>Il faut savoir que dans chaque controleur il y a des actions (qui est en fait des méthodes de la classe).<br />
Ces méthodes actions doivent se terminer par <strong>Action</strong>.<br />
Ainsi pour l&#8217;action Index la méthode l&#8217;appellera <strong>indexAction</strong>.</p>
<p>L&#8217;objet <strong>$this-&gt;view </strong> est l&#8217;objet qui manipule la vue.</p>
<p>Comme vous l&#8217;avez remarquez notre classe hérite de <strong>Zend_Controller_Action</strong>.</p>
<p>Comment fait-on pour retrouver cette classe ?</p>
<p>Facile ! On remplace les <strong>_</strong> par les <strong>/ </strong>. Et voilà, on a l&#8217;arborescence et le nom de la classe.<br />
Pour Zend_Controller_Action la classe se situeras dans :<br />
Zend => Controller =>Action.php</p>
<p><strong>La vue</strong></p>
<p>Pour la vue, il faut aller dans le dossier <strong>views </strong> créer un dossier <strong>scripts</strong>.<br />
Un fois ceci fait nous allons créer un dossier qui porte le nom du contrôleur. Le nom de notre vue sera alors <strong>index</strong>.</p>
<p>Le nom de la vue doit être le nom de l&#8217;action, son nom sera alors <strong>index.phtml</strong></p>
<hr/>
zenfacile => application => views => scripts => index => index.phtml</p>
<hr/>
<pre class="brush: html">
&lt;html&gt;
&lt;head&gt;
	&lt;title&gt;&lt;?php echo $this-&gt;escape($this-&gt;title); ?&gt;&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
	&lt;h1&gt;&lt;?php echo $this-&gt;escape($this-&gt;title); ?&gt;&lt;/h1&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>et là on rafraichit <a href="http://localhost/zenfacile/"></a><br />
<a href="http://localhost/zenfacile/index/index"></a></p>
<p> on voit le message !  c&#8217;est que ça marche \o/</p>
<p>Pour la réécriture d&#8217;url zend fait vraiment simple. c&#8217;est http://lenomdusite/<strong>controleur</strong>/<strong>action</strong>. <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
On va créer une autre page, une page contact (elle aussi sera toute simple)</p>
<pre class="brush: php">
    function contactAction()
    {
    	 $this-&gt;view-&gt;title = &quot;Contact&quot;;
    }
</pre>
<p>Avec une vue identique :</p>
<hr/>
zenfacile => application => views => scripts => index => contact.phtml</p>
<hr/>
<pre class="brush: html">
&lt;html&gt;
&lt;head&gt;
	&lt;title&gt;&lt;?php echo $this-&gt;escape($this-&gt;title); ?&gt;&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
	&lt;h1&gt;&lt;?php echo $this-&gt;escape($this-&gt;title); ?&gt;&lt;/h1&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Pour y accéder ça sera : <a href="http://localhost/zenfacile/">http://localhost/zenfacile/index/contact</a></p>
<p>Et voila notre Zend est installé, pour ne pas trop alourdir le tutoriel, j&#8217;ai fait l&#8217;impasse sur des notions importantes comme le MVC, si vous avez des questions n&#8217;hésitez pas à poster un commentaire.</p>
<p>Voici le dossier complet : <a href='http://media.waanser.com/2009/04/zenfacile.rar'>zenfacile</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.waanser.com/php/zend-framework/1425-une-approche-de-zend-framework-17.html/feed</wfw:commentRss>
		</item>
	</channel>
</rss>
