<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://www.foxmask.info/feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
  <title>FoxMaSk'Z h0m3 - Dev-Gamer World</title>
  <link>http://www.foxmask.info/</link>
  <description>La passion du developpement web et des jeux en ligne</description>
  <language>fr</language>
  <pubDate>Thu, 01 May 2008 08:01:58 +0200</pubDate>
  <copyright>foxmask ownz</copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>CakePHP - BehaviorHelper</title>
    <link>http://www.foxmask.info/post/2008/04/18/CakePHP-BehaviorHelper</link>
    <guid isPermaLink="false">urn:md5:7a9697b9aec44a8b4f92c6c035aef233</guid>
    <pubDate>Fri, 18 Apr 2008 10:52:00 +0200</pubDate>
    <dc:creator>foxmask</dc:creator>
        <category>CakePHP</category><category>PHP</category>    
    <description>    &lt;p&gt;CakePHP&amp;nbsp;: recherche globale&lt;/p&gt;


&lt;p&gt;Pour les besoins de son portail il est fort utile d'avoir des fonctionnalités transversales à tout le portail.&lt;/p&gt;


&lt;p&gt;C'est le cas de la fonction de recherche, qui peut aller à la pêche aux actualités/articles/billets/bogues etc...&lt;/p&gt;


&lt;p&gt;La solution serait d'avoir une grosse fonction php qui parcourt toutes les tables, &lt;br /&gt;
mais cela n'est bien évidement pas satisfaisant, car inmaintenable, pas portable, trop lourd...&lt;/p&gt;


&lt;p&gt;Donc l'idée va consister à créer une fonction de recherche par plugin (un plugin &quot;cakephp&quot; est une &quot;partie&quot; de l'application globale).&lt;/p&gt;


&lt;p&gt;Puis lorsque le visiteur saisira une phrase sur le moteur de recherche, nous déclencherons la fonction de recherche de chaque plugin.&lt;/p&gt;


&lt;p&gt;Comment procéder&amp;nbsp;?&lt;/p&gt;


&lt;p&gt;Chaque plugin possède son propre répertoire, exemple  &lt;br /&gt;
- app/plugins/news&lt;br /&gt;
- app/plugins/articles &lt;br /&gt;
- app/plugins/blog&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;dans chacun d'eux nous créons un script _prepend.php contenant ceci&amp;nbsp;:&lt;/p&gt;


&lt;p&gt;pour le plugins news&amp;nbsp;:&lt;/p&gt;


&lt;pre&gt;
&amp;lt;?php
$this-&amp;gt;addBehavior('publicSearchHTML', array('newsBehavior','searchNews'));

class newsBehavior
{
	public function searchNews()
	{
	    #appel de son modèle
		App::import('Model','news.News');
		$news = &amp;amp; new News();
		
		$rs = $news-&amp;gt;getNews(); 		
		
		/*
		* Ici le code sur l'iteration sur le recordset pour afficher le resultat
		* en invoquant le Helper HtmlHelper() pour le rendu bien sûr.
		*/
		
	}

?&amp;gt;
&lt;/pre&gt;

&lt;p&gt;on comprend ici qu'il faut donc etre muni d'une fonction getNews() dans le model news.&lt;/p&gt;



&lt;p&gt;Mais, pour le moment le _prepend.php est &quot;inerte&quot;, par inerte j'entends, qu'il n'est pas utilisable en l'etat.&lt;/p&gt;


&lt;p&gt;Effectivement, il manque une classe pour exploiter nos &quot;comportements&quot; (les classes xxxBehavior)&lt;/p&gt;


&lt;p&gt;Voici donc le Helper (oui car il s'agit d'afficher des données, donc un helper;) qui gère tout cela&amp;nbsp;:&lt;/p&gt;


&lt;p&gt;(extrait issue de &lt;a href=&quot;http://puncake.foxmask.info&quot; hreflang=&quot;fr&quot;&gt;PunCake&lt;/a&gt;)&lt;/p&gt;
&lt;pre&gt;
&amp;lt;?php
class PcbehaviorHelper extends Helper {

    public $puncake_behaviors = array();
    
    
    public function beforeRender() {
    
        /*
        *
        * ici le code permettant de parcourir le répertoire plugins 
        *
        */
        $this-&amp;gt;path = dirname(__FILE__) . '/../../plugins/';
		foreach ($this-&amp;gt;path as $root)
		{
			if (!is_dir($root) || !is_readable($root))
				continue;
			
			if (substr($root,-1) != '/') 
				$root .= '/';
			
			if (($d = @dir($root)) === false)
				continue;
			
			while (($entry = $d-&amp;gt;read()) !== false)
			{
				$full_entry = $root.'/'.$entry;
				
				if ($entry != '.' &amp;amp;&amp;amp; $entry != '..' &amp;amp;&amp;amp; is_dir($full_entry)
				&amp;amp;&amp;amp; file_exists($full_entry.'/_prepend.php')
                    )
				{
					require $full_entry.'/_prepend.php';
				}
			}
			$d-&amp;gt;close();
		}

    }
    
    /*
    * la fonction d'ajout du behavior 
    * au tableau des behaviors (utilisé par chaque _prepend.php)
    */
	public function addBehavior($behavior,$func)
	{
		if (is_callable($func)) {
			$this-&amp;gt;puncake_behaviors[$behavior][] = $func;						
		}
	}

    
    /*
    * Fonction de rappel de la classe et fonction à éxécuter
    */

	public function callBehavior($behavior)
	{
		if (!empty($this-&amp;gt;puncake_behaviors[$behavior]))
		{
			$args = func_get_args();
			array_shift($args);
			
			$res = '';
			
			foreach ($this-&amp;gt;puncake_behaviors[$behavior] as $f) {
				$res .= call_user_func_array($f,$args);
			}
			
			return $res;
		}
	}
}
?&amp;gt;
&lt;/pre&gt;


&lt;p&gt;Ceci fait, dans la vue de son choix, un simple appel $pcbehavior-&amp;gt;callBehavior('publicSearchHTML');&lt;/p&gt;


&lt;p&gt;déclenchera l'appel de la méthode searchNews de tous les plugins disposant d'un fichier _prepend.php .&lt;/p&gt;



&lt;p&gt;Voilà&amp;nbsp;!&lt;/p&gt;


&lt;p&gt;Ce Helper s'applique donc quelque soit le behavior qu'on veut coder.&lt;/p&gt;


&lt;p&gt;Par exemple, qd je me connecte sur mon portail, je veux etre avertis si j'ai des news/articles à modérer, des billets reçus etc.. etc..&lt;br /&gt;
Tout ceci ce gère de la même maniere que ci dessus.&lt;/p&gt;


&lt;p&gt;1) ajout d'une fonction newToValidate de plus à ma class newsBehavior &lt;br /&gt;
2) ajout du behavior à la pile via $this-&amp;gt;addBehavior('toValidate',array('newsBehavior','newsToValidate')) &lt;br /&gt;
3) appel du behavior dans la vue de mon choix par un $pcbehavior-&amp;gt;callBehavior('toValidate'); &lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Happy Cooking&amp;nbsp;!&lt;/p&gt;</description>
    
    
    
          <comments>http://www.foxmask.info/post/2008/04/18/CakePHP-BehaviorHelper#comment-form</comments>
      <wfw:comment>http://www.foxmask.info/post/2008/04/18/CakePHP-BehaviorHelper#comment-form</wfw:comment>
      <wfw:commentRss>http://www.foxmask.info/feed/rss2/comments/188</wfw:commentRss>
      </item>
    
  <item>
    <title>La maturité de PHP en entreprise</title>
    <link>http://www.foxmask.info/post/2008/03/25/La-maturite-de-PHP-en-entreprise</link>
    <guid isPermaLink="false">urn:md5:a91a06afb6860532967f4c05fb312a2a</guid>
    <pubDate>Tue, 25 Mar 2008 11:55:00 +0100</pubDate>
    <dc:creator>foxmask</dc:creator>
        <category>framework</category><category>PHP</category>    
    <description>    &lt;p&gt;Suite à quelques rencontres (pro/perso) diverses et variées, j'ai pu me rendre compte à quel point PHP perçait dans le monde professionnel.&lt;/p&gt;


