Skip to:
Content
Pages
Categories
Search
Top
Bottom

Profile Field adds Award

  • @nickbwatson

    Participant

    I’m looking for a way that depending on what my user selects in their profile, it will display a badge, or something in their profile.

    Also, how may I access the profile fields when designing my profile. I mean, I don’t want all of the things to fall under that chart, I’d like to move a few of them into other locations.

    Thanks

Viewing 19 replies - 1 through 19 (of 19 total)
  • @nickbwatson

    Participant

    Also, how can I get it so that when I make a checkbox profile field, it displays them in a list.

    What it’s doing:

    Red [ ] Blue [ ] Green [ ] Yellow [ ]

    What I want:

    Red [ ]

    Blue [ ]

    Green [ ]

    Yellow [ ]

    @nickbwatson

    Participant

    I think people are starting to get tired of me asking questions.

    Anyway, to restate my major problem, without making a new topic altogether:

    I’ve created a profile field (checkboxes) and in that there are 4 selections. User A comes on and selects Red and Green. On his profile I’d like a Red Badge, and a Green Badge to appear on his profile.

    Is there a way I can do this?

    @boonebgorges

    Keymaster

    In [your-bp-theme-dir]/members/single/profile/profile-loop.php, you’ll see a profile loop beginning while ( bp_profile_fields() ) : bp_the_profile_field();. Inside of that profile loop you will be able to use various profile functions to test values. For instance,

    <?php if ( bp_the_profile_field_name() == 'color' ) {
    if ( bp_the_profile_field_value() == 'red' )
    echo '<img src="redbadge.png" />';
    if ( bp_the_profile_field_value() == 'green'
    echo '<img src="greenbadge.png" />';
    // etc.
    }
    ?>

    I have not tested this but it should work fine with some tweaking.

    Your issue with appearance is a CSS thing, most likely that the ul elements are set to display: inline. Try setting them to display: block.

    @nickbwatson

    Participant

    Ahh, well that looks a lot nicer when I changed the css to block.

    Thank you.

    But maybe I’m doing something wrong with the code. Or maybe I’m entering the wrong field name or field value.

    But nothing really seems to happen.

    @boonebgorges

    Keymaster

    The code that I listed will not work as is. You have to make sure that you fill in the correct filenames for images, the correct desired values for profile fields, and the correct field names. Also it looks like I messed up and forgot at least one parenthesis. That’s why I said you’d need to tweak it. It should give you an idea of which functions to use, though.

    @nickbwatson

    Participant

    Oh yeah, I changed the image, fieldnames and values, and I added the parenthesis on the end of the ‘green’ line, but it still doesn’t seem to do anything, is it because I’m using checkboxes?

    @boonebgorges

    Keymaster

    Could be. You might want to try echoing bp_the_profile_field_value() to see what’s popping out for different cases.

    @nickbwatson

    Participant

    bp_the_profile_field_value displays ALL of the values of the fields within the group, and

    bp_the_profile_field_name displays ALL of the names of the fields within the group.

    I tried what you said with the <?php if ( bp_the_profile_field_name() == ‘color’ ) {

    but that still just continues to display ALL of the fields. (And yes I changed the ‘color’ to the proper field name)

    Anyone have ideas on how to get a profile fields output to display a picture instead of the text?

    @boonebgorges

    Keymaster

    Oops, my bad. I gave you the echo functions when you need the non-echoing ones. This works, I just tested it.:

    if ( bp_get_the_profile_field_name() == 'color' ) {
    if ( bp_get_the_profile_field_value() == 'green' )
    echo '<img src="green.png" />';
    }

    @nickbwatson

    Participant

    I trust your code works, but I think I just have no idea what I’m doing.

    This is what my code looks like:

    <br />
    <?php while ( bp_profile_fields() ) : bp_the_profile_field(); ?><br />
    <?php if ( bp_get_the_profile_field_name() == 'Gender' ) {<br />
    if ( bp_get_the_profile_field_value() == 'Male' )<br />
    echo '<img src="male.jpg" alt="male" title="Male" />';<br />
    }<br />
    ?><br />
    etc etc etc<br />
    rest of the code<br />

    (I’ve tried with both lowercase and uppercase fields)

    I’m just using the Gender one to test this out, I’ve tested it with all these other ones but none of them are working.

    What am I doing wrong.

    @nickbwatson

    Participant

    By the way, I have no idea why there are all those breaks. Ignore all the breaks in the code:

    this is the real code

    <?php while ( bp_profile_fields() ) : bp_the_profile_field(); ?>
    <?php if ( bp_get_the_profile_field_name() == 'Gender' ) {
    if ( bp_get_the_profile_field_value() == 'Male' )
    echo '<img src="male.jpg" alt="male" title="Male" />';
    }
    ?>
    etc etc etc
    rest of the code

    @boonebgorges

    Keymaster

    Are you putting it inside of the default profile-loop.php file? Could you paste the whole contents of that file here or in pastebin with a link?

    @nickbwatson

    Participant

    Yeah it’s the original profile-loop.php file.

    http://pastebin.com/m607c4e2b

    Thanks for all the help.

    @boonebgorges

    Keymaster

    Thanks for pasting up that code. I think I found the issue. It has to do with the way that content returned by bp_get_the_profile_field_name has filters applied to it, namely the filters that some profile field items into links. There are a couple ways around the problem, but the easiest is to get the data before the filters hit. Thus:

    <?php if ( bp_get_the_profile_field_name() == 'Gender' ) {
    global $field;
    if ( bp_unserialize_profile_field( $field->data->value ) == "Male" )
    echo '<img src="male.jpg" alt="male" title="Male" />';
    }
    ?>

    I didn’t experience this in my test because (I think) my field data came from a textarea rather than a radio button. But the strategy I just gave you should be safe in any case.

    Hope it works!

    @nickbwatson

    Participant

    YES! Thank you very much. This has been a painful process for you I’m sure.

    Thanks!

    @nickbwatson

    Participant

    Hmm, not a huge issue.

    But how could I get this to work with.. checkboxes.

    Right now when someone selects Red, it will show up with a red picture, but if they also select green, then nothing shows up (because the value is no longer just “Red”)

    Just curious, this isn’t a huge issue

    @boonebgorges

    Keymaster

    Glad it works!

    Well, checkboxes will be a little trickier because of the possibility of multiple selections. You could try something like:

    <?php if ( bp_get_the_profile_field_name() == 'color' ) {
    global $field;
    $value = bp_unserialize_profile_field( $field->data->value );
    $value = explode( ", ", $value);
    if ( in_array( 'red', $value ) )
    echo '<img src="red.jpg" alt="red" title="red" />';
    if ( in_array( 'green', $value ) )
    echo '<img src="green.jpg" alt="green" title="green" />';
    }
    ?>

    @nickbwatson

    Participant

    You’ve been a huge help. I can’t thank you enough.

    @zoltok

    Participant

    How would something like this be adapted for the directory loop? Is it possible? I am hoping to show whether users have a particular checkbox ticked in their profile (for the same purpose, to show a “badge”).

Viewing 19 replies - 1 through 19 (of 19 total)
  • The topic ‘Profile Field adds Award’ is closed to new replies.
Skip to toolbar