Bloc-note 'Drupal'
Le 1 février 2008, à 11:51 par Ulhume...

Bloc-Note Drupal

Le syndrome de l'écran blanc

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

PHP Fatal error:  Call to undefined function file_directory_path() in /var/web/drupal/includes/common.inc on line 1685                                                                                                                                                                                                                                                                                                

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 settings qui est illisible ou que la référence de base qui s'y trouve est fausse.

Problème d'encodage UTF8

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 :

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.                                                                                                                                                                                                                          

Alors la solution n'a, contre toute attente, aucun rapport avec l'UTF. En fait il y a de forte chance que le paquet php-xml soit simplement manquant. Il suffit donc de l'installer et redémarrer apache pour que le message disparaisse.

Ordre des nodes inversé

Alors ça c'est un truc étrange qui apparaît de temps à autre et pour lequel je n'ai pas de solution. 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).

Après avoir maté le code de modules/node.module, 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 distinct :

  1. /**
  2.  * Implementation of hook_db_rewrite_sql
  3.  */
  4. function node_db_rewrite_sql($query, $primary_table, $primary_field) {
  5.   if ($primary_field == 'nid' && !node_access_view_all_nodes()) {
  6.     $return['join'] = _node_access_join_sql($primary_table);
  7.     $return['where'] = _node_access_where_sql();
  8.  
  9. //  C'est pas terrible, mais ça marche...
  10. //    $return['distinct'] = 1;
  11.  
  12.     return $return;
  13.   }
  14. }

Cache des commentaires

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.

  1. function klc_comment($comment, $op) {
  2.   if ($op=='validate') {
  3.     $comment=(object)$comment;
  4.     $cid="http://".$_SERVER["SERVER_NAME"]."/node/".$comment->cid;
  5.     cache_clear_all($cid,'cache_page',TRUE);
  6.   }
  7. }

Skinner un formulaire

  1. /**
  2.  * hook_form_alter() implementation
  3.  *
  4.  * @param String $form_id form name
  5.  * @param array() $form form data
  6.  */
  7. function klc_form_alter($form_id, & $form) {
  8.     if (/*$form_id=='story_node_form' && */isset ($form['type']) && $form['type']['#value'] . '_node_form' == $form_id) {
  9.         $form['taxonomy']['#theme']= 'taxonomy_array';
  10.     }
  11. }
  12.  
  13. /**
  14.  * Theme feed composition list.
  15.  */
  16. function theme_taxonomy_array(& $form) {
  17.     $row= array ();
  18.     $iCount= 0;
  19.     foreach (element_children($form) as $key) {
  20.         if ($iCount % 3 == 0 && $iCount>0) {
  21.             $rows[]= $row;
  22.             $row= array ();
  23.         }
  24.         $row[]= drupal_render($form[$key]);
  25.         $iCount++;
  26.     }
  27.     $rows[]= $row;
  28.     $output= theme('table', null, $rows);
  29.     //    $output .= drupal_render($form);
  30.     return $output;
  31. }

Archiver un site Drupal (ou autre)

wget -q --mirror -p --html-extension --base=./ -k -P ./ http://example.com

Commentaires

Répondre

Le contenu de ce champ est gardé secret et ne sera pas montré publiquement.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • To highlight piece of code, just surround them with <code type="language"> Your code &tl;/code>>. Language can be java,c++,bash,etc... Everything Geshi support.
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • Textual smileys will be replaced with graphical ones.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.

Plus d'informations sur les options de formatage

Connexion utilisateur
Les derniers bavardages...