&lt;p&gt;Un (trop long) temps, PHP était perçu comme un langage de bidouilleurs pour faire des sites écrit à la vas-vite.&lt;br /&gt;
Mais ces derniers temps, avec la naissance et l'arrivée de framweworks MVC en PHP, tels &lt;a href=&quot;http://www.cakephp.org&quot;&gt;CakePHP&lt;/a&gt;, &lt;a href=&quot;http://jelix.org&quot;&gt;Jelix&lt;/a&gt;, &lt;a href=&quot;http://framework.zend.com/&quot;&gt;Zend Framwork&lt;/a&gt;, PHP fini sa &quot;puberté&quot; pour entrer dans la court des grands.&lt;/p&gt;


&lt;p&gt;Zend Framework est d'ailleurs paru en version 1.5 avec derrière Zend, de grosses compagnies qui ont contribué telles Google et IBM ou encore Microsoft, FoxMedia interactive.&lt;/p&gt;


&lt;p&gt;Tout cela laisse augurer un bel avenir pour le langage PHP et toute la communauté qui gravite autour de lui &lt;img src=&quot;/themes/default/smilies/wink.png&quot; alt=&quot;;-)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>FoxMaSk'Z h0m3 4ans avec DotClear</title>
    <link>http://www.foxmask.info/post/2008/03/09/FoxMaSkZ-h0m3-4ans-avec-DotClear</link>
    <guid isPermaLink="false">urn:md5:6f87b6ffc725f3087297a76222037a9c</guid>
    <pubDate>Sun, 09 Mar 2008 15:43:00 +0100</pubDate>
    <dc:creator>foxmask</dc:creator>
        <category>General</category>
            
    <description>    &lt;p&gt;4 ans avec DotClear en ce mois de mars 2008...&lt;/p&gt;


&lt;p&gt;J'en profite pour changer de peau &lt;img src=&quot;/themes/default/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;


