CypherSTL
01-11-2010, 04:51 AM
I've looked at other mods which also add profile tabs in VB4, and from what I can tell my plugin is coded properly.
However, when I load a Profile, the block data is being displayed on every tab, and not only on the tab it's told to.
$blocklist['myawards'] = array(
'class' => 'MyAwards',
'title' => $vbphrase['awards'],
'hook_location' => 'profile_left_last',
'wrap' => false
);
class vB_ProfileBlock_MyAwards extends vB_ProfileBlock
{
var $template_name = 'memberinfo_block_myawards';
function confirm_empty_wrap()
{
return false;
}
function confirm_display()
{
return ($this->block_data['myawards'] != '');
}
function prepare_output($id = '', $options = array())
{
global $show, $vbphrase, $stylevar, $vbcollapse, $bgclass, $vbulletin;
require_once(DIR . '/includes/class_bbcode.php');
$bbcode_parser =& new vB_BbCodeParser($this->registry, fetch_tag_list());
$result = $this->registry->db->query_read('
SELECT
*
FROM
' . TABLE_PREFIX . 'award_user AS award_user
LEFT JOIN ' . TABLE_PREFIX . 'award AS award USING (award_id)
WHERE
award_user.userid = ' . $this->profile->userinfo['userid'] . '
AND award.award_active = "1"
ORDER BY
'.$vbulletin->options['aw_awardorder'].'
');
if (($vbulletin->options['aw_points']) AND ($this->profile->userinfo['userid']))
{
$userpoints = $this->registry->db->query_read('
SELECT a.*, au.*, SUM(award_pointvalue) AS TotalPoints
FROM ' . TABLE_PREFIX . 'award a, ' . TABLE_PREFIX . 'award_user au
WHERE (au.userid = '.$this->profile->userinfo['userid'].') AND (a.award_id=au.award_id) AND (a.award_active = "1")
');
while ($array = $this->registry->db->fetch_array($userpoints))
{
$this->block_data['total_points'] = $array['TotalPoints'];
}
}
$num = $this->block_data['num'] = $this->registry->db->num_rows($result);
$this->block_data['myawards'] = '';
if ($num > 0)
{
// Display Awards
while ($award = $this->registry->db->fetch_array($result))
{
exec_switch_bg();
$award['award_desc'] = $bbcode_parser->parse($award['award_desc']);
$award['issue_reason'] = $bbcode_parser->parse($award['issue_reason']);
$award_issue_date = vbdate($this->registry->options['dateformat'], $award['issue_time'], true);
$award_issue_time = vbdate($this->registry->options['timeformat'], $award['issue_time']);
//- VB3 -// eval('$this->block_data[\'myawards\'] .= "' . fetch_template('awards_userawards_bit') . '";');
//- BEGIN VB4 -//
$templater = vB_Template::create('awards_userawards_bit');
$templater->register('award', $award);
$templater->register('award_issue_date', $award_issue_date);
$templater->register('award_issue_time', $award_issue_time);
$uawardbits .= $templater->render();
//- END VB4 -//
}
}
$this->block_data['myawards'] = $uawardbits;
}
}
Any ideas?
However, when I load a Profile, the block data is being displayed on every tab, and not only on the tab it's told to.
$blocklist['myawards'] = array(
'class' => 'MyAwards',
'title' => $vbphrase['awards'],
'hook_location' => 'profile_left_last',
'wrap' => false
);
class vB_ProfileBlock_MyAwards extends vB_ProfileBlock
{
var $template_name = 'memberinfo_block_myawards';
function confirm_empty_wrap()
{
return false;
}
function confirm_display()
{
return ($this->block_data['myawards'] != '');
}
function prepare_output($id = '', $options = array())
{
global $show, $vbphrase, $stylevar, $vbcollapse, $bgclass, $vbulletin;
require_once(DIR . '/includes/class_bbcode.php');
$bbcode_parser =& new vB_BbCodeParser($this->registry, fetch_tag_list());
$result = $this->registry->db->query_read('
SELECT
*
FROM
' . TABLE_PREFIX . 'award_user AS award_user
LEFT JOIN ' . TABLE_PREFIX . 'award AS award USING (award_id)
WHERE
award_user.userid = ' . $this->profile->userinfo['userid'] . '
AND award.award_active = "1"
ORDER BY
'.$vbulletin->options['aw_awardorder'].'
');
if (($vbulletin->options['aw_points']) AND ($this->profile->userinfo['userid']))
{
$userpoints = $this->registry->db->query_read('
SELECT a.*, au.*, SUM(award_pointvalue) AS TotalPoints
FROM ' . TABLE_PREFIX . 'award a, ' . TABLE_PREFIX . 'award_user au
WHERE (au.userid = '.$this->profile->userinfo['userid'].') AND (a.award_id=au.award_id) AND (a.award_active = "1")
');
while ($array = $this->registry->db->fetch_array($userpoints))
{
$this->block_data['total_points'] = $array['TotalPoints'];
}
}
$num = $this->block_data['num'] = $this->registry->db->num_rows($result);
$this->block_data['myawards'] = '';
if ($num > 0)
{
// Display Awards
while ($award = $this->registry->db->fetch_array($result))
{
exec_switch_bg();
$award['award_desc'] = $bbcode_parser->parse($award['award_desc']);
$award['issue_reason'] = $bbcode_parser->parse($award['issue_reason']);
$award_issue_date = vbdate($this->registry->options['dateformat'], $award['issue_time'], true);
$award_issue_time = vbdate($this->registry->options['timeformat'], $award['issue_time']);
//- VB3 -// eval('$this->block_data[\'myawards\'] .= "' . fetch_template('awards_userawards_bit') . '";');
//- BEGIN VB4 -//
$templater = vB_Template::create('awards_userawards_bit');
$templater->register('award', $award);
$templater->register('award_issue_date', $award_issue_date);
$templater->register('award_issue_time', $award_issue_time);
$uawardbits .= $templater->render();
//- END VB4 -//
}
}
$this->block_data['myawards'] = $uawardbits;
}
}
Any ideas?