<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Miximum &#187; eZ Publish</title>
	<atom:link href="http://www.miximum.fr/tag/ez-publish/feed" rel="self" type="application/rss+xml" />
	<link>http://www.miximum.fr</link>
	<description>Le blog d&#039;un ingénieur web freelance</description>
	<lastBuildDate>Wed, 16 Nov 2011 16:25:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
		<item>
		<title>La dure vie des développeurs web</title>
		<link>http://www.miximum.fr/humour/409-la-dure-vie-des-developpeurs-web</link>
		<comments>http://www.miximum.fr/humour/409-la-dure-vie-des-developpeurs-web#comments</comments>
		<pubDate>Wed, 09 Dec 2009 12:51:34 +0000</pubDate>
		<dc:creator>thibault</dc:creator>
				<category><![CDATA[Humour]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[eZ Publish]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[symfony]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.miximum.fr/?p=409</guid>
		<description><![CDATA[Travailler dans le web est parfois ingrat. Ingrat parce que c&#8217;est un m&#233;tier peu connu, et par cons&#233;quent rarement appr&#233;ci&#233; &#224; sa juste valeur. Quel d&#233;veloppeur web n&#8217;a jamais entendu des phrases comme &#171;&#160;Tu fais des sites&#160;? Alors tu peux venir me r&#233;parer mon ordi&#160;?&#160;&#187; ou encore &#171;&#160;Vous pouvez me faire un youtube pour 400&#8364;&#160;?&#160;&#187; [...]]]></description>
			<content:encoded><![CDATA[<p>Travailler dans le web est parfois ingrat. Ingrat parce que c&#8217;est un m&eacute;tier peu connu, et par cons&eacute;quent rarement appr&eacute;ci&eacute; &agrave; sa juste valeur.</p>
<p>Quel d&eacute;veloppeur web n&#8217;a jamais entendu des phrases comme &laquo;&nbsp;Tu fais des sites<span class="fine">&nbsp;</span>? Alors tu peux venir me r&eacute;parer mon ordi<span class="fine">&nbsp;</span>?&nbsp;&raquo; ou encore &laquo;&nbsp;Vous pouvez me faire un youtube pour 400&euro;<span class="fine">&nbsp;</span>?&nbsp;&raquo;</p>
<p>Pourquoi je vous raconte tout &ccedil;a<span class="fine">&nbsp;</span>? Juste pour servir d&#8217;intro &agrave; ce truc que j&#8217;ai bricol&eacute; aujourd&#8217;hui, et qui, je le confesse, m&#8217;a bien fait marrer (oui, je suis bon public et je rigole de mes propres conneries).</p>
<p><object width="480" height="275"><param name="movie" value="http://www.dailymotion.com/swf/xbfjlq&#038;related=0"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param><embed src="http://www.dailymotion.com/swf/xbfjlq&#038;related=0" type="application/x-shockwave-flash" width="480" height="275" allowfullscreen="true" allowscriptaccess="always"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.miximum.fr/humour/409-la-dure-vie-des-developpeurs-web/feed</wfw:commentRss>
		<slash:comments>30</slash:comments>
		</item>
		<item>
		<title>Besoin d&#8217;un freelance ?</title>
		<link>http://www.miximum.fr/inclassable/378-besoin-dun-freelance</link>
		<comments>http://www.miximum.fr/inclassable/378-besoin-dun-freelance#comments</comments>
		<pubDate>Wed, 18 Nov 2009 12:03:04 +0000</pubDate>
		<dc:creator>thibault</dc:creator>
				<category><![CDATA[Inclassable]]></category>
		<category><![CDATA[eZ Publish]]></category>
		<category><![CDATA[freelance]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[solr]]></category>
		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://www.miximum.fr/?p=378</guid>
		<description><![CDATA[photo credit&#160;: h.koppdelaney C&#8217;est un petit pas pour l&#8217;humanit&#233;, mais un grand saut pour moi. &#192; partir de d&#233;cembre, je serai in&#233;luctablement freelance &#224; plein temps. Fini les embouteillages tous les matins (m&#234;me si je prends le v&#233;lo, &#231;a n&#8217;emp&#234;che pas l&#8217;air de puer le gaz). Envol&#233;s, les 2.5 jours de cong&#233;s par mois. Me [...]]]></description>
			<content:encoded><![CDATA[<div class="postimg alignright"><a href="http://www.flickr.com/photos/16230215@N08/3066799064/" title="Knight Horse and Sword" target="_blank"><img src="http://farm4.static.flickr.com/3171/3066799064_ed792a1b3f_m.jpg" alt="Knight Horse and Sword" border="0" /></a><br /><small><a href="http://creativecommons.org/licenses/by-nd/2.0/" title="Attribution-NoDerivs License" target="_blank"><img src="http://www.miximum.fr/wp-content/plugins/photo-dropper/images/cc.png" alt="Creative Commons License" border="0" width="16" height="16" align="absmiddle" /></a> <a href="http://www.photodropper.com/photos/" target="_blank">photo</a> credit&nbsp;: <a href="http://www.flickr.com/photos/16230215@N08/3066799064/" title="h.koppdelaney" target="_blank">h.koppdelaney</a></small></div>
<p>C&#8217;est un petit pas pour l&#8217;humanit&eacute;, mais un grand saut pour moi. &Agrave; partir de d&eacute;cembre, je serai in&eacute;luctablement <strong>freelance &agrave; plein temps</strong>.</p>
<p>Fini les embouteillages tous les matins (m&ecirc;me si je prends le v&eacute;lo, &ccedil;a n&#8217;emp&ecirc;che pas l&#8217;air de puer le gaz). Envol&eacute;s, les 2.5 jours de cong&eacute;s par mois. Me voil&agrave; pleinement ma&icirc;tre de mon destin, et &ccedil;a fait du bien (Ah<span class="fine">&nbsp;</span>?! On me signale que les freelances n&#8217;ont pas la vie rose tous les jours<span class="fine">&nbsp;</span>? Bon, tant pis&hellip;)</p>
<p>J&#8217;aurais pu me qualifier d&#8217;&laquo;&nbsp;entrepreneur&nbsp;&raquo;, de &laquo;&nbsp;chef d&#8217;entreprise&nbsp;&raquo;, d&#8217;&laquo;&nbsp;ind&eacute;pendant&nbsp;&raquo;, voire d&#8217;&laquo;&nbsp;indep&#8217;&nbsp;&raquo;, mais j&#8217;aime cette image du chevalier, libre comme l&#8217;air et cheveux au vent, n&#8217;ayant pour biens que sa monture et son &eacute;p&eacute;e (une lance, en l&#8217;occurence), chevauchant par monts et par vaux en combattant pour ses id&eacute;aux, et aussi un peu pour remplir sa gamelle.</p>
<p>Alors voil&agrave;, puisque vous me le demandez (sisi, vous me le demandez), j&#8217;ai choisi, dans un premier temps, de focaliser mon activit&eacute; sur les d&eacute;veloppements web sp&eacute;cifiques, bas&eacute;s sur l&#8217;int&eacute;gration des technologies libres suivantes&nbsp;:</p>
<ul>
<li><strong>Symfony</strong>&nbsp;: Le top des frameworks PHP, pour des d&eacute;veloppements sp&eacute;cifiques&nbsp;fonctionnels et standardis&eacute;s&nbsp;<span class="fine">&nbsp;</span>;</li>
<li><strong>eZ&nbsp;Publish</strong>&nbsp;: La Rolls Royce des CMS, pour des sites &eacute;ditoriaux&nbsp;haut de gamme&nbsp;<span class="fine">&nbsp;</span>;</li>
<li><strong>Solr</strong>&nbsp;: Le meilleur moteur de recherche libre au monde, pour fournir &agrave; vos utilisateurs une exp&eacute;rience de recherche incomparable&nbsp;<span class="fine">&nbsp;</span>;</li>
</ul>
<p>Et puis, tant qu&#8217;&agrave; faire, j&#8217;entends bien batir des prestations de qualit&eacute;, en industrialisant mes d&eacute;veloppements au maximum (TDD, int&eacute;gration continue, m&eacute;thodo agile, etc.).</p>
<p>Je serai bien entendu enchant&eacute; de r&eacute;pondre &agrave; votre coup de fil si vous souhaitez discuter de votre projet. Si vous voulez en savoir plus, vous pouvez <a href="http://thibault.jouannic.fr" title="ingenieur web freelance">consulter ma page professionnelle</a>. Vous y trouverez les informations n&eacute;cessaires pour me contacter.</p>
<p>Comme je suis d&#8217;un naturel optimiste, je suis intimement convaincu que tout ce passera bien et que j&#8217;adorerai ma nouvelle vie. Cela dit, un petit commentaire d&#8217;encouragement est toujours bon &agrave; prendre <img src='http://www.miximum.fr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.miximum.fr/inclassable/378-besoin-dun-freelance/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>eZ Publish, fetch, recherche et limitation</title>
		<link>http://www.miximum.fr/methodes-et-outils/97-ez-publish-fetch-recherche-et-limitation</link>
		<comments>http://www.miximum.fr/methodes-et-outils/97-ez-publish-fetch-recherche-et-limitation#comments</comments>
		<pubDate>Thu, 04 Sep 2008 15:51:29 +0000</pubDate>
		<dc:creator>thibault</dc:creator>
				<category><![CDATA[Méthodes et outils]]></category>
		<category><![CDATA[eZ Publish]]></category>

		<guid isPermaLink="false">http://www.miximum.fr/?p=97</guid>
		<description><![CDATA[Ce que j&#8217;aime bien, avec le CMS eZ Publish, c&#8217;est son abondante documentation. Quoique parfois, je la trouve un peu lacunaire sur les bords. Quand par exemple, j&#8217;utilise la commande fetch content search, j&#8217;aimerais bien avoir un indice sur la signification du param&#232;tre &#171;&#160;&#160;limitation&#160;&#160;&#187;. La documentation ne m&#8217;est pas d&#8217;une grande aide dans ce cas&#160;: [...]]]></description>
			<content:encoded><![CDATA[<p>Ce que j&#8217;aime bien, avec <a href="http://ez.no">le CMS eZ Publish</a>, c&#8217;est son abondante documentation. Quoique parfois, je la trouve un peu lacunaire sur les bords.</p>
<p>Quand par exemple, j&#8217;utilise la commande <a href="http://ez.no/doc/ez_publish/technical_manual/3_10/reference/modules/content/fetch_functions/search">fetch content search</a>, j&#8217;aimerais bien avoir un indice sur la signification du param&egrave;tre &laquo;&nbsp;&nbsp;limitation&nbsp;&nbsp;&raquo;. La documentation ne m&#8217;est pas d&#8217;une grande aide dans ce cas&nbsp;:</p>
<blockquote><p>You&#8217;ll have to look in the source code of the kernel for details related to the format of this array</p></blockquote>
<p>Ok, la doc me dit ce que fait le param&egrave;tre. Pas comment l&#8217;utiliser. Sympa. &Eacute;tant donn&eacute; que j&#8217;ai pass&eacute; une demi-journ&eacute;e sur la question, je vais quand m&ecirc;me vous en faire profiter.</p>
<p>Le param&egrave;tre &laquo;&nbsp;&nbsp;limitation&nbsp;&nbsp;&raquo; sert donc &agrave; d&eacute;finir &agrave; la main des limites d&#8217;acc&egrave;s, alternativement &agrave; celles pr&eacute;-existantes pour l&#8217;utilisateur enregistr&eacute;. C&#8217;est &agrave; dire que&nbsp;:</p>

<div class="wp_syntax"><div class="code"><pre class="smarty" style="font-family:monospace;color: #ccc; font: 12px Consolas, Lucida Console, Monaco, monospace;"><span class="br0">&#123;</span>set search<span class="sy0">=</span><a href="http://smarty.php.net/fetch"><span class="kw5">fetch</span></a><span class="br0">&#40;</span> content,search
                  hash<span class="br0">&#40;</span>text,<span class="re0">$search_text</span>,
                      subtree_array,<span class="re0">$search_sub_tree</span>,
                      sort_by,array<span class="br0">&#40;</span> <span class="st0">'modified'</span>,false<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#41;</span>,
                      offset,<span class="re0">$offset</span>,
                      limitation, array<span class="br0">&#40;</span><span class="br0">&#41;</span>,
                      limit,<span class="re0">$limit</span> <span class="br0">&#41;</span> <span class="br0">&#41;</span> <span class="br0">&#125;</span></pre></div></div>

<p>(notez le &laquo;&nbsp;&nbsp;array&nbsp;&nbsp;&raquo; vide en face de &laquo;&nbsp;&nbsp;limitation&nbsp;&nbsp;&raquo;), permet d&#8217;effectuer une recherche sur l&#8217;ensemble du site, ind&eacute;pendamment des droits de l&#8217;utilisateur.</p>
<p>Le param&egrave;tre &laquo;&nbsp;&nbsp;limitation&nbsp;&nbsp;&raquo;, si j&#8217;ai bien compris, sert donc &agrave; ajouter des &eacute;l&eacute;ments qui sont autoris&eacute;s pour la recherche. Exemple&nbsp;:</p>

<div class="wp_syntax"><div class="code"><pre class="smarty" style="font-family:monospace;color: #ccc; font: 12px Consolas, Lucida Console, Monaco, monospace;"><span class="br0">&#123;</span>set search<span class="sy0">=</span><a href="http://smarty.php.net/fetch"><span class="kw5">fetch</span></a><span class="br0">&#40;</span> content,search
                  hash<span class="br0">&#40;</span>text,<span class="re0">$search_text</span>,
                      subtree_array,<span class="re0">$search_sub_tree</span>,
                      sort_by,array<span class="br0">&#40;</span> <span class="st0">'modified'</span>,false<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#41;</span>,
                      offset,<span class="re0">$offset</span>,
                      limitation, array<span class="br0">&#40;</span> hash<span class="br0">&#40;</span> 
                          Class, array<span class="br0">&#40;</span> <span class="nu0">65</span>, <span class="nu0">66</span>, <span class="nu0">67</span><span class="br0">&#41;</span>,
                          <a href="http://smarty.php.net/section"><span class="kw1">Section</span></a>, array<span class="br0">&#40;</span> <span class="nu0">1</span>, <span class="nu0">2</span>, <span class="nu0">3</span> <span class="br0">&#41;</span>,
                          Node, array<span class="br0">&#40;</span> <span class="nu0">25789</span>, <span class="nu0">25790</span>, <span class="nu0">25791</span>, ... <span class="br0">&#41;</span>,
                          Subtree,array<span class="br0">&#40;</span> <span class="st0">'/1/2/125'</span>, <span class="st0">'/1/2/151/'</span><span class="br0">&#41;</span>,
                          Owner,,
                      <span class="br0">&#41;</span> <span class="br0">&#41;</span>,
                      limit,<span class="re0">$limit</span> <span class="br0">&#41;</span> <span class="br0">&#41;</span> <span class="br0">&#125;</span></pre></div></div>

<p>Il est possible de cr&eacute;er toutes les combinaisons possibles de param&egrave;tres. Le param&egrave;tre &laquo;&nbsp;&nbsp;Owner&nbsp;&nbsp;&raquo; limite les recherches aux objets poss&eacute;d&eacute;s par les utilisateurs. Il existe quelques autres param&egrave;tres, dont je ne parle pas pour ne pas bien en saisir la port&eacute;e.</p>
<p>J&#8217;esp&egrave;re que &ccedil;a pourra d&eacute;panner. Sur ce, si quelqu&#8217;un dispose d&#8217;une documentation plus compl&egrave;te et plus officielle, je suis preneur.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.miximum.fr/methodes-et-outils/97-ez-publish-fetch-recherche-et-limitation/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>eZ Publish et les caches, une grande histoire d&#8217;amour ?</title>
		<link>http://www.miximum.fr/inclassable/52-ez-publish-et-les-caches-une-grande-histoire-damour</link>
		<comments>http://www.miximum.fr/inclassable/52-ez-publish-et-les-caches-une-grande-histoire-damour#comments</comments>
		<pubDate>Wed, 28 May 2008 13:02:19 +0000</pubDate>
		<dc:creator>thibault</dc:creator>
				<category><![CDATA[Inclassable]]></category>
		<category><![CDATA[eZ Publish]]></category>
		<category><![CDATA[snippet]]></category>

		<guid isPermaLink="false">http://www.miximum.fr/?p=52</guid>
		<description><![CDATA[&#171;&#160;&#160;Vide les caches&#160;!&#160;&#160;&#187;, c&#8217;est le premier truc qu&#8217;on entends ici quand quelque chose ne va pas. L&#8217;usage intensif des caches par eZ Publish est bien connu. Mais je viens seulement de r&#233;aliser &#224; quel point les caches et le CMS entretiennent une relation fusionnelle. Je savais qu&#8217;eZ Publish utilisait des caches de contenu, de templates [...]]]></description>
			<content:encoded><![CDATA[<p>&laquo;&nbsp;&nbsp;Vide les caches<span class="fine">&nbsp;</span>!&nbsp;&nbsp;&raquo;, c&#8217;est le premier truc qu&#8217;on entends ici quand quelque chose ne va pas. <a href="http://pwet.fr/blog/ez_publish_et_son_cache">L&#8217;usage intensif des caches par eZ Publish</a> est bien connu. Mais je viens seulement de r&eacute;aliser &agrave; quel point les caches et le CMS entretiennent une relation fusionnelle.</p>
<p>Je savais qu&#8217;eZ Publish utilisait des caches de contenu, de templates et de configuration. Normal. J&#8217;ai d&eacute;couvert lundi qu&#8217;il (ou elle, d&#8217;ailleurs ?) <a href="http://www.miximum.fr/musee-des-horreurs/48-mon-attributefilter-deconne-pourquoi">utilisait aussi des caches internes</a> qui n&#8217;&eacute;taient pas effac&eacute;s par le processus habituel.</p>
<p>Aujourd&#8217;hui, je viens de d&eacute;couvrir qu&#8217;eZ Publish utilisait des caches en m&eacute;moire vive durant l&#8217;ex&eacute;cution d&#8217;extensions PHP. Note&nbsp;: pour les gros scripts, penser &agrave; r&eacute;guli&egrave;rement vider les caches en appelant la fonction eZContentObject::clearCache(), sinon, &ccedil;a sera un beau heap overflow.</p>
<p>En bonus, une petite fonction que vous pouvez appeler dans une grosse boucle, pour vider les caches &agrave; intervalles r&eacute;guliers&nbsp;:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;color: #ccc; font: 12px Consolas, Lucida Console, Monaco, monospace;"><span class="kw2">function</span> clearCache<span class="br0">&#40;</span><span class="re0">$maxIterations</span><span class="br0">&#41;</span>
<span class="br0">&#123;</span>
    static <span class="re0">$iteration</span> <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span>
&nbsp;
    <span class="re0">$iteration</span><span class="sy0">++;</span>
&nbsp;
    <span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$iteration</span> <span class="sy0">&gt;=</span> <span class="re0">$maxIterations</span><span class="br0">&#41;</span>
    <span class="br0">&#123;</span>
        <a href="http://www.php.net/printf"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&quot;nettoyage du cache<span class="es1">\n</span>&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        eZContentObject<span class="sy0">::</span><span class="me2">clearCache</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="re0">$iteration</span> <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
<span class="br0">&#125;</span></pre></div></div>

<p>Combien d&#8217;autres caches que je n&#8217;ai pas encore d&eacute;couvert<span class="fine">&nbsp;</span>?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.miximum.fr/inclassable/52-ez-publish-et-les-caches-une-grande-histoire-damour/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Mon AttributeFilter déconne&#160;! Pourquoi&#160;?!</title>
		<link>http://www.miximum.fr/musee-des-horreurs/48-mon-attributefilter-deconne-pourquoi</link>
		<comments>http://www.miximum.fr/musee-des-horreurs/48-mon-attributefilter-deconne-pourquoi#comments</comments>
		<pubDate>Mon, 26 May 2008 15:55:58 +0000</pubDate>
		<dc:creator>thibault</dc:creator>
				<category><![CDATA[Musée des horreurs]]></category>
		<category><![CDATA[eZ Publish]]></category>
		<category><![CDATA[wtf]]></category>

		<guid isPermaLink="false">http://www.miximum.fr/musee-des-horreurs/48-mon-attributefilter-deconne-pourquoi</guid>
		<description><![CDATA[Dans mon snippet pr&#233;c&#233;dent sur la r&#233;cup&#233;ration d&#8217;objets de contenu, j&#8217;utilise la fonction subTree avec une option AttributeFilter. Savez vous combien de temps j&#8217;ai pass&#233; &#224; &#233;crire ces 5 lignes&#160;? 4h&#160;! Tout &#231;a &#224; cause d&#8217;une stupide erreur de cache. Pendant 4h, j&#8217;ai tout essay&#233; pour faire fonctionner ce code&#160;: rien &#224; faire&#160;! Il ne [...]]]></description>
			<content:encoded><![CDATA[<p>Dans mon <a href="http://www.miximum.fr/methodes-et-outils/47-recuperer-des-objets-de-contenu-en-filtrant-par-attribut-avec-lapi-ez-publish">snippet pr&eacute;c&eacute;dent sur la r&eacute;cup&eacute;ration d&#8217;objets de contenu</a>, j&#8217;utilise la fonction subTree avec une option AttributeFilter. Savez vous combien de temps j&#8217;ai pass&eacute; &agrave; &eacute;crire ces 5 lignes<span class="fine">&nbsp;</span>? 4h<span class="fine">&nbsp;</span>! Tout &ccedil;a &agrave; cause d&#8217;une stupide erreur de cache.</p>
<p>Pendant 4h, j&#8217;ai tout essay&eacute; pour faire fonctionner ce code&nbsp;: rien &agrave; faire<span class="fine">&nbsp;</span>! Il ne me retournait aucun r&eacute;sultat. J&#8217;ai essay&eacute; toutes les combinaisons d&#8217;attributs possibles et imaginables, rien &agrave; faire. Le pire, c&#8217;est qu&#8217;en utilisant un autre attribut pour le test, tout se passait nickel. Rageant.</p>
<p>En d&eacute;sespoir de cause, j&#8217;ai fini par me plonger dans le code source d&#8217;eZ Publish, voici ce que j&#8217;ai d&eacute;couvert.</p>
<p>La fonction <a href="http://pubsvn.ez.no/doxygen/3.9/html/ezcontentobjecttreenode_8php-source.html#l01774">subTree</a> d&#8217;eZ Publish fait appel &agrave; <a href="http://pubsvn.ez.no/doxygen/3.9/html/ezcontentobjecttreenode_8php-source.html#l00955">createAttributeFilterSQLStrings</a>, qui elle m&ecirc;me appelle <a href="http://pubsvn.ez.no/doxygen/3.9/html/ezcontentobjecttreenode_8php-source.html#l00268">classAttributeIDByIdentifier</a>.</p>
<p>Cette derni&egrave;re fonction permet de r&eacute;cup&eacute;rer l&#8217;id d&#8217;un l&#8217;attribut en fonction de son identifiant de la forme &#8216;classe/attribut&#8217;, notation fort pratique qui &eacute;vite d&#8217;avoir &agrave; utiliser directement l&#8217;id.</p>
<p>Pour retourner rapidement un r&eacute;sultat, classAttributeIDByIdentifier r&eacute;cup&egrave;re la liste de tous les attributs existants dans la base de donn&eacute;es, et construit un tableau d&#8217;index&nbsp;:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;color: #ccc; font: 12px Consolas, Lucida Console, Monaco, monospace;">    <span class="sy0">...</span>
    <span class="kw1">foreach</span> <span class="br0">&#40;</span> <span class="re0">$identifierArray</span> <span class="kw1">as</span> <span class="re0">$identifierRow</span> <span class="br0">&#41;</span>
    <span class="br0">&#123;</span>
        <span class="sy0">...</span>
        <span class="re0">$combinedIdentifier</span> <span class="sy0">=</span> <span class="re0">$classIdentifier</span> <span class="sy0">.</span> <span class="st_h">'/'</span> <span class="sy0">.</span> <span class="re0">$attributeIdentifier</span><span class="sy0">;</span>
        <span class="re0">$identifierHash</span><span class="br0">&#91;</span><span class="re0">$combinedIdentifier</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="br0">&#40;</span>int<span class="br0">&#41;</span><span class="re0">$attributeID</span><span class="sy0">;</span>
    <span class="br0">&#125;</span></pre></div></div>

<p>On a donc un tableau de la forme</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;color: #ccc; font: 12px Consolas, Lucida Console, Monaco, monospace;"><span class="re0">$identifier_hash</span> <span class="sy0">=</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span> <span class="st0">&quot;folder/name&quot;</span> <span class="sy0">=&gt;</span> <span class="nu0">4</span><span class="sy0">,</span>
                          <span class="st0">&quot;folder/short_description&quot;</span> <span class="sy0">=&gt;</span> <span class="nu0">119</span><span class="sy0">,</span>
                          <span class="st0">&quot;folder/short_name&quot;</span> <span class="sy0">=&gt;</span> <span class="nu0">155</span><span class="sy0">,</span>
                          <span class="st0">&quot;folder/description&quot;</span> <span class="sy0">=&gt;</span> <span class="nu0">156</span><span class="sy0">,</span>
                          <span class="st0">&quot;folder/show_children&quot;</span> <span class="sy0">=&gt;</span> <span class="nu0">158</span><span class="sy0">,</span>
                          <span class="st0">&quot;user_group/name&quot;</span> <span class="sy0">=&gt;</span> <span class="nu0">6</span><span class="sy0">,</span>
                          <span class="sy0">...</span></pre></div></div>

<p>Pour renvoyer l&#8217;id, le reste est tr&eacute;s simple&nbsp;:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;color: #ccc; font: 12px Consolas, Lucida Console, Monaco, monospace;">    <span class="re0">$return</span> <span class="sy0">=</span> <span class="re0">$identifierHash</span><span class="br0">&#91;</span><span class="re0">$identifier</span><span class="br0">&#93;</span><span class="sy0">;</span></pre></div></div>

<p>Rien de bien sorcier, non<span class="fine">&nbsp;</span>? Sauf que<span class="fine">&nbsp;</span>! Le probl&egrave;me, c&#8217;est que le tableau d&#8217;index est mis en cache, dans le fichier var/plain/cache/classattributeidentifiers_nom_de_la_base.php</p>
<p>Mon probl&egrave;me, c&#8217;&eacute;tait que l&#8217;attribut que je voulais filtrer n&#8217;&eacute;tait pas dans le cache. Apr&egrave;s quelques recherches, j&#8217;ai compris pourquoi&nbsp;:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;color: #ccc; font: 12px Consolas, Lucida Console, Monaco, monospace;"><span class="kw2">ls</span> <span class="re5">-l</span> var<span class="sy0">/</span>plain<span class="sy0">/</span>cache<span class="sy0">/</span>classattributeidentifiers_nom_de_la_base.php  
<span class="re5">-rw-rw-rw-</span>  <span class="nu0">1</span> root root <span class="nu0">25750</span> <span class="nu0">2008</span>-05-<span class="nu0">26</span> <span class="nu0">16</span>:<span class="nu0">46</span> var<span class="sy0">/</span>plain<span class="sy0">/</span>cache<span class="sy0">/</span>classattributeidentifiers_nom_de_la_classe.php</pre></div></div>

<p>Le propri&eacute;taire du fichier est root<span class="fine">&nbsp;</span>! Du coup, lorsque j&#8217;ai modifi&eacute; mes classes de contenu dans la backoffice ez Publish, ce cache n&#8217;a pas &eacute;t&eacute; mis &agrave; jour. Comme il s&#8217;agit d&#8217;un cache interne, il n&#8217;a pas non plus &eacute;t&eacute; supprim&eacute; par la commande</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;color: #ccc; font: 12px Consolas, Lucida Console, Monaco, monospace;">php bin<span class="sy0">/</span>cache<span class="sy0">/</span>ezcache.php <span class="re5">--clear-all</span></pre></div></div>

<p>R&eacute;sultat&nbsp;: un cache obsol&egrave;te, une apr&egrave;s-midi perdue. Moralit&eacute;&nbsp;: m&ecirc;me quand on supprime les caches, il reste encore des probl&egrave;mes de cache.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.miximum.fr/musee-des-horreurs/48-mon-attributefilter-deconne-pourquoi/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Récupérer des objets de contenu en filtrant par attribut avec l&#8217;API eZ Publish</title>
		<link>http://www.miximum.fr/methodes-et-outils/47-recuperer-des-objets-de-contenu-en-filtrant-par-attribut-avec-lapi-ez-publish</link>
		<comments>http://www.miximum.fr/methodes-et-outils/47-recuperer-des-objets-de-contenu-en-filtrant-par-attribut-avec-lapi-ez-publish#comments</comments>
		<pubDate>Mon, 26 May 2008 15:11:02 +0000</pubDate>
		<dc:creator>thibault</dc:creator>
				<category><![CDATA[Méthodes et outils]]></category>
		<category><![CDATA[eZ Publish]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[snippet]]></category>

		<guid isPermaLink="false">http://www.miximum.fr/methodes-et-outils/47-recuperer-des-objets-de-contenu-en-filtrant-par-attribut-avec-lapi-ez-publish</guid>
		<description><![CDATA[Mon besoin est simple&#160;: je veux r&#233;cup&#233;rer en PHP, avec l&#8217;API eZ Publish, toutes les instances d&#8217;une certaine classe, en effectuant un filtre sur la valeur d&#8217;un attribut (dans mon cas bien pr&#233;cis&#160;: c&#8217;est une checkbox qui doit &#234;tre coch&#233;e). Voici le snippet qui permet de faire &#231;a&#160;: $nodes = array&#40;&#41;; $nodes =&#38; eZContentObjectTreeNode::subTree&#40; array&#40; [...]]]></description>
			<content:encoded><![CDATA[<p>Mon besoin est simple&nbsp;: je veux r&eacute;cup&eacute;rer en PHP, avec l&#8217;<a href="http://pubsvn.ez.no/">API eZ Publish</a>, toutes les instances d&#8217;une certaine classe, en effectuant un filtre sur la valeur d&#8217;un attribut (dans mon cas bien pr&eacute;cis&nbsp;: c&#8217;est une checkbox qui doit &ecirc;tre coch&eacute;e).</p>
<p>Voici le snippet qui permet de faire &ccedil;a&nbsp;:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;color: #ccc; font: 12px Consolas, Lucida Console, Monaco, monospace;"><span class="re0">$nodes</span> <span class="sy0">=</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="re0">$nodes</span> <span class="sy0">=&amp;</span> eZContentObjectTreeNode<span class="sy0">::</span><span class="me2">subTree</span><span class="br0">&#40;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span>
                <span class="st_h">'IgnoreVisibility'</span> <span class="sy0">=&gt;</span> <span class="kw4">false</span><span class="sy0">,</span>
                <span class="co1">// 'Limit' =&gt; 10, // Je peux rajouter une limite max</span>
                <span class="st_h">'ClassFilterType'</span> <span class="sy0">=&gt;</span> <span class="st_h">'include'</span><span class="sy0">,</span>  <span class="co1">// Je ne veux que les objets de type classe</span>
                <span class="st_h">'ClassFilterArray'</span> <span class="sy0">=&gt;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span> <span class="st_h">'classe'</span> <span class="br0">&#41;</span><span class="sy0">,</span>
                <span class="st_h">'AttributeFilter'</span> <span class="sy0">=&gt;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span> <span class="st_h">'classe/attribut'</span><span class="sy0">,</span> <span class="st_h">'='</span><span class="sy0">,</span> <span class="st_h">'1'</span> <span class="br0">&#41;</span> <span class="br0">&#41;</span> <span class="co1">// Mon attribut est à 1, ma case est cochée</span>
                <span class="br0">&#41;</span><span class="sy0">,</span> <span class="nu0">2</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></div></div>

<p>Plus d&#8217;infos sur l&#8217;usage de <a href="http://www.frefred.fr/blog/ezcontentobjecttreenode_subtree_d_ez_publish">ezContentObjectTreeNode chez Frefred</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.miximum.fr/methodes-et-outils/47-recuperer-des-objets-de-contenu-en-filtrant-par-attribut-avec-lapi-ez-publish/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

