Sarteck
06-16-2011, 10:28 PM
Right, so you know where we've got our Custom Profile Fields that users can alter? Someone has asked me to make a simple change to it. Or, I thought it was going to be simple, anyways...
https://vborg.vbsupport.ru/external/2011/06/31.png
Note the top Profile field there, "Username Color?" He wants me to put that "Gold Membership Extras" bit up above it, as shown in that image.
So I looked in the editprofile branch of the profile.php code, and I find out that the HTML is coming from a $customfields variable.
I see that $customfields gets its value from a function called fetch_profilefields(), and that function gets the individual HTML for each Profile Field from another function called fetch_profilefield().
Finally, I see that inside of fetch_profilefield() is a handy hook that I can use, profile_fetch_profilefields.
This is great, everything's falling into place.
Or so I thought it was.
fetch_profilefield() returns some HTML that gets assigned to the $tempcustom variable inside of fetch_profilefields(), as far as I can tell. However, when I try to return a value from fetch_profilefield(), it just doesn't "take" for some reason.
Here's what I got on that profile_fetch_profilefields hook:
if ($profilefield['profilefieldid'] == '16')
{
$startbox = '<div style="border:1px solid #000000; margin:1px;padding:1px;"><h2>Gold Membership Extras</h2><br />';
$endbox = '</div>';
$data = unserialize($profilefield['data']);
$selectbits = '';
$foundselect = 0;
foreach ($data AS $key => $val)
{
$key++;
$selected = '';
if ($vbulletin->userinfo["$profilefieldname"])
{
if (trim($val) == $vbulletin->userinfo["$profilefieldname"])
{
$selected = 'selected="selected"';
$foundselect = 1;
}
}
else if ($profilefield['def'] AND $key == 1)
{
$selected = 'selected="selected"';
$foundselect = 1;
}
$templater = vB_Template::create('userfield_select_option');
$templater->register('key', $key);
$templater->register('selected', $selected);
$templater->register('val', $val);
$selectbits .= $templater->render();
}
if ($profilefield['optional'])
{
if (!$foundselect AND (!empty($vbulletin->userinfo["$profilefieldname"]) OR $vbulletin->userinfo["$profilefieldname"] === '0'))
{
$optional = $vbulletin->userinfo["$profilefieldname"];
}
$templater = vB_Template::create('userfield_optional_input');
$templater->register('optional', $optional);
$templater->register('optionalname', $optionalname);
$templater->register('profilefield', $profilefield);
$templater->register('tabindex', $tabindex);
$optionalfield = $templater->render();
}
if (!$foundselect)
{
$selected = 'selected="selected"';
}
else
{
$selected = '';
}
$show['noemptyoption'] = iif($profilefield['def'] != 2, true, false);
$templater = vB_Template::create('userfield_select');
$templater->register('optionalfield', $optionalfield);
$templater->register('profilefield', $profilefield);
$templater->register('profilefieldname', $profilefieldname);
$templater->register('selectbits', $selectbits);
$templater->register('selected', $selected);
$custom_field_holder = $templater->render();
$templater = vB_Template::create($wrapper_template);
$templater->register('custom_field_holder', $custom_field_holder);
$templater->register('profilefield', $profilefield);
$returnval = $startbox.$templater->render().$endbox;
//if ($vbulletin->userinfo['userid'] == 533) {die($returnval.'<!-- test -->');}
return $returnval;
}
Now, when I uncomment //if ($vbulletin->userinfo['userid'] == 533) {die($returnval.'<!-- test -->');}, I get the expected output--the field is wrapped in between my "$startbox" and "$endbox" values. However, left commented, there is nothing that gets changed.
However, I -do- know that it's going through this function; 1), the uncommented "die()" executes, and 2) if I manually add some kind of test to $custom_field_holder, THAT value actually takes!
Could someone maybe point out a mistake I might be making? It's not terribly important to me--it's not even my own forum I'm doing this for--but it's bugging the hell out of me! XD
Also, I think similar plugins would help me organize my own forum's Profile Fields page.
Thanks in advance.
https://vborg.vbsupport.ru/external/2011/06/31.png
Note the top Profile field there, "Username Color?" He wants me to put that "Gold Membership Extras" bit up above it, as shown in that image.
So I looked in the editprofile branch of the profile.php code, and I find out that the HTML is coming from a $customfields variable.
I see that $customfields gets its value from a function called fetch_profilefields(), and that function gets the individual HTML for each Profile Field from another function called fetch_profilefield().
Finally, I see that inside of fetch_profilefield() is a handy hook that I can use, profile_fetch_profilefields.
This is great, everything's falling into place.
Or so I thought it was.
fetch_profilefield() returns some HTML that gets assigned to the $tempcustom variable inside of fetch_profilefields(), as far as I can tell. However, when I try to return a value from fetch_profilefield(), it just doesn't "take" for some reason.
Here's what I got on that profile_fetch_profilefields hook:
if ($profilefield['profilefieldid'] == '16')
{
$startbox = '<div style="border:1px solid #000000; margin:1px;padding:1px;"><h2>Gold Membership Extras</h2><br />';
$endbox = '</div>';
$data = unserialize($profilefield['data']);
$selectbits = '';
$foundselect = 0;
foreach ($data AS $key => $val)
{
$key++;
$selected = '';
if ($vbulletin->userinfo["$profilefieldname"])
{
if (trim($val) == $vbulletin->userinfo["$profilefieldname"])
{
$selected = 'selected="selected"';
$foundselect = 1;
}
}
else if ($profilefield['def'] AND $key == 1)
{
$selected = 'selected="selected"';
$foundselect = 1;
}
$templater = vB_Template::create('userfield_select_option');
$templater->register('key', $key);
$templater->register('selected', $selected);
$templater->register('val', $val);
$selectbits .= $templater->render();
}
if ($profilefield['optional'])
{
if (!$foundselect AND (!empty($vbulletin->userinfo["$profilefieldname"]) OR $vbulletin->userinfo["$profilefieldname"] === '0'))
{
$optional = $vbulletin->userinfo["$profilefieldname"];
}
$templater = vB_Template::create('userfield_optional_input');
$templater->register('optional', $optional);
$templater->register('optionalname', $optionalname);
$templater->register('profilefield', $profilefield);
$templater->register('tabindex', $tabindex);
$optionalfield = $templater->render();
}
if (!$foundselect)
{
$selected = 'selected="selected"';
}
else
{
$selected = '';
}
$show['noemptyoption'] = iif($profilefield['def'] != 2, true, false);
$templater = vB_Template::create('userfield_select');
$templater->register('optionalfield', $optionalfield);
$templater->register('profilefield', $profilefield);
$templater->register('profilefieldname', $profilefieldname);
$templater->register('selectbits', $selectbits);
$templater->register('selected', $selected);
$custom_field_holder = $templater->render();
$templater = vB_Template::create($wrapper_template);
$templater->register('custom_field_holder', $custom_field_holder);
$templater->register('profilefield', $profilefield);
$returnval = $startbox.$templater->render().$endbox;
//if ($vbulletin->userinfo['userid'] == 533) {die($returnval.'<!-- test -->');}
return $returnval;
}
Now, when I uncomment //if ($vbulletin->userinfo['userid'] == 533) {die($returnval.'<!-- test -->');}, I get the expected output--the field is wrapped in between my "$startbox" and "$endbox" values. However, left commented, there is nothing that gets changed.
However, I -do- know that it's going through this function; 1), the uncommented "die()" executes, and 2) if I manually add some kind of test to $custom_field_holder, THAT value actually takes!
Could someone maybe point out a mistake I might be making? It's not terribly important to me--it's not even my own forum I'm doing this for--but it's bugging the hell out of me! XD
Also, I think similar plugins would help me organize my own forum's Profile Fields page.
Thanks in advance.