Hi everyone,
Is there a way to display the Name instead of the value of a ProductField?
I can only find GetProductFieldValue(Product, string) as function in the documentation
Thanks in advance,
Alex
Hi everyone,
Is there a way to display the Name instead of the value of a ProductField?
I can only find GetProductFieldValue(Product, string) as function in the documentation
Thanks in advance,
Alex
Hi Alex
Yes, you can do that. I believe you are in a tempalte and try to show the name of the selected options instead of the value?
@inherits ViewModelTemplate<ProductViewModel>
@using Dynamicweb.Rendering
@using Dynamicweb.Ecommerce.ProductCatalog
@{
//Iterate through the field display groups and their fields
foreach (var displayGroup in Model.FieldDisplayGroups)
{
<h3 id="@displayGroup.Value.Id">@displayGroup.Value.Name</h3>
//Iterate the fields of the display group
foreach (var field in displayGroup.Value.Fields)
{
<b>@field.Value.Name:</b>
//Check if the field is a list of options and display the name of the selected options and not the value
if (field.Value.Value is List<FieldOptionValueViewModel> listValues)
{
//Iterate each selected option and display the name with the value in a html attribute
foreach (var fieldOptionValue in listValues)
{
<div data-field-value="@fieldOptionValue.Value">@fieldOptionValue.Name</div>
}
}
else
{
//otherwise display the value
<div>@field.Value.Value</div>
}
}
}
}
@{
//Iterate through the field display groups and their fields
foreach (var displayGroup in Model.GetProductDisplayGroupFieldsByGroupSystemNames(["someDisplayGroup"]))
{
<h3 id="@displayGroup.SystemName">@displayGroup.Name</h3>
//Iterate the fields of the display group
foreach (var field in displayGroup.Fields)
{
<b>@field.Name:</b>
//Check if the field is a list of options and display the name of the selected options and not the value
if (field.Value is List<FieldOptionValueViewModel> listValues)
{
//Iterate each selected option and display the name with the value in a html attribute
foreach (var fieldOptionValue in listValues)
{
<div data-field-value="@fieldOptionValue.Value">@fieldOptionValue.Name</div>
}
}
else
{
//otherwise display the value
<div>@field.Value</div>
}
}
}
}
Hey,
I managed to display the value using the FieldId like this:
public string GetUnitName(string productNumber)
{
var fieldSystemName = "Unit";
var productObject = Dynamicweb.Ecommerce.Services.Products.GetProductByNumber(productNumber, Dynamicweb.Ecommerce.Common.Context.LanguageID);
if (productObject == null)
{
return "";
}
var productField = ProductField.GetById("FIELD32");
var fieldValue = Dynamicweb.Ecommerce.Services.Products.GetProductFieldValue(productObject, fieldSystemName) as string;
var fieldOption = productField.GetFieldOptions()?.FirstOrDefault(option => option.Value.Equals(fieldValue, StringComparison.OrdinalIgnoreCase));
var optionName = fieldOption.GetName(Dynamicweb.Ecommerce.Common.Context.LanguageID);
return !string.IsNullOrEmpty(optionName) ? optionName : "";
}
Now I’m trying to display other custom global fields for another project,
but my previous solution doesn’t work in this case, so I tried your approach instead:
public string GetCustomFieldValue(string productNumber, string fieldSystemName, string productFieldId)
{
var productObject = Dynamicweb.Ecommerce.Services.Products.GetProductByNumber(productNumber, Dynamicweb.Ecommerce.Common.Context.LanguageID);
if (productObject == null)
{
return "";
}
object fieldValue = Dynamicweb.Ecommerce.Services.Products.GetProductFieldValue(productObject, fieldSystemName);
if (fieldValue == null)
{
return "";
}
return fieldValue.ToString() ?? "";
}
public string GetUnitsBox(string productNumber)
{
return GetCustomFieldValue(productNumber, "UnitsBox", "FIELD133");
}
public string GetUnitsPallet(string productNumber)
{
return GetCustomFieldValue(productNumber, "UnitsPallet", "FIELD134");
}
However, this always returns 0.
They do have higher values in the backend though.
Any idea why this might be happening?
Am I using this wrong?
Thanks in advance for the help!
You must be logged in to post in the forum