<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Artisan Numérique</title>
  <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1317"/>
  <link rel="self" type="application/atom+xml" href="http://artisan.karma-lab.net/node/1317/atom/feed"/>
  <id>http://artisan.karma-lab.net/node/1317/atom/feed</id>
  <updated>2008-10-31T21:32:47+01:00</updated>
  <entry>
    <title>Bloc-note &#039;Drupal&#039;</title>
    <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1317" />
    <id>http://artisan.karma-lab.net/node/1317</id>
    <published>2008-02-01T11:51:37+01:00</published>
    <updated>2008-10-31T21:32:47+01:00</updated>
    <author>
      <name>Ulhume</name>
    </author>
    <category term="Drupal" />
    <category term="Aucun" />
    <category term="Note" />
    <category term="OK" />
    <summary type="html"><![CDATA[<p>Bloc-Note Drupal</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>Bloc-Note Drupal</p>
<!--break-->

	<a name='chapter_1'></a>
  <h2>Le syndrome de l'écran blanc</h2>
	                                                                                                                                                                                                                                                                                                                                                                                  
<p>                                                                                                                                                                                                                                                                                                                                                                                                                    
  Il arrive qu'après une re-installion du système hôte, d'un changement de version d'apache ou d'une pluie de météorites, que la page d'accueil de drupal se résume à une belle feuille blanche. Sans message, sans rien d'autre qu'une trace dans les logs                                                                                                                                                            

  <div class='code-block code-block-fragment'>
  <div class='container'>
  PHP Fatal error: &nbsp;Call to undefined function file_directory_path() in /var/web/drupal/includes/common.inc on line 1685 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
  </div>
  
  </div>                                                                                                                                                                                                                                                                                                                                                                                                                
</p>                                                                                                                                                                                                                                                                                                                                                                                                                   
<p>                                                                                                                                                                                                                                                                                                                                                                                                                    
  Et bien il y a de fortes chances que la raison soit simplement que la base de donnée n'est pas reconnue. Généralement c'est le cas lorsque le module php n'est pas install (apache_php-pgsql ou apache_php-mysql). Dans certains cas c'est le fichier <kbd>settings</kbd> qui est illisible ou que la référence de base qui s'y trouve est fausse.                                                                   
</p>                                                                                                                                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                                                                                                                                                                       

	<a name='chapter_2'></a>
  <h2>Problème d'encodage UTF8</h2>
	                                                                                                                                                                                                                                                                                                                                                                                      
<p>                                                                                                                                                                                                                                                                                                                                                                                                                    
Il arrive aussi, par exemple après une installation fraîche, que l'on tombe sur le message d'erreur suivant en haut de la page web courante :                                                                                                                                                                                                                                                                          

  <div class='code-block code-block-fragment'>
  <div class='container'>
  warning: array_map() [function.array-map]: The first argument, 'utf8_encode', should be either NULL or a valid callback in /storage/web/applications/drupal/includes/unicode.inc on line 304. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
  </div>
  
  </div>                                                                                                                                                                                                                                                                                                                                                                                                                
</p>                                                                                                                                                                                                                                                                                                                                                                                                                   
<p>                                                                                                                                                                                                                                                                                                                                                                                                                    
 Alors la solution n'a, contre toute attente, aucun rapport avec l'UTF. En fait il y a de forte chance que le paquet <kbd>php-xml</kbd> soit simplement manquant. Il suffit donc de l'installer et redémarrer apache pour que le message disparaisse.                                                                                                                                                                  
</p>                                                                                                                                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                                                                                                                                                                       

	<a name='chapter_3'></a>
  <h2>Ordre des nodes inversé</h2>
	                                                                                                                                                                                                                                                                                                                                                                                       
<p>                                                                                                                                                                                                                                                                                                                                                                                                                    
  Alors ça c'est un truc étrange qui apparaît de temps à autre et pour lequel <string>je n'ai pas de solution</string>. Le symptôme c'est que les nodes s'affichent dans l'ordre chronologique, les plus anciens en tête, et ce lorsqu'un utilisateur est connecté (en anonymous, pas de soucis). 
</p>     
<p>
  Après avoir maté le code de <kbd>modules/node.module</kbd>, il semble que le problème vienne de la ré-écriture de la requête qui produit un code SQL partiellement problématique avec PostgreSQL. La solution a juste pour moi été de commenter la clause <kbd>distinct</kbd> :

  <div class='code-block code-block-fragment'>
  <div class='container'>
  <span class="coMULTI">/**<br />
&nbsp;* Implementation of hook_db_rewrite_sql<br />
&nbsp;*/</span><br />
<a target="blank" href="http://www.php.net/function"><span class="kw2">function</span></a> node_db_rewrite_sql<span class="br0">&#40;</span><span class="re0">$query</span><span class="sy0">,</span> <span class="re0">$primary_table</span><span class="sy0">,</span> <span class="re0">$primary_field</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; <a target="blank" href="http://www.php.net/if"><span class="kw1">if</span></a> <span class="br0">&#40;</span><span class="re0">$primary_field</span> <span class="sy0">==</span> <span class="st0">'nid'</span> <span class="sy0">&amp;&amp;</span> <span class="sy0">!</span>node_access_view_all_nodes<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="re0">$return</span><span class="br0">&#91;</span><span class="st0">'join'</span><span class="br0">&#93;</span> <span class="sy0">=</span> _node_access_join_sql<span class="br0">&#40;</span><span class="re0">$primary_table</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="re0">$return</span><span class="br0">&#91;</span><span class="st0">'where'</span><span class="br0">&#93;</span> <span class="sy0">=</span> _node_access_where_sql<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="co1">// &nbsp;C'est pas terrible, mais ça marche...</span><br />
<span class="co1">// &nbsp; &nbsp;$return['distinct'] = 1;</span><br />
<br />
&nbsp; &nbsp; <a target="blank" href="http://www.php.net/return"><span class="kw1">return</span></a> <span class="re0">$return</span><span class="sy0">;</span><br />
&nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span>
  </div>
  
  </div>
</p>


	<a name='chapter_4'></a>
  <h2>Cache des commentaires</h2>
	
<p>
  Le truc est de pouvoir vider le cache lorsqu'un utilisateur anonyme rentre un commentaire. Sinon, ce dernier mettra le temps de vie du cache à voir son commentaire apparaître, ou celui des autres ce qui est génant lorsqu'il est notifié de l'arrivée d'un nouveau commentaire. 

  <div class='code-block code-block-fragment'>
  <div class='container'>
  <a target="blank" href="http://www.php.net/function"><span class="kw2">function</span></a> klc_comment<span class="br0">&#40;</span><span class="re0">$comment</span><span class="sy0">,</span> <span class="re0">$op</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; <a target="blank" href="http://www.php.net/if"><span class="kw1">if</span></a> <span class="br0">&#40;</span><span class="re0">$op</span><span class="sy0">==</span><span class="st0">'validate'</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="re0">$comment</span><span class="sy0">=</span><span class="br0">&#40;</span>object<span class="br0">&#41;</span><span class="re0">$comment</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="re0">$cid</span><span class="sy0">=</span><span class="st0">&quot;http://&quot;</span><span class="sy0">.</span><span class="re0">$_SERVER</span><span class="br0">&#91;</span><span class="st0">&quot;SERVER_NAME&quot;</span><span class="br0">&#93;</span><span class="sy0">.</span><span class="st0">&quot;/node/&quot;</span><span class="sy0">.</span><span class="re0">$comment</span><span class="sy0">-&gt;</span><span class="me1">cid</span><span class="sy0">;</span><br />
&nbsp; &nbsp; cache_clear_all<span class="br0">&#40;</span><span class="re0">$cid</span><span class="sy0">,</span><span class="st0">'cache_page'</span><span class="sy0">,</span><a target="blank" href="http://www.php.net/true"><span class="kw2">TRUE</span></a><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span>
  </div>
  
  </div>


	<a name='chapter_5'></a>
  <h2>Skinner un formulaire</h2>
	

  <div class='code-block code-block-fragment'>
  <div class='container'>
  <span class="coMULTI">/**<br />
&nbsp;* hook_form_alter() implementation<br />
&nbsp;*<br />
&nbsp;* @param String $form_id form name<br />
&nbsp;* @param array() $form form data<br />
&nbsp;*/</span><br />
<a target="blank" href="http://www.php.net/function"><span class="kw2">function</span></a> klc_form_alter<span class="br0">&#40;</span><span class="re0">$form_id</span><span class="sy0">,</span> <span class="sy0">&amp;</span> <span class="re0">$form</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <a target="blank" href="http://www.php.net/if"><span class="kw1">if</span></a> <span class="br0">&#40;</span><span class="coMULTI">/*$form_id=='story_node_form' &amp;&amp; */</span><a target="blank" href="http://www.php.net/isset"><span class="kw3">isset</span></a> <span class="br0">&#40;</span><span class="re0">$form</span><span class="br0">&#91;</span><span class="st0">'type'</span><span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="sy0">&amp;&amp;</span> <span class="re0">$form</span><span class="br0">&#91;</span><span class="st0">'type'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">'#value'</span><span class="br0">&#93;</span> <span class="sy0">.</span> <span class="st0">'_node_form'</span> <span class="sy0">==</span> <span class="re0">$form_id</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$form</span><span class="br0">&#91;</span><span class="st0">'taxonomy'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">'#theme'</span><span class="br0">&#93;</span><span class="sy0">=</span> <span class="st0">'taxonomy_array'</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="coMULTI">/**<br />
&nbsp;* Theme feed composition list.<br />
&nbsp;*/</span><br />
<a target="blank" href="http://www.php.net/function"><span class="kw2">function</span></a> theme_taxonomy_array<span class="br0">&#40;</span><span class="sy0">&amp;</span> <span class="re0">$form</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="re0">$row</span><span class="sy0">=</span> <a target="blank" 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><br />
&nbsp; &nbsp; <span class="re0">$iCount</span><span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <a target="blank" href="http://www.php.net/foreach"><span class="kw1">foreach</span></a> <span class="br0">&#40;</span>element_children<span class="br0">&#40;</span><span class="re0">$form</span><span class="br0">&#41;</span> <a target="blank" href="http://www.php.net/as"><span class="kw1">as</span></a> <span class="re0">$key</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a target="blank" href="http://www.php.net/if"><span class="kw1">if</span></a> <span class="br0">&#40;</span><span class="re0">$iCount</span> <span class="sy0">%</span> <span class="nu0">3</span> <span class="sy0">==</span> <span class="nu0">0</span> <span class="sy0">&amp;&amp;</span> <span class="re0">$iCount</span><span class="sy0">&gt;</span><span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$rows</span><span class="br0">&#91;</span><span class="br0">&#93;</span><span class="sy0">=</span> <span class="re0">$row</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$row</span><span class="sy0">=</span> <a target="blank" 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><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$row</span><span class="br0">&#91;</span><span class="br0">&#93;</span><span class="sy0">=</span> drupal_render<span class="br0">&#40;</span><span class="re0">$form</span><span class="br0">&#91;</span><span class="re0">$key</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$iCount</span><span class="sy0">++;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="re0">$rows</span><span class="br0">&#91;</span><span class="br0">&#93;</span><span class="sy0">=</span> <span class="re0">$row</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="re0">$output</span><span class="sy0">=</span> theme<span class="br0">&#40;</span><span class="st0">'table'</span><span class="sy0">,</span> <a target="blank" href="http://www.php.net/null"><span class="kw2">null</span></a><span class="sy0">,</span> <span class="re0">$rows</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="co1">// &nbsp; &nbsp;$output .= drupal_render($form);</span><br />
&nbsp; &nbsp; <a target="blank" href="http://www.php.net/return"><span class="kw1">return</span></a> <span class="re0">$output</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span>
  </div>
  
  </div>


	<a name='chapter_6'></a>
  <h2>Archiver un site Drupal (ou autre)</h2>
	

  <div class='code-block code-block-fragment'>
  <div class='container'>
  <a target="blank" href="http://pwet.fr/man/linux/commandes/wget"><span class="kw2">wget</span></a> -q --mirror -p --html-extension --<span class="re2">base=</span>.<span class="sy0">/</span> -k -P .<span class="sy0">/</span> http:<span class="sy0">//</span>example.com
  </div>
  
  </div>


	<a name='chapter_7'></a>
  <h2>Repasser en mode URL non clean</h2>
	
<p>
  d'abord se connecter en admin via <kbd>?q=user/login</kbd>, puis dans la base :

  <div class='code-block code-block-fragment'>
  <div class='container'>
  <span class="kw1">UPDATE</span> variable <span class="kw1">SET</span> value<span class="sy0">=</span><span class="st0">'s:1:&quot;0&quot;;'</span> <span class="kw1">WHERE</span> name<span class="sy0">=</span><span class="st0">'clean_url'</span>;<br />
<span class="kw1">DELETE</span> <span class="kw1">FROM</span> cache
  </div>
  
  </div>
</p>


	<a name='chapter_8'></a>
  <h2>Avoir les mises à jour d'un module</h2>
	
<p>
  L'url magique est http://updates.drupal.org/release-history/nom_module/version_api
</p>
<p>
  Soit par exemple : http://updates.drupal.org/release-history/cck/5.x
</p>    ]]></content>
  </entry>
</feed>
