Duplication d'un bloc (néophyte en php)

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour,

Totalement profane en php j'ai quand même décidé de tenter la duplication d'un bloc dans le module phpbb. Le module dispose en effet d'un bloc reprenant les derniers sujets du forum phpbb lié sur le site Drupal.

J'aimerais dupliquer ce bloc afin de pouvoir l'utiliser avec des paramètres différents selon l'endroit du site. J'ai pour l'instant tenté de le dupliquer en m'inspirant du code d'autres modules. Pas de messages d'erreur mais mon bloc n'apparaît pas pour autant dans la liste. Alors si quelqu'un peut me donner un coup de pouce c'est très très volontiers.

Voici le code de base (avant mes modifications) pour la partie hook block:

<?php
/**
 * Implementation of hook_block
 *
 */
 
function phpbb_block($op = 'list', $delta = 0, $edit = array() ) {
    switch (
$op) {
     case
'list':
        
$blocks[0]['info'] = t(variable_get('phpbb_block0_title', 'phpBB Topics'));
          return
$blocks;
        case
'configure':
           
$form = array();
           return
$form;
      case
'save':
        
// stub, no special data to save
          
return;
        case
'view': // fall through
    
default:
          
$block['subject'] = t(variable_get('phpbb_block0_title','phpBB Topics'));
           
$block['content'] = _phpbb_display_block_0();
            return
$block;
 }
}
?>

Et avec ma tentative de duplication:

<?php
/**
 * Implementation of hook_block
 *
 */
 
function phpbb_block($op = 'list', $delta = 0, $edit = array() ) {
    switch (
$op) {
     case
'list':
        
$blocks[0]['info'] = t(variable_get('phpbb_block0_title', 'phpBB Topics'));
         
$blocks[1]['info'] = t(variable_get('phpbb_block1_title', 'phpBB Topics 2'));
            return
$blocks;
        case
'configure':
           
$form = array();
           return
$form;
      case
'save':
        
// stub, no special data to save
          
return;
        case
'view': // fall through
   
switch ($delta) {
      case
0:
        
$block['subject'] = t(variable_get('phpbb_block0_title','phpBB Topics'));
           
$block['content'] = _phpbb_display_block_0();
            return
$block;
         case
1:
           
$block['subject'] = t(variable_get('phpbb_block1_title','phpBB Topics 2'));
         
$block['content'] = _phpbb_display_block_1();
            return
$block;
         }
  }
}
?>

La fonction est plus loin, j'ai aussi tenté de la dupliquer.

Original:

<?php
function _phpbb_display_block_0() {
  
$phpbb_dbc = _phpbb_db();
 
$prefix = _phpbb_prefix();

   
// auth_read = 0  -> we only include public forums
 
$phpbb_query = 'SELECT '.$prefix.'topics.topic_id, '.$prefix.'topics.topic_title, '.$prefix.'topics.topic_last_post_id FROM '
                     
.$prefix.'topics LEFT JOIN '.$prefix.'forums ON '.$prefix.'topics.forum_id = '.$prefix.'forums.forum_id WHERE '
                       
.$prefix.'forums.auth_view = 0 ORDER BY topic_last_post_id DESC LIMIT 10;';

 
$result = mysql_query($phpbb_query, $phpbb_dbc) or die('Query failed: ' . mysql_error() . " \n" . $phpbb_query . "\n");

 
$list = array();
  
   while (
$a_row = mysql_fetch_assoc($result) ){
     
$descstr = _phpbb_decode($a_row['topic_title']);
    
$descstr=utf8_decode($descstr);
       
$origdescstr = $descstr;
       if (
strlen($descstr) > 20 )
        
$descstr = substr($descstr,0,19) . "...";

      
$topic_urlstr = variable_get('phpbb_www_path', '/phpBB2/') ."viewtopic.php?t=" . $a_row['topic_id'];
      
$post_urlstr variable_get('phpbb_www_path', '/phpBB2/') ."viewtopic.php?p=" . $a_row['topic_last_post_id'] . "#" . $a_row['topic_last_post_id'];

      
$list[] = '<a href="' . $post_urlstr .'"> <span class="pilned"> <img src="../../misc/arrow.gif"></span></a> <a href="'
                
. $topic_urlstr .'" title="' . $origdescstr . '">' . $descstr . '</a> ' . "\n";
    }

 return
theme('item_list', $list);
}
?>

