Submitted by Luneh on
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!
J'ai pas jete un oeil ds ta
Permalien Soumis par tostinni le 19 Juillet, 2007 - 18:18
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 ?
Bonjour, Mea culpa. En effet
Permalien Soumis par Luneh le 20 Juillet, 2007 - 12:32
Bonjour,
Mea culpa. En effet après vidage de cache ça apparaît. étrange, c'est bien la première fois que je dois vider mon cache. Dans tous les cas, ça semble fonctionner en tout cas.
Merci!