In this blog post I will show you how you could display additional user information in a Sitefinity forum post. This user information should be available as a custom field in the users’ profile.
Prerequisites:
Created custom field in the users’ profile (for example: JobPosition)
Code explanation:
1. We need to create a class for our custom field and inherit from Literal:
public class CustomField : Literal{ // we will implement our logic here}2. Define the necessary variables and properties for post owner and custom field value.
private string ownerId = null; private string myField = null; public string OwnerId { get{ return ownerId;} set{ ownerId = value;} } public string MyField { get{ return myField;} set{ myField = value;} }3. Extend the CreateChildControl method of Literal to get the post owner and the field value by overriding the standard ones:
protected override void CreateChildControls() { // get the current identity var identity = ClaimsManager.GetCurrentIdentity(); // get information about the user from the properties of the ClaimsIdentityProxy object var userId = identity.UserId; // Get user and profile Manager UserProfileManager profileManager = UserProfileManager.GetManager(); UserManager userManager = UserManager.GetManager(); // Get current user User user = userManager.GetUser(userId); // Get the current user’s profile SitefinityProfile profile = null; if (user != null) { profile = profileManager.GetUserProfile<SitefinityProfile>(user); } // Get the value we are interested to var mySearchedField = profile.GetValue(myField).ToString(); // This text will be displayed when we call the property. Text = mySearchedField; // Call the base method base.CreateChildControls(); }4. Add the create .cs file in the root project directory (in case of a custom folder, you need to update the respective references)
5. Build the project
6. Create a copy of your post widget
7. Register the new control by adding this code at the Register section of the post widget (or create a new post widget based on the built-in one, in order to have both versions):
<%@ Register TagPrefix=" myTagPrefix " Namespace="SitefinityWebApp" Assembly="SitefinityWebApp" %>8. Add the following markup where you need your custom field:
<myTagPrefix:CustomField Text='<%# Eval("Content") %>' OwnerId='<%# Eval("Owner")%>' MyField='JobPosition' runat="server" />This example works for a different number of fields in the profile, just replace the 'JobPosition' with the desired one.
You could download the complete code example of CustomField.
Svetoslav Manchev
Svetoslav Manchev is a Technical Support Officer at Telerik since 2013.