The Arcive of Official vBulletin Modifications Site.It is not a VB3 engine, just a parsed copy! |
|
#1
|
|||
|
|||
![]()
Ok, heres what I WANT to accomplish.
In usercp, allow the user to enter "YEAR YOU BECAME A MEMBER". The user might enter the year of "1986" for example. Then, on the user PROFILE page, I want one of the entries to say "Member: 26 years". How do I do this? I had an idea in my head of a second hidden field that I would run a cron nightly to fill in the numbers, but that seems like overkill. Anyone? |
#2
|
|||
|
|||
![]()
You could add it to the join date, like the age is done with the birthday. Create a plugin using hook userprofile_prepare and code like this:
Code:
if ($field == 'joindate') { $this->prepare_joindate(); $jd = vbdate('Y', $this->userinfo['joindate']); $td = vbdate('Y', TIMENOW); $years = $jd - $td; $this->prepared['joindate'] .= " (Member for $years years)"; $handled = true; } Obvious you could expand that to go to months if they joined less than a year ago, etc. (BTW, look in includes/class_userprofile.php to see what's going on). |
#3
|
|||
|
|||
![]() Quote:
I actually used "year became member" as a generic example. The date in quesiton has nothing to do with how long the person has been a member on the forum. How would I do the above using a custom profile field instead of joindate? |
#4
|
|||
|
|||
![]()
OK, first of all I posted something by accident that wasn't ready, then I deleted it and realized that it had merged with my previous post, so that got deleted too. But it's OK, I think I have a better answer for you: as you said in your first post, you want to work with custom profile fields, which aren't handled the same way that the built in ones are.
So here's some code for a plugin using hook member_profileblock_profilebit: Code:
if ($profilefield['profilefieldid'] == X) { $td = intval(vbdate('Y', TIMENOW)); $joinyear = intval($this->profile->userinfo['fieldX']); if ($joinyear > 0 && $joinyear < 100) { $joinyear += ($joinyear < ($td - 2000) ? 2000 : 1900); // fix 2 digit years. } if ($joinyear > 0 && $joindate <= $td) { $profilefield['value'] .= " (Member for " . ($td - $joinyear) . " Years)"; } } The X's in red need to be replaced with the id of your year profile field. But I think they also don't need to be the same: you could probably create a text field just for holding the "Member for X years" message and have it set dynamically by ths code. In that case the first X would be the text field, and the second X the Year field. |
#5
|
|||
|
|||
![]()
kh99,
Thanks again. I actually did something VERY similar to what you have. I have a custom profile field with the title "Year Began Bowling". On the view profile page (member.php), I used the same hook you did and put this in my plugin: if ($profilefield['title'] == "Year Began Bowling") { $profilefield['title'] = "Years Bowling"; $doit = intval($profilefield['value']); if ($doit > 1900 && $doit < 2100) { $year = intval(date("Y")); $diff = $year - $doit; $profilefield['value'] = "$diff years"; } } This changes the title to "Years bowling", and then shows the number of years if they put in a year between 1900 and 2100. This custom field already existed in our system as "Years Bowling", so I let thier old values still stay just like they used to. The ONLY differences to the end user are 1) Now asks for the year when filling out the profile, and 2) Autocomputes if a valid year was entered. I only add " years" on an autocompute, so we know it was autocomputed. I'll probably modify my code to use the CORRECT fields instead of the profilefield['title'], but other than that the code is working like a charm. Thanks so much for the shove in the right direction! |
#6
|
|||
|
|||
![]()
That is pretty much the same. I guess I'm used to people wanting things written for them instead of just asking for some info.
![]() Quote:
I don't think there's anything wrong with using the title instead of the id. |
![]() |
|
|
X vBulletin 3.8.12 by vBS Debug Information | |
---|---|
|
|
![]() |
|
Template Usage:
Phrase Groups Available:
|
Included Files:
Hooks Called:
|