Go Back   vb.org Archive > vBulletin 4 Discussion > vB4 Programming Discussions
FAQ Community Calendar Today's Posts Search

Reply
 
Thread Tools Display Modes
  #1  
Old 06-07-2012, 06:22 PM
Carpesimia Carpesimia is offline
 
Join Date: Jun 2011
Posts: 49
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default Dynamic custom profile field

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?
Reply With Quote
  #2  
Old 06-07-2012, 06:43 PM
kh99 kh99 is offline
 
Join Date: Aug 2009
Location: Maine
Posts: 13,185
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

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).
Reply With Quote
  #3  
Old 06-07-2012, 07:03 PM
Carpesimia Carpesimia is offline
 
Join Date: Jun 2011
Posts: 49
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by kh99 View Post
You could add it to the join date, like the age is done with the birthday.
First, thank you.

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?
Reply With Quote
  #4  
Old 06-07-2012, 07:54 PM
kh99 kh99 is offline
 
Join Date: Aug 2009
Location: Maine
Posts: 13,185
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

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.
Reply With Quote
  #5  
Old 06-07-2012, 09:24 PM
Carpesimia Carpesimia is offline
 
Join Date: Jun 2011
Posts: 49
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

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!
Reply With Quote
  #6  
Old 06-07-2012, 09:28 PM
kh99 kh99 is offline
 
Join Date: Aug 2009
Location: Maine
Posts: 13,185
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

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:
Originally Posted by Carpesimia View Post
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.

I don't think there's anything wrong with using the title instead of the id.
Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT. The time now is 09:04 PM.


Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, vBulletin Solutions Inc.
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.05971 seconds
  • Memory Usage 2,208KB
  • Queries Executed 11 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)ad_showthread_beforeqr
  • (1)ad_showthread_firstpost
  • (1)ad_showthread_firstpost_sig
  • (1)ad_showthread_firstpost_start
  • (2)bbcode_code
  • (2)bbcode_quote
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)navbar
  • (3)navbar_link
  • (120)option
  • (6)post_thanks_box
  • (6)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (6)post_thanks_postbit_info
  • (6)postbit
  • (6)postbit_onlinestatus
  • (6)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open
  • (1)tagbit_wrapper 

Phrase Groups Available:
  • global
  • inlinemod
  • postbit
  • posting
  • reputationlevel
  • showthread
Included Files:
  • ./showthread.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_post_thanks.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • showthread_start
  • showthread_getinfo
  • forumjump
  • showthread_post_start
  • showthread_query_postids
  • showthread_query
  • bbcode_fetch_tags
  • bbcode_create
  • showthread_postbit_create
  • postbit_factory
  • postbit_display_start
  • post_thanks_function_post_thanks_off_start
  • post_thanks_function_post_thanks_off_end
  • post_thanks_function_fetch_thanks_start
  • post_thanks_function_fetch_thanks_end
  • post_thanks_function_thanked_already_start
  • post_thanks_function_thanked_already_end
  • fetch_musername
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • post_thanks_function_can_thank_this_post_start
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • showthread_complete