<?xml
version="1.0" encoding="utf-8"?>
<rss version="2.0" 
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:atom="http://www.w3.org/2005/Atom"
>

<channel xml:lang="fr">
	<title>Teddy Payet</title>
	<link>https://www.teddypayet.com/</link>
	
	<language>fr</language>
	<generator>SPIP - www.spip.net</generator>
	<atom:link href="https://www.teddypayet.com/spip.php?id_mot=53&amp;page=backend" rel="self" type="application/rss+xml" />

	<image>
		<title>Teddy Payet</title>
		<url>https://www.teddypayet.com/local/cache-vignettes/L144xH162/siteon0-84dcb.png?1748259078</url>
		<link>https://www.teddypayet.com/</link>
		<height>162</height>
		<width>144</width>
	</image>

                    

<item xml:lang="fr">
		<title>Afficher les globals tout en boucle SPIP</title>
		<link>https://www.teddypayet.com/Afficher-les-globals-tout-en-boucle-SPIP</link>
		<guid isPermaLink="true">https://www.teddypayet.com/Afficher-les-globals-tout-en-boucle-SPIP</guid>
		<dc:date>2013-11-15T17:11:41Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Teddy Payet</dc:creator>


		<dc:subject>SPIP</dc:subject>
		<dc:subject>Astuce</dc:subject>
		<dc:subject>Notes de d&#233;veloppement</dc:subject>
		<dc:subject>PHP</dc:subject>
		<dc:subject>Javascript</dc:subject>
		<dc:subject>Boucle DATA</dc:subject>
		<dc:subject>Boucle CONDITION</dc:subject>
		<dc:subject>jQuery</dc:subject>

		<description>
&lt;p&gt;Lorsqu'on fait un d&#233;veloppement PHP, on a besoin parfois de savoir ce qu'on a dans nos $GLOBALS. Il en va de m&#234;me lorsqu'on est en d&#233;veloppement avec SPIP. Voici un bout de code qui peut d&#233;panner. &lt;br class='autobr' /&gt; Pr&#233;ambule Il existe des solutions plus pouss&#233;es comme les logiciels IDE qui permettent de voir les fonctions appell&#233;es dans la page. Malheureusement, on n'a pas toujours la possibilit&#233; de coder avec ces logiciels dans l'infrastructure o&#249; nous sommes. Dans SPIP, on peut m&#234;me utiliser le plugin (&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.teddypayet.com/Blog" rel="directory"&gt;Blog&lt;/a&gt;

/ 
&lt;a href="https://www.teddypayet.com/SPIP" rel="tag"&gt;SPIP&lt;/a&gt;, 
&lt;a href="https://www.teddypayet.com/Astuce" rel="tag"&gt;Astuce&lt;/a&gt;, 
&lt;a href="https://www.teddypayet.com/Notes-de-developpement" rel="tag"&gt;Notes de d&#233;veloppement&lt;/a&gt;, 
&lt;a href="https://www.teddypayet.com/PHP" rel="tag"&gt;PHP&lt;/a&gt;, 
&lt;a href="https://www.teddypayet.com/Javascript" rel="tag"&gt;Javascript&lt;/a&gt;, 
&lt;a href="https://www.teddypayet.com/Boucle-DATA" rel="tag"&gt;Boucle DATA&lt;/a&gt;, 
&lt;a href="https://www.teddypayet.com/Boucle-CONDITION" rel="tag"&gt;Boucle CONDITION&lt;/a&gt;, 
&lt;a href="https://www.teddypayet.com/jQuery" rel="tag"&gt;jQuery&lt;/a&gt;

		</description>


 <content:encoded>&lt;img src='https://www.teddypayet.com/local/cache-vignettes/L150xH95/arton120-cc7f7.png?1755102076' class='spip_logo spip_logo_right' width='150' height='95' alt=&#034;&#034; /&gt;
		&lt;div class='rss_chapo'&gt;&lt;p&gt;Lorsqu'on fait un d&#233;veloppement PHP, on a besoin parfois de savoir ce qu'on a dans nos &lt;i&gt;$GLOBALS&lt;/i&gt;. Il en va de m&#234;me lorsqu'on est en d&#233;veloppement avec SPIP. Voici un bout de code qui peut d&#233;panner.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;spip&#034;&gt;Pr&#233;ambule&lt;/h2&gt;
