<?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 - PHP</title>
  <link>http://www.foxmask.info/</link>
  <description>La passion du développement web et des jeux en ligne</description>
  <language>fr</language>
  <pubDate>Sun, 13 Jul 2008 15:55:43 +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>
    
    
    
      </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>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>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>
    
</channel>
</rss>