&lt;p&gt;D'ailleurs à propos de thèmes, après &lt;a href=&quot;http://themes.dotaddict.org/galerie-dc2/details/Lakme&quot; hreflang=&quot;fr&quot;&gt;Lakme&lt;/a&gt; utilisé tout l'hiver, voici le thème Natural, frais (en ces journées de giboulées &lt;img src=&quot;/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;


&lt;p&gt;Et c'est donc reparti pour une nouvelle année&amp;nbsp;: sous le signe de quelques projets persos (Open Source) tels &lt;a href=&quot;http://puncake.foxmask.info&quot; hreflang=&quot;fr&quot;&gt;PunCake CMS&lt;/a&gt;, et &lt;a href=&quot;http://www.dafunspirit.net&quot; hreflang=&quot;fr&quot;&gt;DafunSpirit&lt;/a&gt;.&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Book CakePHP : Version Française !</title>
    <link>http://www.foxmask.info/post/2008/03/09/Book-CakePHP</link>
    <guid isPermaLink="false">urn:md5:9fd3207e19c73aec284d491d444a9322</guid>
    <pubDate>Sun, 09 Mar 2008 14:37:00 +0100</pubDate>
    <dc:creator>foxmask</dc:creator>
        <category>CakePHP</category>    
    <description>    &lt;p&gt;CakePHP lance sa documentation pour la v 1.2.x.x dans la langue de votre choix ici http://book.cakephp.org/fr/&lt;/p&gt;


&lt;p&gt;Vous avez la possibilité de venir y participer pour la traduire et la compléter&amp;nbsp;!&lt;/p&gt;


&lt;p&gt;Extrait&amp;nbsp;:&lt;/p&gt;


&lt;p&gt;Mode d'emploi&amp;nbsp;:&lt;/p&gt;


&lt;p&gt;1. Vous parcourez le site et décelez une erreur, une explication incomplète, une fonctionnalité qui n'est pas couverte, ou tout simplement un article qui n'est pas rédigé comme vous l'auriez rédigé.&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;2. Connectez-vous au Livre de Cuisine avec votre identifiant et votre mot de passe de la Bakery.&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;3. Rédigez des sections ou proposez-en de nouvelles, en utilisant un balisage HTML simple.&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;4. Revenez vérifier que votre contribution a été approuvée quelques jours plus tard.&lt;/p&gt;


&lt;p&gt;Cette application est toute nouvelle, nous comptons donc sur votre indulgence et votre patience le temps que nous corrigions les dernières erreurs, avant la sortie définitive de CakePHP 1.2.&lt;/p&gt;


&lt;p&gt;Cette doc est déjà commencée en  bg · cz · de · en · es · fr · hu · it · ja · nl · pl · pt&lt;/p&gt;


&lt;p&gt;......... Enfin&amp;nbsp;! &lt;img src=&quot;/themes/default/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;


&lt;p&gt;ps&amp;nbsp;: bibi s'est atelé à la tâche pour la VF avec les volontaires de http://groups.google.com/group/cakephp-fr&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>CakePHP : Componsant 'Security' et $form-&gt;input</title>
    <link>http://www.foxmask.info/post/2008/02/19/CakePHP-%3A-Componsant-Security-et-form-input</link>
    <guid isPermaLink="false">urn:md5:868301d6a9c75aa276e1c36c5b0632ba</guid>
    <pubDate>Tue, 19 Feb 2008 21:08:00 +0100</pubDate>
    <dc:creator>foxmask</dc:creator>
        <category>CakePHP</category>    
    <description>    &lt;p&gt;Dans la &quot;Vue&quot;, quand le componsant Security est 'activé (aka public $component = array('Security') dans notre controleur ), il n'y a pas moyen de contourner l'utilisation de $form-&amp;gt;create $form-&amp;gt;end et surtout $form-&amp;gt;input.
Si vous vous contentez de $form-&amp;gt;create / end et codez vos input &quot;à la main&quot; (sans utiliser $form-&amp;gt; ) alors aucune chance pour que 'Security' vous laisse &quot;passer&quot; .&lt;/p&gt;


&lt;p&gt;Ainsi donc ceci ne fonctionne pas pour la raison évoqué à l'instant&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;

&amp;lt;?php echo $form-&amp;gt;create('Themes',array('action'=&amp;gt;'admin_save'));?&amp;gt;
        &amp;lt;p&amp;gt;&amp;lt;?php echo __('Choose the theme to use on your portal.'); ?&amp;gt;&amp;lt;/p&amp;gt;

        &amp;lt;div class=&amp;quot;two-cols&amp;quot;&amp;gt;
        &amp;lt;?php
        $d = dir(PUNCAKE_THEMES_PATH);
        while (($entry = $d-&amp;gt;read()) !== false)
        {
                if ($entry != '.' &amp;amp;&amp;amp; $entry != '..' &amp;amp;&amp;amp; $entry != '.svn'
                        &amp;amp;&amp;amp; is_dir(PUNCAKE_THEMES_PATH.DS.$entry)
                        &amp;amp;&amp;amp; file_exists(PUNCAKE_THEMES_PATH.DS.$entry.'/__infos.php'))
                {

                        $theme_infos = array(
                                'name' =&amp;gt; '',
                                'desc' =&amp;gt; array(),
                                'author' =&amp;gt; '',
                                'version' =&amp;gt; '',
                                'preview' =&amp;gt; ''
                        );
                        require PUNCAKE_THEMES_PATH.DS.$entry.'/__infos.php';
?&amp;gt;

                        &amp;lt;div class=&amp;quot;col&amp;quot;&amp;gt;
                        &amp;lt;h3&amp;gt;
                        &amp;lt;input type=&amp;quot;radio&amp;quot; name=&amp;quot;data[Themes][pt_theme]&amp;quot; value=&amp;quot;&amp;lt;?php echo
$entry;?&amp;gt;&amp;quot; &amp;lt;?php  echo ($pt_theme==$entry) ? &amp;quot;checked=\&amp;quot;checked\&amp;quot;&amp;quot; :
''; ?&amp;gt;/&amp;gt;
                        &amp;lt;label for=&amp;quot;&amp;lt;?php echo $entry ?&amp;gt;&amp;quot;&amp;gt;&amp;lt;?php echo $theme_infos['name']?
&amp;gt;&amp;lt;?php echo (!empty($theme_infos['version']) ? ' (v'.

$theme_infos['version'].')' : '')?&amp;gt;
                        &amp;lt;/label&amp;gt;&amp;lt;/h3&amp;gt;
                        &amp;lt;p class=&amp;quot;field&amp;quot;&amp;gt;
                        &amp;lt;?php echo (!empty($theme_infos['preview']) ? '&amp;lt;label for=&amp;quot;'.
$entry.'&amp;quot;&amp;gt;&amp;lt;img id=&amp;quot;'.$entry.'&amp;quot; src=&amp;quot;'.pt_portal_url.'themed/'.
$entry.'/'.$theme_infos['preview'].'&amp;quot; alt=&amp;quot;&amp;quot; /&amp;gt;&amp;lt;/label&amp;gt;' : '') ?&amp;gt;
                        &amp;lt;span class=&amp;quot;desc&amp;quot;&amp;gt;&amp;lt;?php echo __('by',true).' '.
$theme_infos['author'] ?&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
                        &amp;lt;?php echo (!empty($theme_infos['desc'][$user['language']]) ? '&amp;lt;p&amp;gt;'.
$theme_infos['desc'][$user['language']].'&amp;lt;/p&amp;gt;' : (!
empty($theme_infos['desc']['English']) ? '&amp;lt;p&amp;gt;'.$theme_infos['desc']
['English'].'&amp;lt;/p&amp;gt;' : ''))?&amp;gt;
                        &amp;lt;/div&amp;gt;
&amp;lt;?php
                }
        }
        $d-&amp;gt;close(); ?&amp;gt;
        &amp;lt;/div&amp;gt;

        &amp;lt;?php echo $form-&amp;gt;submit( __('Save',true) ,array('class'=&amp;gt;'submit'))?&amp;gt;
       &amp;lt;?php echo $form-&amp;gt;end(); ?&amp;gt; 

&lt;/pre&gt;




&lt;p&gt;Pour obtenir exactement le même code html mais qui satisfasse le composant 'Security' il faut la jouer comme ceci&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;

&amp;lt;?php echo $form-&amp;gt;create('Themes',array('action'=&amp;gt;'admin_save'));?&amp;gt;
        &amp;lt;p&amp;gt;&amp;lt;?php echo __('Choose the theme to use on your portal.'); ?&amp;gt;&amp;lt;/p&amp;gt;

        &amp;lt;div class=&amp;quot;two-cols&amp;quot;&amp;gt;
        &amp;lt;?php
        $d = dir(PUNCAKE_THEMES_PATH);
        while (($entry = $d-&amp;gt;read()) !== false)
        {
                if ($entry != '.' &amp;amp;&amp;amp; $entry != '..' &amp;amp;&amp;amp; $entry != '.svn'
                        &amp;amp;&amp;amp; is_dir(PUNCAKE_THEMES_PATH.DS.$entry)
                        &amp;amp;&amp;amp; file_exists(PUNCAKE_THEMES_PATH.DS.$entry.'/__infos.php'))
                {

                        $theme_infos = array(
                                'name' =&amp;gt; '',
                                'desc' =&amp;gt; array(),
                                'author' =&amp;gt; '',
                                'version' =&amp;gt; '',
                                'preview' =&amp;gt; ''
                        );
                        require PUNCAKE_THEMES_PATH.DS.$entry.'/__infos.php';

                        $version = (!empty($theme_infos['version']) ? ' (v'.
$theme_infos['version'].')' : '');

                        $before = '&amp;lt;div class=&amp;quot;col&amp;quot;&amp;gt;'.&amp;quot;\n&amp;quot;;
                        $before .= '&amp;lt;h3&amp;gt;'.&amp;quot;\n&amp;quot;;

            $after = '';
            $after .= '&amp;lt;/h3&amp;gt;';
            $after .= '&amp;lt;p class=&amp;quot;field&amp;quot;&amp;gt;'.&amp;quot;\n&amp;quot;;

            $after .= (!empty($theme_infos['preview']) ? '&amp;lt;label
for=&amp;quot;'.$entry.'&amp;quot;&amp;gt;&amp;lt;img id=&amp;quot;'.$entry.'&amp;quot; src=&amp;quot;'.pt_portal_url.'themed/'.
$entry.'/'.$theme_infos['preview'].'&amp;quot; alt=&amp;quot;&amp;quot; /&amp;gt;&amp;lt;/label&amp;gt;' :
'');
            $after .= '&amp;lt;span class=&amp;quot;desc&amp;quot;&amp;gt;'. __('by',true).' '.
$theme_infos['author'] .'&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;'.&amp;quot;\n&amp;quot;;
            $after .= (!empty($theme_infos['desc']
[$user['language']]) ? '&amp;lt;p&amp;gt;'.$theme_infos['desc']
[$user['language']].'&amp;lt;/p&amp;gt;' : (!empty($theme_infos['desc']
['English']) ? '&amp;lt;p&amp;gt;'.$theme_infos['desc']['English'].'&amp;lt;/p&amp;gt;' : ''));

            $after .= '&amp;lt;/div&amp;gt;'.&amp;quot;\n&amp;quot;;

                        echo $form-&amp;gt;input('pt_theme',
                                array(
                                'div'=&amp;gt;false,
                                    'label'=&amp;gt;true,
                                    'legend'=&amp;gt;false,
                                'type'=&amp;gt;'radio',
                                'before' =&amp;gt; $before,
                                'after' =&amp;gt; $after,
                                'value' =&amp;gt; $pt_theme,
                                'options'=&amp;gt; array($entry=&amp;gt;$theme_infos['name'].
$version)

                        )
                );
                }
        }
        $d-&amp;gt;close(); ?&amp;gt;
        &amp;lt;/div&amp;gt;

        &amp;lt;?php echo $form-&amp;gt;submit( __('Save',true) ,array('class'=&amp;gt;'submit'))?


&amp;lt;?php echo $form-&amp;gt;end(); ?&amp;gt; 

&lt;/pre&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>CakePHP - Security and Sanitize : r0x !</title>
    <link>http://www.foxmask.info/post/2008/02/04/CakePHP-Security-and-Satinize-%3A-r0x</link>
    <guid isPermaLink="false">urn:md5:81b9758e44e3c0a3aaf13662b6fa8b16</guid>
    <pubDate>Mon, 04 Feb 2008 23:20:00 +0100</pubDate>
    <dc:creator>foxmask</dc:creator>
        <category>CakePHP</category>    
    <description>    &lt;p&gt;Avec CakePHP, renforcer son site web devient un jeu d'enfant grâce à 2 libs&amp;nbsp;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://manual.cakephp.org/chapter/security&quot; hreflang=&quot;en&quot;&gt;Security&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://manual.cakephp.org/chapter/sanitize&quot; hreflang=&quot;en&quot;&gt;Sanitize&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Le premier intervient lors de l'utilisation de formulaire.&lt;br /&gt;
Le second intervient lors du traitement des données des formulaires avant de stocker les infos dans la base de données.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;http://manual.cakephp.org/chapter/security&quot; hreflang=&quot;en&quot;&gt;Security&lt;/a&gt;&lt;/strong&gt;&amp;nbsp;:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;voici le &lt;em&gt;controller&lt;/em&gt; dans lequel on utilise Security&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;

class SettingsController extends AppController {
	public $name = 'Settings';
	public $helpers     = array('Html','Form', );
							
	public $components   = array( 'Security') ;	
	
	public function beforeFilter() {
	    #si des données sont renvoyées, activons la securité !

	    if (!empty($this-&amp;gt;data))
                  #s'il s'agit d'un POST on autorise l'action &amp;quot;index&amp;quot; 
    	          $this-&amp;gt;Security-&amp;gt;requirePost('index');
    	    
	}

	public function admin_index () {
...
		if (!empty($this-&amp;gt;data)) {
...
                }
       }
&lt;/pre&gt;


&lt;p&gt;la fonction beforeFilter agit avant que admin_index ne soit appelé et c'est là que Security entre en jeu.&lt;br /&gt;
&lt;code&gt;$this-&amp;gt;Security-&amp;gt;requirePost('index');&lt;/code&gt;&lt;/p&gt;


&lt;p&gt;ceci permet de filtrer les appels directs à l'action &quot;index&quot; qui ne peuvent avoir lieu que via un POST&amp;nbsp;!
Tout autre action sera envoyée dans un &quot;blackHole&quot; (Trou noir &lt;img src=&quot;/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;


&lt;p&gt;voyons donc maintenant la Vue&amp;nbsp;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;on créé le fomulaire&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;?php echo $form-&amp;gt;create('Settings',array('action'=&amp;gt;'admin_index') ?&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;on ajoute un champ de texte qqconque&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;?php echo $form-&amp;gt;text('p_title' ,array(&quot;size&quot;=&amp;gt;50,&quot;maxlength&quot;=&amp;gt;255,&quot;value&quot;=&amp;gt;pt_portal_title)) ?&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;on ajout un bouton&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;?php echo $form-&amp;gt;submit(__('Save',true)); ?&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;on fini le formulaire&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;?php echo $form-&amp;gt;end(); ?&amp;gt;&lt;/code&gt;&lt;/p&gt;


&lt;p&gt;c'est 4 lignes vont produire les lignes suivantes&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;

&amp;lt;form method=&amp;quot;post&amp;quot; action=&amp;quot;/admin/settings&amp;quot;&amp;gt;
&amp;lt;fieldset style=&amp;quot;display:none;&amp;quot;&amp;gt;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;_method&amp;quot; value=&amp;quot;POST&amp;quot; /&amp;gt;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;data[__Token][key]&amp;quot; value=&amp;quot;2dc4f7414071176b5eef24ee54f8db34adf83632&amp;quot; id=&amp;quot;Token409653362&amp;quot; /&amp;gt;
&amp;lt;/fieldset&amp;gt;
&amp;lt;input name=&amp;quot;data[Settings][p_title]&amp;quot; type=&amp;quot;text&amp;quot; size=&amp;quot;50&amp;quot; maxlength=&amp;quot;255&amp;quot; value=&amp;quot;&amp;quot; id=&amp;quot;SettingsPTitle&amp;quot; /&amp;gt;	
&amp;lt;div class=&amp;quot;submit&amp;quot;&amp;gt;&amp;lt;fieldset style=&amp;quot;display:none;&amp;quot;&amp;gt;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;data[__Token][fields]&amp;quot; value=&amp;quot;9a18269dee671707eb5d1dbdaba4b16f9def551a&amp;quot; id=&amp;quot;TokenFields1740898927&amp;quot; /&amp;gt;&amp;lt;/fieldset&amp;gt;&amp;lt;input type=&amp;quot;submit&amp;quot;  value=&amp;quot;Enregistrer&amp;quot; /&amp;gt;&amp;lt;/div&amp;gt;		
&amp;lt;/form&amp;gt;

&lt;/pre&gt;


&lt;p&gt;décortiquons ce qui s'est passé&amp;nbsp;:&lt;/p&gt;


&lt;p&gt;le fait d'avoir ajouté la ligne &lt;code&gt;public $components   = array( 'Security')&amp;nbsp;;	&lt;/code&gt; dans notre controller,
indique à CakePHP, de générer dans la Vue, les champs   __Token,  lors de l'utilisation de  &lt;code&gt;$form-&amp;gt;create()&lt;/code&gt; et &lt;code&gt;$form-&amp;gt;end()&lt;/code&gt;&lt;/p&gt;


&lt;p&gt;Ainsi paré, votre application part à la plupart des tentatives d'accès frauduleuses&amp;nbsp;! :D&lt;/p&gt;


&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;http://manual.cakephp.org/chapter/sanitize&quot; hreflang=&quot;en&quot;&gt;Sanitize&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;simple et efficace, on utilise Sanitize comme suit&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
uses('sanitize');
// Next, create a new Sanitize object:
$mrClean = new Sanitize();
&lt;/pre&gt;


&lt;p&gt;ensuite on filtre toutes les données avec un simple $mrClean-&amp;gt;escape($my_data);&lt;/p&gt;


&lt;p&gt;ceci s'utilise généralement pour filtrer les données provenant de formulaire, avant de les stocker dans notre base.&lt;/p&gt;


&lt;p&gt;plus d'infos sur CakePHP &lt;a href=&quot;http://manual.cakephp.org/chapter/security&quot; hreflang=&quot;en&quot;&gt;Security&lt;/a&gt; et &lt;a href=&quot;http://manual.cakephp.org/chapter/sanitize&quot; hreflang=&quot;en&quot;&gt;Satinize&lt;/a&gt; &lt;img src=&quot;/themes/default/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;


&lt;p&gt;Bonne lecture&amp;nbsp;!&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>PunBB 1.3 beta - la magie des 'hameçons' (aka Hook)</title>
    <link>http://www.foxmask.info/post/2008/02/04/PunBB-13-beta-la-magie-des-hamecons</link>
    <guid isPermaLink="false">urn:md5:30114540ddcded20ab493def97d7fdd0</guid>
    <pubDate>Mon, 04 Feb 2008 22:50:00 +0100</pubDate>
    <dc:creator>foxmask</dc:creator>
        <category>PunBB</category>    
    <description>    &lt;p&gt;Après de très long mois d'attente (près de 18?), PunBB 1.3 sort en version béta avec quelques nouveautés dont&amp;nbsp;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;le support de l'utf-8&lt;/li&gt;
&lt;li&gt;des 'hooks'&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;cela parait peu dit comme cela mais attention les yeux ....&lt;/p&gt;


&lt;p&gt;les hooks permettent dès maintenant, de créer des &quot;extensions&quot; sans toucher au coeur du code de punbb.&lt;br /&gt;
Ainsi l'avantage est de pouvoir produire des extensions de son choix qui soit installable / désinstable avec aisance et une maintenance accrue.&lt;/p&gt;


&lt;p&gt;un exemple :&lt;br /&gt;
dans le script header.php on trouve la ligne suivante :&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;&lt;code&gt;($hook = get_hook('hd_template_loaded'))&amp;nbsp;? eval($hook)&amp;nbsp;: null;&lt;/code&gt;&lt;/p&gt;


&lt;p&gt;celle ci permet d'ajouter ce que l'on veut après que le template se soit chargé.&lt;/p&gt;


&lt;p&gt;Pour exploiter ce hook, prennons l'exemple &lt;a href=&quot;http://punbb.org/download/example_extensions.zip&quot; hreflang=&quot;en&quot;&gt;&quot;Random Quote&quot;&lt;/a&gt; permettant de changer la description du forum aléatoirement.&lt;/p&gt;


&lt;p&gt;le &lt;strong&gt;noeud&lt;/strong&gt; &lt;strong&gt;&lt;em&gt;hook id&lt;/em&gt;&lt;/strong&gt; identifie quel hook de punbb on compte exploiter, ici donc hook id vaut &lt;em&gt;&lt;strong&gt;hd_template_loaded&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;une fois installé dans le répertoire extensions, rendez vous dans l'administration du forum puis installez l'extension.&lt;/p&gt;


&lt;p&gt;vous verrez immédiatement le hook produire son effet en changeant la description &lt;img src=&quot;/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;


&lt;p&gt;Pour info, les  hooks commençants par&amp;nbsp;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;hd&lt;/strong&gt;_ sont dans le header&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ft&lt;/strong&gt;_ sont dans le footer&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;in&lt;/strong&gt;_ sont dans l'index&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;li&lt;/strong&gt;_ sont dans le login&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;dl&lt;/strong&gt;_ sont dans delete&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ex&lt;/strong&gt;_ sont dans externe&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;he&lt;/strong&gt;_ sont dans l'aide&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;mi&lt;/strong&gt;_ sont dans misc&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;mr&lt;/strong&gt;_ sont dans moderate&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;po&lt;/strong&gt;_ sont dans post&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;pf&lt;/strong&gt;_ sont dans profile&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;rg&lt;/strong&gt;_ sont dans register&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;re&lt;/strong&gt;_ sont dans rewrite&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;se&lt;/strong&gt;_ sont dans search&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ul&lt;/strong&gt;_ sont dans userlist&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;vf&lt;/strong&gt;_ sont dans viewforum&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;vt&lt;/strong&gt;_ sont dans viewtopic&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;vous voici parés prêt à créer/migrer vos MOD existantes &lt;img src=&quot;/themes/default/smilies/wink.png&quot; alt=&quot;;-)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>CakePHP (1.2.0.6311) sorti tout chaud du four</title>
    <link>http://www.foxmask.info/post/2008/01/03/CakePHP-sorti-tout-chaud-du-four</link>
    <guid isPermaLink="false">urn:md5:ac67fe1d31eb55bc329b15cfe65879c3</guid>
    <pubDate>Thu, 03 Jan 2008 17:36:00 +0100</pubDate>
    <dc:creator>foxmask</dc:creator>
        <category>CakePHP</category><category>MVC</category>    
    <description>    &lt;p&gt;En cette période d'épiphany, &lt;a href=&quot;http://cakephp.org/&quot; hreflang=&quot;en&quot;&gt;CakePHP&lt;/a&gt; tire (non pas les rois) une version beta 1.2.0.6311 de son zoli :D framework MVC .&lt;/p&gt;


&lt;p&gt;Au menu plein d'améliorations et corrections de bugs ( dont voici &lt;a href=&quot;https://trac.cakephp.org/wiki/changelog/1.2.x.x&quot; hreflang=&quot;en&quot;&gt;la liste complète&lt;/a&gt; ) dont une amélioration qui me fait plaisir concernant la gestions des plugins et des controllers &lt;img src=&quot;/themes/default/smilies/wink.png&quot; alt=&quot;;-)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;


&lt;p&gt;Pour ceux qui douterait de l'utilité/fiabilité de ce framework, sachez que celui ci est &quot;juste&quot; utilisé par le petit site &lt;a href=&quot;http://addons.mozilla.org/&quot; hreflang=&quot;en&quot;&gt;Mozilla Addons&lt;/a&gt; &lt;img src=&quot;/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>CakePHP - PunBB - statistique du forum</title>
    <link>http://www.foxmask.info/post/2007/12/22/CakePHP-PunBB-statistique-du-forum</link>
    <guid isPermaLink="false">urn:md5:1b44d8dbec4490c5160dfc653a150245</guid>
    <pubDate>Wed, 26 Dec 2007 00:00:00 +0100</pubDate>
    <dc:creator>foxmask</dc:creator>
        <category>CakePHP</category><category>MVC</category><category>PunBB</category>    
    <description>    &lt;p&gt;Quelques conceptes de bases.&lt;/p&gt;


&lt;p&gt;Pour pouvoir afficher des info réutilisables dans ses Views CakePHP fourni des &quot;Helpers&quot; et des Elements
Le Helper étend les possibilités des Vues et les Elements sont des petits bouts de code php/html qui peuvent étre affichés plusieurs fois dans la même page.&lt;/p&gt;


&lt;p&gt;Ainsi donc le &quot;bloc de stats&quot; pourrait très bien être affiché dans plusieurs pages pour chacun des plugins news/articles/lexique etc..&lt;/p&gt;


&lt;p&gt;Donc nous allons faire un element &quot;app/views/elements/stats.ctp&quot; comme suit&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
&amp;lt;?php
$bloc-&amp;gt;startBloc(__('Forums statistics',true), 'stats');				
				
$pt_total_users = $this-&amp;gt;requestAction('users/nbUsers');
$pt_last_user 	= $this-&amp;gt;requestAction('users/lastUser');	
$pt_total_posts = $this-&amp;gt;requestAction('forum/stats');
?&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;?php echo __('Total numbers of members:',true).' '.$pt_total_users['0']['0']['total_user']?&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;?php echo __('Newest resgistered user:',true).' &amp;lt;a href=&amp;quot;'.pt_forum_url.'profile.php?id='.$pt_last_user['0']['User']['id'].'&amp;quot;&amp;gt;'.$pt_last_user['0']['User']['username']?&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;?php echo __('Total numbers of topics:',true).' '.$pt_total_posts['0']['0']['total_topics']?&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;?php echo __('Total numbers of posts:',true).' '.$pt_total_posts['0']['0']['total_posts']?&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;?php
$bloc-&amp;gt;endBloc();
?&amp;gt;
&lt;/pre&gt;


&lt;p&gt;comment tout cela fonctionne&amp;nbsp;:&lt;/p&gt;


&lt;p&gt;dans le script app/app_controller.php de notre applications nous faisons ceci&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
class AppController extends Controller {
public $helpers = array ('Bloc','Html');
...
}
&lt;/pre&gt;

&lt;p&gt;et le helper bloc contient ceci (app/views/helpers/bloc.php):&lt;/p&gt;
&lt;pre&gt;
&amp;lt;?php
class BlocHelper extends Helper {
 	 	
 	function startBloc($title='',$id='') {	
		static $i;	
		$id = $id != '' ? $id : $i;		
		$res = '';
		$res .= &amp;quot;\t&amp;quot;.'&amp;lt;div class=&amp;quot;block&amp;quot; id=&amp;quot;'.$id.'&amp;quot;&amp;gt;'.&amp;quot;\n&amp;quot;;		
		if ($title!='')
			$res .= &amp;quot;\t&amp;quot;.'&amp;lt;h2&amp;gt;&amp;lt;span&amp;gt;'.$title.'&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;'.&amp;quot;\n&amp;quot;;		
		$res .= 
		&amp;quot;\t\t&amp;quot;.'&amp;lt;div class=&amp;quot;box&amp;quot; id=&amp;quot;box_'.$id.'&amp;quot;&amp;gt;'.&amp;quot;\n&amp;quot;;
		
		if (PT_DEFAULT_THEME == 'punbb') 
			$res .= &amp;quot;\t\t\t&amp;quot;.'&amp;lt;div class=&amp;quot;inbox&amp;quot;&amp;gt;'.&amp;quot;\n&amp;quot;;
		
		echo $res;
		$i++;
	}
	function endBloc() {
 		if (PT_DEFAULT_THEME == 'punbb') {		
			echo 
			&amp;quot;\t\t\t&amp;quot;.'&amp;lt;/div&amp;gt;'.&amp;quot;\n&amp;quot;.
			&amp;quot;\t\t&amp;quot;.'&amp;lt;/div&amp;gt;'.&amp;quot;\n&amp;quot;.
			&amp;quot;\t&amp;quot;.'&amp;lt;/div&amp;gt;';
 		} 
 		else {
 			echo 
			&amp;quot;\t\t&amp;quot;.'&amp;lt;/div&amp;gt;'.&amp;quot;\n&amp;quot;.
			&amp;quot;\t&amp;quot;.'&amp;lt;/div&amp;gt;'; 			
 		}
	} 
 	
}
?&amp;gt;
&lt;/pre&gt;


&lt;p&gt;Ainsi paré&amp;nbsp;: le controlleur principal dispose d'un helper bloc &lt;br /&gt;
donc la vue peut utiliser $bloc-&amp;gt;endBloc et -&amp;gt;startBloc&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;ceci est une premiere etape :&lt;br /&gt;
suit ensuite dans notre element les 3 lignes&amp;nbsp;: &lt;br /&gt;&lt;/p&gt;
&lt;pre&gt;

$pt_total_users = $this-&amp;gt;requestAction('users/nbUsers');
$pt_last_user 	= $this-&amp;gt;requestAction('users/lastUser');	
$pt_total_posts = $this-&amp;gt;requestAction('forum/stats');
&lt;/pre&gt;

&lt;p&gt;ces 3 lignes effectuent des &quot;requestAction&quot; lequelles permettent d'accèder aux methodes &lt;em&gt;nbUser&lt;/em&gt; et &lt;em&gt;lastUser&lt;/em&gt; de la class   &lt;strong&gt;UsersController &lt;/strong&gt; et à la methode &lt;em&gt;stats&lt;/em&gt; de la class &lt;strong&gt;ForumControllers&lt;/strong&gt;, en voici le détail :&lt;br /&gt;&lt;/p&gt;

&lt;pre&gt;

&amp;lt;?php
class UsersController extends AppController {
	public $name 	= 'Users';
[...]
	public function lastUser () {		
		$strQuery =  'SELECT id, username FROM '.DB_PREFIX.'users as User' .
						' ORDER BY registered DESC LIMIT 1';
		$resultset = $this-&amp;gt;User-&amp;gt;query($strQuery);
		return $resultset; 									
	}	
	public function nbUsers () {
		
		$strQuery = 'SELECT COUNT(id)-1 AS total_user FROM '.DB_PREFIX.'users AS User ';		  
		$resultset = $this-&amp;gt;User-&amp;gt;query($strQuery);
		return $resultset; 	
     }
[...]
}
&lt;/pre&gt;


&lt;p&gt;ceci nous permet donc d'avoir facilement les information de stats de notre forum de manière utlra simplissime dans un bloc qui s'affichera ou bon vous semble comme suit&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;&amp;lt;?php  echo $this-&amp;gt;renderElement('stats');?&amp;gt;&lt;/pre&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>CakePHP - PunBB - architecture generale</title>
    <link>http://www.foxmask.info/post/2007/12/22/CakePHP-PunBB-architecture-generale</link>
    <guid isPermaLink="false">urn:md5:747dace0ae09ed885374595b9d2be3a8</guid>
    <pubDate>Mon, 24 Dec 2007 10:30:00 +0100</pubDate>
    <dc:creator>foxmask</dc:creator>
        <category>CakePHP</category><category>MVC</category><category>PunBB</category>    
    <description>    &lt;p&gt;Voici l'architecture générale avec la liste des répertoires de son application&lt;/p&gt;


&lt;p&gt;- &lt;strong&gt;app&lt;/strong&gt;&lt;br /&gt;
--- &lt;strong&gt;config&lt;/strong&gt; contient les fichiers de config de son application tel database.php, bootstrap.php etc..&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;--- &lt;strong&gt;controllers&lt;/strong&gt; contient les controllers de votre application&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;--- &lt;strong&gt;locales&lt;/strong&gt; contient les traductions &lt;br /&gt;&lt;/p&gt;


&lt;p&gt;--- &lt;strong&gt;models&lt;/strong&gt; contient les models&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;--- &lt;strong&gt;plugins&lt;/strong&gt; contient des applications nommé plugins (détail plus bas)&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;--- &lt;strong&gt;vendors&lt;/strong&gt; contient des librairies externes à CakePHP et nécéssaire à son application&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;--- &lt;strong&gt;views&lt;/strong&gt; contient les views de votre application&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;--- &lt;strong&gt;webroot&lt;/strong&gt; contient la partie &quot;web&quot; de votre application
--- &lt;strong&gt;webroot&lt;/strong&gt;/forum/ l'endroit où est installé punBB !&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;le répertoire &lt;strong&gt;plugins&lt;/strong&gt; reprend l'integralité de l'arborscence MVC ce qui donne&amp;nbsp;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;plugins&lt;/strong&gt; &lt;br /&gt;&lt;/li&gt;
&lt;li&gt;- &lt;strong&gt;news&lt;/strong&gt; &lt;br /&gt;&lt;/li&gt;
&lt;li&gt;- &lt;strong&gt;news&lt;/strong&gt;/news_app_controller.php class du controller du plugins news &lt;br /&gt;&lt;/li&gt;
&lt;li&gt;- &lt;strong&gt;news&lt;/strong&gt;/news_app_model.php  class du mdel du module du plugin news&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;- &lt;strong&gt;news&lt;/strong&gt;/&lt;em&gt;controllers&lt;/em&gt;/news_controller.php le controlleur du plugin news&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;- &lt;strong&gt;news&lt;/strong&gt;/&lt;em&gt;models&lt;/em&gt;/news.php le model du plugin news&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;- &lt;strong&gt;news&lt;/strong&gt;/&lt;em&gt;views&lt;/em&gt;/themed/punbb/news/index.ctp la vue principale du module news&lt;br /&gt;&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;La configuration apache devra donc définir un VirtualHost sur le répertoire app/webroot/ comme DOCUMENT_ROOT.&lt;br /&gt;&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>CakePHP - débuter son projet avec &quot;Bake&quot;</title>
    <link>http://www.foxmask.info/post/2007/12/22/CakePHP-debuter-son-projet-avec-Bake</link>
    <guid isPermaLink="false">urn:md5:ec68cb9855d6db94fc59d92b5342c34d</guid>
    <pubDate>Sat, 22 Dec 2007 11:32:00 +0100</pubDate>
    <dc:creator>foxmask</dc:creator>
        <category>CakePHP</category><category>MVC</category>    
    <description>    &lt;p&gt;&lt;a href=&quot;http://cakephp.org/&quot; hreflang=&quot;en&quot;&gt;CakePHP&lt;/a&gt; permet de générer son application en quelques petites minutes grâce à &quot;bake&quot;&amp;nbsp;!&lt;/p&gt;


&lt;p&gt;Pour ce faire on ouvre une console (windows ou linux c'est kifkif) et on se fait&amp;nbsp;:&lt;/p&gt;


&lt;p&gt;&lt;code&gt;cake bake foxmask&lt;/code&gt;&lt;/p&gt;


&lt;p&gt;pour créer l'arboresence du projet &quot;foxmask&quot;&lt;/p&gt;


&lt;p&gt;ensuite on créé le répertoire config dans le répertoire &quot;foxmask&quot; on défini les paramètre de connexion à sa/ses base(s) de données et on peut se lancer dans la création des Models Views Controller comme suit&amp;nbsp;:&lt;/p&gt;


&lt;p&gt;&lt;code&gt;cake bake -app foxmask&lt;/code&gt;&lt;/p&gt;


&lt;p&gt;Il vous suffira donc de suivre les choix des menus dans la console et en quelques instants vous aurez achevé votre projet &lt;img src=&quot;/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;


&lt;p&gt;Il restera alors à fignoler des détails mais vous pouvez dores et déjà accéder à votre application via http://localhost/foxmask/&lt;/p&gt;


&lt;p&gt;Plus de détails sur le &lt;a href=&quot;http://www.cakephp.org/screencasts/view/3&quot;&gt;Tuto de creation de blog en vidéo&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;Poursuivre avec &lt;a href=&quot;http://www.foxmask.info/post/2007/12/06/CakePHP-et-PunBB-%3A-introduction&quot;&gt;CakePHP intégrant PunBB&lt;/a&gt;&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>CakePHP et PunBB : introduction</title>
    <link>http://www.foxmask.info/post/2007/12/06/CakePHP-et-PunBB-%3A-introduction</link>
    <guid isPermaLink="false">urn:md5:d85933bf29d6491adac75eea934fe6dc</guid>
    <pubDate>Thu, 06 Dec 2007 14:00:00 +0100</pubDate>
    <dc:creator>foxmask</dc:creator>
        <category>CakePHP</category><category>MVC</category><category>PunBB</category>    
    <description>    &lt;p&gt;Après l'édpisode des &lt;a href=&quot;http://www.foxmask.info/post/2007/11/11/Framework-PHP5-Comparatif&quot; hreflang=&quot;fr&quot;&gt;comparatifs de framework PHP&lt;/a&gt;, voici une astuce pour vous permettre de franchir le pas vers CakePHP (un bon framework PHP utilisant MVC) tout en utilisant PunBB comme outil de forum.&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;L'idée de base est la suivante&amp;nbsp;: je veux créer un portail basé sur le framework CakePHP mais en utilisant une seul et unique session entre mon portail et mon forum.&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Donc pour y parvenir, dans le script dispatcher.php de CakePHP je fais le classique include du script common.php de punbb comme suit :&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;j'edite le script cake/dispatcher.php et au dessus de&lt;/p&gt;

&lt;pre&gt;
 class Dispatcher extends Object {
&lt;/pre&gt;


&lt;p&gt;j'ajoute&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
 define('PUN_ROOT',WWW_ROOT. 'forums/');
 require PUN_ROOT.'include/common.php';
&lt;/pre&gt;


&lt;p&gt;de là, partout dans CakePHP nous avons la &quot;main&quot; sur les variables punBB et la gestion de la session.&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Donc dans mon controlleur gérant l'utilisateur contiendra ni plus ni moins qu'un copier/coller du code de gestion de la fonction login (avec l'action = in et out selon le cas)&lt;br /&gt;&lt;/p&gt;
&lt;pre&gt;
  class UsersController extends AppController {
      public function login ()
    {
    	global $pun, $db, $pun_config, $db_type, $lang_login;
        $this-&amp;gt;set('error', false);
       #soumission du formulaire de login
        if (!empty($this-&amp;gt;data))
        {
      #analyse du login/pass ; recherche dans la base et creation du cookie
       }
     }
   }
&lt;/pre&gt;

&lt;p&gt;évidement on n'oubliera pas d'ajouter un global $pun_user  par exemple, dans la fonction login, pour manipuler les données que cette variable contient.&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Dans un prochain billet, j'aborderai les vues (le &lt;strong&gt;V&lt;/strong&gt; de &lt;em&gt;MVC&lt;/em&gt; &lt;img src=&quot;/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt; et comment produire un menu et recuperer dans un bloc de son portail les 'n' derniers sujets recents du forum.&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Framework PHP5 - Comparatif</title>
    <link>http://www.foxmask.info/post/2007/11/11/Framework-PHP5-Comparatif</link>
    <guid isPermaLink="false">urn:md5:4e21e2143f2e15f74237733cfa193a8c</guid>
    <pubDate>Sun, 11 Nov 2007 18:30:00 +0100</pubDate>
    <dc:creator>foxmask</dc:creator>
        <category>CakePHP</category><category>LAMP-WAMP</category><category>MVC</category><category>PHP</category>    
    <description>    &lt;p&gt;A la recherche d'un Framwork PHP5 utilisant l'architecture bien connu qu'est le &lt;a href=&quot;http://fr.wikipedia.org/wiki/Mod%C3%A8le-Vue-Contr%C3%B4leur&quot; hreflang=&quot;fr&quot;&gt;&quot;Modèle - Vue - Controleur&quot; ou MVC&lt;/a&gt; pour coder un logiciel libre &quot;dernière génération&quot; &lt;img src=&quot;/themes/default/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt; , j'ai croisé sur mon chemin nombre de ceux &lt;a href=&quot;http://fr.wikipedia.org/wiki/Liste_de_frameworks_PHP&quot; hreflang=&quot;fr&quot;&gt;cités sur wikipedia&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;Pour ceux ne connaissant pas le MVC, le principe est le suivant&amp;nbsp;: le &lt;strong&gt;M&lt;/strong&gt;odèle gère la logique métier et les accès aux bases de données, la &lt;strong&gt;V&lt;/strong&gt;ue gère l'affichage de ce que voit l'utilisateur avec l'écran, le &lt;strong&gt;C&lt;/strong&gt;ontroleur gère les evenements déclenchés par l'utilsateur.
La &lt;strong&gt;force&lt;/strong&gt; de cette architecture est sa &lt;strong&gt;modularité&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://jelix.org/&quot; hreflang=&quot;en&quot;&gt;Jelix&lt;/a&gt; écrit en PHP5 - projet jeune et dynamique.&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Avantage&lt;/strong&gt;&amp;nbsp;: pour ceux codant déjà en POO&amp;nbsp;; tout y est&amp;nbsp;; DAO, CRUD et tout le toutim.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Inconvénient&lt;/strong&gt;&amp;nbsp;: un peu &quot;jeune&quot; et pas si facile que cela à apréhender à prime abord mais en prennant bien son temps on fini par arriver à faire ce qu'on veut.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cible&lt;/strong&gt;&amp;nbsp;: Tout developpeur, webmaster, pas de restriction pour projet de logiciel libre&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.cakephp.org&quot; hreflang=&quot;en&quot;&gt;CakePHP&lt;/a&gt; écrit en PHP (tout court) et supportant PHP5 parfaitement - on peut donc coder en PHP5 en utilisant celui ci.&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Avantage&lt;/strong&gt;&amp;nbsp;: &lt;strong&gt;très&lt;/strong&gt; complet&amp;nbsp;; communauté active&amp;nbsp;; projet dynamique.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Inconvénient&lt;/strong&gt;&amp;nbsp;: pas préhemptif (à mon goût), manque cruellement de doc ... version beta ...&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cible&lt;/strong&gt;&amp;nbsp;: Tout developpeur, webmaster, pas de restriction pour projet de logiciel libre&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://codeigniter.com/tutorials/&quot; hreflang=&quot;en&quot;&gt;CodeIgniter&lt;/a&gt; écrit en PHP &lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Avantage&lt;/strong&gt;&amp;nbsp;: &lt;strong&gt;très&lt;/strong&gt; facile de mise en oeuvre - tuto videos de 9et 20mn bleuffant&amp;nbsp;!&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Inconvénient&lt;/strong&gt;&amp;nbsp;: ... pas encore trouvé ...&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cible&lt;/strong&gt;&amp;nbsp;: les developpeurs de site web ne publiant pas de soft sous GPL ....&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.symfony-project.com/&quot; hreflang=&quot;en&quot;&gt;Symfony&lt;/a&gt; écrit en PHP5 - le mastodonte&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Avantage&lt;/strong&gt;&amp;nbsp;: complet et adapté pour un milieu pro ou pour un hébergement permettant de toucher à la config PHP. Dispose de scripts permettant de generer les class modèle via des scripts de CRUD (Create Request Update Delete).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Inconvénient&lt;/strong&gt;&amp;nbsp;: on ne peut pas coder un logiciel libre &quot;portable&quot; d'hebergeur à hébergeur pour la raison évoquer ci dessus ... on doit pouvoir toucher au include_path dans le php.ini. Même si certains directive apache le permette&amp;nbsp;; tous les hébergeurs ne l'autorisent pas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cible&lt;/strong&gt;&amp;nbsp;: les developpeurs en entreprise&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://framework.zend.com/&quot; hreflang=&quot;en&quot;&gt;Zend Framework&lt;/a&gt; écrit en PHP5 - la reference.&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Avantage&lt;/strong&gt;&amp;nbsp;: la référence&amp;nbsp;? :D&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Incovénient&lt;/strong&gt;&amp;nbsp;: je réitèrerai l'inconvénient pour Symfony. Si vous pouvez toucher au include_path de php.ini alors le coeur balance entre ZF ou Symfony.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cible&lt;/strong&gt;&amp;nbsp;: les developpeurs en entreprise&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;&lt;em&gt;&lt;strong&gt;Addendum &lt;/strong&gt;&lt;/em&gt;&amp;nbsp;:
après avoir approfondi l'histoire de licence pour CodeIgniter, il apparait &lt;a href=&quot;http://codeigniter.com/forums/viewthread/44788/P15/&quot; hreflang=&quot;en&quot;&gt;que CI permette de releaser son soft sous GPL&lt;/a&gt; tant qu'on ne touche pas au core ou bien qu'on en averti son auteur.&lt;/p&gt;



&lt;p&gt;Conclusion&amp;nbsp;:&lt;/p&gt;


&lt;p&gt;mon choix se porterait sur&amp;nbsp;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;CakePHP pour les avantages évoqués &lt;img src=&quot;/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;/li&gt;
&lt;li&gt;CodeIgniter (puisque utilisable à souhait !)&lt;/li&gt;
&lt;/ol&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Lugo Live @ La Java</title>
    <link>http://www.foxmask.info/post/2007/10/10/Lugo-Live-La-Java</link>
    <guid isPermaLink="false">urn:md5:82e48c86122bb0bbdc00b167ee61cdad</guid>
    <pubDate>Wed, 10 Oct 2007 19:00:00 +0200</pubDate>
    <dc:creator>foxmask</dc:creator>
        <category>lugo</category>    
    <description>    &lt;p&gt;Ce concert s'est déroulé en même temps que le match d'ouverture de la coupe du monde de Rugby et on était mieux à la Java qu'à voir la France se faire étriper. :P&lt;/p&gt;


&lt;p&gt;D'autant que c'était comme à Quiberon&amp;nbsp;: GE-ANT&amp;nbsp;!
Ambiance super cool et musique rafraichissante&amp;nbsp;!&lt;/p&gt;


&lt;p&gt;vivement le nouvel album&amp;nbsp;!&lt;/p&gt;


&lt;p&gt;&lt;a href=&quot;http://www.foxmask.info/public/lugo/CIMG1410.JPG&quot;&gt;&lt;img src=&quot;http://www.foxmask.info/public/lugo/.CIMG1410_s.jpg&quot; alt=&quot;Lugo Live @ La Java&quot; style=&quot;float:left; margin: 0 1em 1em 0;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;&lt;a href=&quot;http://www.foxmask.info/public/lugo/CIMG1411.JPG&quot;&gt;&lt;img src=&quot;http://www.foxmask.info/public/lugo/.CIMG1411_s.jpg&quot; alt=&quot;Lugo Live @ La Java&quot; style=&quot;float:left; margin: 0 1em 1em 0;&quot; /&gt;&lt;/a&gt;
&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;&lt;a href=&quot;http://www.foxmask.info/public/lugo/CIMG1409.JPG&quot;&gt;&lt;img src=&quot;http://www.foxmask.info/public/lugo/.CIMG1409_s.jpg&quot; alt=&quot;Lugo Live @ La Java&quot; style=&quot;float:left; margin: 0 1em 1em 0;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;&lt;a href=&quot;http://www.foxmask.info/public/lugo/CIMG1408.JPG&quot;&gt;&lt;img src=&quot;http://www.foxmask.info/public/lugo/.CIMG1408_s.jpg&quot; alt=&quot;Lugo Live @ La Java&quot; style=&quot;float:left; margin: 0 1em 1em 0;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Lugo</title>
    <link>http://www.foxmask.info/post/2007/07/31/Lugo</link>
    <guid isPermaLink="false">urn:md5:767bf75685da4c15dfeac6487e27c6fd</guid>
    <pubDate>Tue, 31 Jul 2007 14:49:00 +0200</pubDate>
    <dc:creator>foxmask</dc:creator>
        <category>lugo</category>    
    <description>    De retour de vacances @ &lt;a href=&quot;http://www.quiberon.com/francais/index.php&quot; rel=&quot;nofollow&quot;&gt;Quiberon&lt;/a&gt;, j'ai eu la bonne surprise de découvrir un très bon groupe du cru nommé &lt;a href=&quot;http://www.lugo-musique.com/&quot; rel=&quot;nofollow&quot;&gt;LUGO&lt;/a&gt;.&lt;br /&gt;
c'etait un concert super jovial et une très bonne musique&lt;br /&gt;&lt;br /&gt;
voici le flyer de leur participation au &lt;a href=&quot;http://www.vieillescharrues.asso.fr/festival/artistes/detail.php?artisteid=715&quot; rel=&quot;nofollow&quot; hreflang=&quot;fr&quot;&gt;Festival des Vieilles Charues&lt;/a&gt;. &lt;img src=&quot;http://www.foxmask.info/public/lugo/.CIMG1342_m.jpg&quot; alt=&quot;CIMG1342.JPG&quot; style=&quot;margin: 0 auto; display: block;&quot; /&gt; si vous ne connaissez pas ; je vous invite à découvrir ce trio des plus marrant et rafraichissant qui soit. et si vous voulez les retrouver,
&lt;a href=&quot;http://www.info-groupe.com/lugo/info-concert-33392.htm&quot; hreflang=&quot;fr&quot; rel=&quot;nofollow&quot;&gt;ils passent à paris le 21/09 @ &quot;La Java&quot;&lt;/a&gt; :D</description>
    
    
    
      </item>
    
  <item>
    <title>n00b d'Or Juin 2007</title>
    <link>http://www.foxmask.info/post/2007/06/24/n00b-dOr-Juin-2007</link>
    <guid isPermaLink="false">urn:md5:1f7f30dcccea051e86551c369393c9b2</guid>
    <pubDate>Sun, 24 Jun 2007 15:09:00 +0200</pubDate>
    <dc:creator>foxmask</dc:creator>
        <category>n00bd0r</category>    
    <description>    &lt;p&gt;Cela faisait longtemps que je n'étais pas tombé sur une perle, mais cette fois ci même Coluche et son &quot;Clochard analphabète&quot; peuvent aller se rhabiller &lt;img src=&quot;/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;


&lt;blockquote&gt;&lt;p&gt;ton emoticone fait pas rire si tu crois qu'avec ce problème je doit rigoler j'ai quitté phpbb pour tester punbb donc voila une aide serait bien car la mon forum est en &lt;strong&gt;stand bike&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>PunBB : la simplicité même ?!</title>
    <link>http://www.foxmask.info/post/2007/06/10/PunBB-%3A-la-simplicite-meme</link>
    <guid isPermaLink="false">urn:md5:e39a20885842655c1b337fc0adf34ee6</guid>
    <pubDate>Sun, 10 Jun 2007 11:41:00 +0200</pubDate>
    <dc:creator>foxmask</dc:creator>
        <category>PunBB</category>    
    <description>    &lt;p&gt;L'équipe de &lt;a href=&quot;http://punbb.org&quot; hreflang=&quot;en&quot;&gt;PunBB&lt;/a&gt;, l'outil de forum, nous gratifie d'un &lt;a href=&quot;http://punbb.org/docs/video_tutorials/&quot; hreflang=&quot;en&quot;&gt;tuto en vidéo&lt;/a&gt; détaillant toutes les étapes possibles sur punBB, allant de l'installation à la gestion de son forum en passant par l'installation de nouveaux thèmes pour finir par l'ajout de liens supplémentaires dans le menu horizontal.&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Microcosme aux pays des Gamerz</title>
    <link>http://www.foxmask.info/post/2007/05/31/Microcosme-aux-pays-des-Gamerz</link>
    <guid isPermaLink="false">urn:md5:a0d5c61006279d9844546f65baa85ab8</guid>
    <pubDate>Thu, 31 May 2007 09:36:00 +0200</pubDate>
    <dc:creator>foxmask</dc:creator>
        <category>counter-strike</category>    
    <description>    &lt;p&gt;Ce weekend avait lieu l'ESWC 2007 &lt;strong&gt;France&lt;/strong&gt; à Chelles ( ou bien &lt;em&gt;coupe de france de jeux vidéo&lt;/em&gt;, en version longue &lt;img src=&quot;/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;br /&gt;
Comme je n'avais jamais assisté à ce genre d'évènement, c'est avec curiosité que je me suis rendu sur place voir la &lt;em&gt;crème&lt;/em&gt; des équipes françaises de Counter-Strike.&lt;br /&gt;
Au premier abord je me disais &lt;q&gt;à quoi ca ressemble un &lt;strong&gt;&lt;em&gt;pgm&lt;/em&gt;&lt;/strong&gt;&amp;nbsp;? (comme disent les djeunz)&lt;/q&gt;&lt;br /&gt;
Hé bien j'ai vu, et comme partout il y a du bon et du moins bon &lt;img src=&quot;/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Jeu essentiellement masculin, à CS, ca chambre pas mal l'adversaire :P manque de peau à ce jeu là ce ne sont pas les plus intimidant qui gagnent :D&lt;br /&gt;
Heureusement pour CS il y a une version CS Féminine qui relève le niveau &lt;img src=&quot;/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt; d'autant que l'équipe championne du monde de CS est française&amp;nbsp;: les BtB ce qui ne gâte rien &lt;img src=&quot;/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;A part tout cela, pour en revenir au sujet du billet, là où on sent un microcosme, c'est une fois les équipes éliminées, n'ayant plus rien à faire, les joueurs  (se) retrouvent (les joueuses :D ) hors de l'arène et c'est bien là qu'on sent que le &lt;em&gt;monde&lt;/em&gt; des LAN CS est un monde (pas si) à part, où les habitués (les joueurs de ces équipes) s'y retrouvent comme un banc de poissons dans l'eau et où le spectateur que j'étais souriait  à tout cela en se disant &lt;q&gt;elle est marrante cette petite société&lt;/q&gt; &lt;img src=&quot;/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;br /&gt;&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Wanted : Echo2 pour PHP</title>
    <link>http://www.foxmask.info/post/2007/05/25/Wanted-%3A-Echo2-pour-PHP</link>
    <guid isPermaLink="false">urn:md5:42d18486a9cd773603fab37e95ae6be0</guid>
    <pubDate>Fri, 25 May 2007 10:39:00 +0200</pubDate>
    <dc:creator>foxmask</dc:creator>
        <category>General</category>
        <category>ajax</category><category>java</category><category>PHP</category>    
    <description>    &lt;p&gt;Je suis à la recherche d'un &lt;a href=&quot;http://fr.wikipedia.org/wiki/Framework&quot; hreflang=&quot;fr&quot;&gt;framework&lt;/a&gt; &lt;a href=&quot;http://fr.wikipedia.org/wiki/Asynchronous_JavaScript_And_XML&quot; hreflang=&quot;fr&quot;&gt;AJAX&lt;/a&gt; en &lt;a href=&quot;http://fr.php.net&quot; hreflang=&quot;fr&quot;&gt;PHP&lt;/a&gt; capable des prouesses de &lt;a href=&quot;http://www.nextapp.com/platform/echo2/echo/demo/&quot; hreflang=&quot;en&quot;&gt;Echo2&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;En effet &lt;a href=&quot;http://www.nextapp.com/platform/echo2/echo/demo/&quot; hreflang=&quot;en&quot;&gt;Echo2&lt;/a&gt; est un &lt;a href=&quot;http://fr.wikipedia.org/wiki/Framework&quot; hreflang=&quot;fr&quot;&gt;framework&lt;/a&gt; &lt;a href=&quot;http://fr.wikipedia.org/wiki/Asynchronous_JavaScript_And_XML&quot; hreflang=&quot;fr&quot;&gt;AJAX&lt;/a&gt; mais ecrit en &lt;a href=&quot;http://java.sun.com&quot; hreflang=&quot;en&quot;&gt;JAVA&lt;/a&gt;. et vu comment ca &quot;déchire&quot; je me demandais bien s'il n'existerait pas un alter-ego meme eloigné&amp;nbsp;; en &lt;a href=&quot;http://fr.php.net&quot; hreflang=&quot;fr&quot;&gt;PHP&lt;/a&gt; &lt;img src=&quot;/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;


&lt;p&gt;Laissez moi donc un petit mot si vous en connaissez &lt;img src=&quot;/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;


&lt;p&gt;Merci&amp;nbsp;!&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>GPS sur Nokia 6280</title>
    <link>http://www.foxmask.info/post/2007/04/24/GPS-sur-Nokia-6280</link>
    <guid isPermaLink="false">urn:md5:4e9b89d501766eb389605f570ea8055b</guid>
    <pubDate>Tue, 24 Apr 2007 20:45:00 +0200</pubDate>
    <dc:creator>foxmask</dc:creator>
        <category>GPS</category>    
    <description>    un petit GPS pas à piquer des hannetons que le couple &lt;a href=&quot;http://echonumerique.canalblog.com/archives/2006/12/20/3401835.html&quot; rel=&quot;nofollow&quot;&gt;Holux GPS Slim et le logiciel Wayfinder&lt;/a&gt;</description>
    
    
    
      </item>
    
</channel>
</rss>