&lt;p&gt;Il existe des solutions plus pouss&#233;es comme les logiciels IDE qui permettent de voir les fonctions appell&#233;es dans la page. Malheureusement, on n'a pas toujours la possibilit&#233; de coder avec ces logiciels dans l'infrastructure o&#249; nous sommes.&lt;br class='autobr' /&gt;
Dans SPIP, on peut m&#234;me utiliser le plugin &lt;a href=&#034;http://contrib.spip.net/TestBuilder&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Test Builder&lt;/a&gt; pour cr&#233;er... nos tests. C'est super pratique quand on a pris le coup de main.&lt;/p&gt;
&lt;p&gt;Mais voil&#224;... Ca, c'est dans le meilleur des mondes. Parfois, tout cela n'est pas possible ou on a juste besoin d'une information sans avoir &#224; utiliser un couteau Suisse(c) l&#224; o&#249; un cure-dent suffirait.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Le code&lt;/h2&gt;
&lt;p&gt;Pour faire illustrer notre exemple, on va cr&#233;er dans notre r&#233;pertoire squelettes l'arborescence suivante :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; squelettes/
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; prive/
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; squelettes/
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; contenu/
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; globals.html&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Le fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;globals.html&lt;/code&gt; contiendra, soyons originaux, l'affichage de nos globals. Tout se fera par cette page.&lt;/p&gt;
&lt;p&gt;Pour l'appeller, aller &#224; l'adresse &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;ecrire/?exec=globals&lt;/code&gt;. Comme le fichier est vide, vous devriez peut-&#234;tre avoir une erreur ou au mieux une page &#034;blanche&#034;.&lt;/p&gt;
&lt;p&gt;Voici le code &#224; ins&#233;rer dans la page &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;globals.html&lt;/code&gt; :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='prettyprint html spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;div class=&#034;nettoyeur&#034;&gt; &lt;/div&gt; &lt;BOUCLE_index(CONDITION){si #ENV{index}}&gt; #SET{global,$GLOBALS[#ENV{index}]} &lt;/BOUCLE_index&gt; #SET{global,$GLOBALS} &lt;//B_index&gt; &lt;B_form&gt; &lt;div class=&#034;liste globals&#034;&gt; &lt;h2 class=&#034;h2&#034;&gt;Index des $GLOBALS&lt;/h2&gt; &lt;form method=&#034;GET&#034; action=&#034;#SELF&#034; class=&#034;ajax&#034;&gt; [(#SELF|parametre_url{'index',''}|parametre_url{'affichage',''}|form_hidden)] &lt;select id=&#034;index_select&#034; name=&#034;index&#034;&gt; &lt;BOUCLE_form(DATA) {source table, #EVAL{$GLOBALS}|array_keys} {par valeur}&gt;[(#SET{nom_index,#VAL{&#034;'&#034;}|concat{#VALEUR,&#034;'&#034;}})] #SET{datatype,$GLOBALS[#GET{nom_index}]} &lt;option value=&#034;#VALEUR&#034;[ (#ENV{index}|=={#VALEUR}|oui) selected=&#034;selected&#034;] data-type=&#034;[(#EVAL{#GET{datatype}}|gettype)]&#034;&gt;#VALEUR&lt;/option&gt; &lt;/BOUCLE_form&gt; &lt;/select&gt; &lt;select id=&#034;affichage_select&#034; name=&#034;affichage&#034;&gt; &lt;option value=&#034;var_dump&#034;[ (#ENV{affichage}|=={#VALEUR}|oui) selected=&#034;selected&#034;]&gt;var_dump&lt;/option&gt; &lt;option value=&#034;cles&#034;[ (#ENV{affichage}|=={#VALEUR}|oui) selected=&#034;selected&#034;]&gt;Afficher uniquement les cl&#233;s&lt;/option&gt; &lt;/select&gt; &lt;input type=&#034;submit&#034; value=&#034;Valider&#034; /&gt; &lt;/form&gt; &lt;/div&gt; &lt;/B_form&gt; [(#SET{nom_index,#VAL{&#034;'&#034;}|concat{#ENV{index},&#034;'&#034;}})] #SET{datatype,$GLOBALS[#GET{nom_index}]} [(#ENV{index}|non) &lt;h3&gt;$GLOBALS [ &lt;br/&gt;&lt;small&gt;(#EVAL{$GLOBALS}|gettype)&lt;/small&gt;] &lt;/h3&gt; ] [(#ENV{index}|oui) [&lt;h3&gt;(#GET{datatype}) [ &lt;br/&gt;&lt;small&gt;(#EVAL{#GET{datatype}}|gettype)&lt;/small&gt;] &lt;/h3&gt;] ] [(#ENV{affichage}|=={var_dump}|oui) [&lt;pre&gt;(#EVAL{#GET{global}}|print|sinon{'vide'})&lt;/pre&gt;] ] [(#ENV{affichage}|=={cles}|oui) [&lt;pre&gt;(#EVAL{#GET{global}}|array_keys|foreach|sinon{'vide'})&lt;/pre&gt;] ] [(#ENV{affichage}|non) [&lt;pre&gt;(#EVAL{#GET{global}}|array_keys|foreach|sinon{'vide'})&lt;/pre&gt;] ] &lt;script type=&#034;text/javascript&#034;&gt; (function($) { $('#index_select').change(function(){ var datatype = $(this).find('option:selected').attr('data-type'); if (datatype == 'array') { $('#affichage_select').val('cles'); } else { $('#affichage_select').val('var_dump'); } }); })(jQuery); &lt;/script&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;spip&#034;&gt;Explications&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;La boucle &#034;index&#034;&lt;/strong&gt;&lt;br class='autobr' /&gt;
Elle va tout simplement regarder si on a pass&#233; un param&#232;tre &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;index&lt;/code&gt; dans notre URL. Si oui, on affichera le contenu de &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;$GLOBALS[#ENV{index}]&lt;/code&gt;. Sinon, on prend &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;$GLOBALS&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;La boucle &#034;form&#034;&lt;/strong&gt;&lt;br class='autobr' /&gt;
Elle va cr&#233;er un formulaire avec 2 champs &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;select&lt;/code&gt;. Le premier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;select&lt;/code&gt; listera tous les &#034;index&#034; de notre super variable PHP &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;$GLOBALS&lt;/code&gt;.&lt;br class='autobr' /&gt;
Le deuxi&#232;me &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;select&lt;/code&gt; se charge d'indiquer quel type d'affichage d&#233;sire-t-on avoir pour notre variable :
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; &lt;i&gt;var_dump&lt;/i&gt; : pour les utilisateurs PHP, cela parle de source : &#034;affiche les informations structur&#233;es d'une variable, y compris son type et sa valeur.&#034; Sauf que dans notre cas, on n'a pas le type :-P
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; &lt;i&gt;cles&lt;/i&gt; : affiche le tableau associatif des cl&#233;s de notre variable.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Les ENV&lt;/strong&gt;&lt;br class='autobr' /&gt;
Les &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#ENV&lt;/code&gt; apr&#232;s notre boucle &#034;form&#034; v&#233;rifie la pr&#233;sence du param&#232;tre &#034;affichage&#034; dans notre url. Selon sa valeur, on affichera d'une certaine fa&#231;on le contenu de notre variable.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Le javascript&lt;/strong&gt;&lt;br class='autobr' /&gt;
Le javascript en fin de page va juste changer la s&#233;lection du deuxi&#232;me &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;select&lt;/code&gt; selon le type de variable qu'on aura. Si notre variable est de type &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;array&lt;/code&gt;, le &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;select&lt;/code&gt; affichage sera &#034;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;cles&lt;/code&gt;&#034;. Tous les autres types (Object, string, etc.) auront un affichage &#034;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;var_dump&lt;/code&gt;&#034;.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Fini...&lt;/h2&gt;
&lt;p&gt;Ce code vous permet donc depuis l'espace priv&#233; d'avoir les globals. Mais il vous suffit de faire une page accessible sur la partie publique de votre site avec exactement le m&#234;me code pour avoir les globals dans cet environnement.&lt;/p&gt;
&lt;p&gt;Encore une fois, ce n'est qu'une astuce parmis d'autres. Si vous en avez aussi, elles sont les bienvenues en commentaires !&lt;br class='autobr' /&gt;
Cela permettra d'avoir d'autres pratiques de d&#233;veloppeurs SPIP/PHP.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>



</channel>

</rss>