Après ma modification:

<?php
function _phpbb_display_block_0() {
  
$phpbb_dbc = _phpbb_db();
 
$prefix = _phpbb_prefix();

   
// auth_read = 0  -> we only include public forums
 
$phpbb_query = 'SELECT '.$prefix.'topics.topic_id, '.$prefix.'topics.topic_title, '.$prefix.'topics.topic_last_post_id FROM '
                     
.$prefix.'topics LEFT JOIN '.$prefix.'forums ON '.$prefix.'topics.forum_id = '.$prefix.'forums.forum_id WHERE '
                       
.$prefix.'forums.auth_view = 0 ORDER BY topic_last_post_id DESC LIMIT 10;';

 
$result = mysql_query($phpbb_query, $phpbb_dbc) or die('Query failed: ' . mysql_error() . " \n" . $phpbb_query . "\n");

 
$list = array();
  
   while (
$a_row = mysql_fetch_assoc($result) ){
     
$descstr = _phpbb_decode($a_row['topic_title']);
    
$descstr=utf8_decode($descstr);
       
$origdescstr = $descstr;
       if (
strlen($descstr) > 20 )
        
$descstr = substr($descstr,0,19) . "...";

      
$topic_urlstr = variable_get('phpbb_www_path', '/phpBB2/') ."viewtopic.php?t=" . $a_row['topic_id'];
      
$post_urlstr variable_get('phpbb_www_path', '/phpBB2/') ."viewtopic.php?p=" . $a_row['topic_last_post_id'] . "#" . $a_row['topic_last_post_id'];

      
$list[] = '<a href="' . $post_urlstr .'"> <span class="pilned"> <img src="../../misc/arrow.gif"></span></a> <a href="'
                
. $topic_urlstr .'" title="' . $origdescstr . '">' . $descstr . '</a> ' . "\n";
    }

 return
theme('item_list', $list);
}

function
_phpbb_display_block_1() {
 
$phpbb_dbc = _phpbb_db();
 
$prefix = _phpbb_prefix();

   
// auth_read = 0  -> we only include public forums
 
$phpbb_query = 'SELECT '.$prefix.'topics.topic_id, '.$prefix.'topics.topic_title, '.$prefix.'topics.topic_last_post_id FROM '
                     
.$prefix.'topics LEFT JOIN '.$prefix.'forums ON '.$prefix.'topics.forum_id = '.$prefix.'forums.forum_id WHERE '
                       
.$prefix.'forums.auth_view = 0 ORDER BY topic_last_post_id DESC LIMIT 10;';

 
$result = mysql_query($phpbb_query, $phpbb_dbc) or die('Query failed: ' . mysql_error() . " \n" . $phpbb_query . "\n");

 
$list = array();
  
   while (
$a_row = mysql_fetch_assoc($result) ){
     
$descstr = _phpbb_decode($a_row['topic_title']);
    
$descstr=utf8_decode($descstr);
       
$origdescstr = $descstr;
       if (
strlen($descstr) > 20 )
        
$descstr = substr($descstr,0,19) . "...";

      
$topic_urlstr = variable_get('phpbb_www_path', '/phpBB2/') ."viewtopic.php?t=" . $a_row['topic_id'];
      
$post_urlstr variable_get('phpbb_www_path', '/phpBB2/') ."viewtopic.php?p=" . $a_row['topic_last_post_id'] . "#" . $a_row['topic_last_post_id'];

      
$list[] = '<a href="' . $post_urlstr .'"> <span class="pilned"> <img src="../../misc/arrow.gif"></span></a> <a href="'
                
. $topic_urlstr .'" title="' . $origdescstr . '">' . $descstr . '</a> ' . "\n";
    }

 return
theme('item_list', $list);
}
?>

Est-ce que quelqu'un parvient à me dire ce que j'ai oublié?

Merci d'avance!

Forum : 
Version de Drupal : 

J'ai pas jete un oeil ds ta fonction, mais ton hookblock me parait correct...
Bizarre que ca apparaisse pas, essait de vider ton cache (du navigateur) et de forcer le rafraichissement de la page.

Qd tu dis qu'il apparait pas ds ta liste, tu veux bien dire qu'il apparait pas ds la liste des blocs desactives ?