I would like to show the number of products after name of the attribute option (SpecificationAttributeOptionName).
e.g.:
Color
- Red (29)
- Green (199)
- Blue (2)
I'm using version 1.6.
Thanks.
protected void rptFilterByPSO_OnItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
var row = e.Item.DataItem as SpecificationAttributeOptionFilter;
int totalRecords = 0;
List<int> psoFilterOption = new List<int>();
psoFilterOption.Add(row.SpecificationAttributeOptionId);
var productCollection = ProductManager.GetAllProducts(this.CategoryId,
0, 0, false, 0, 9999,
string.Empty, false, 999, 0, psoFilterOption, ProductSortingEnum.Name, out totalRecords);
var lnkFilter = e.Item.FindControl("lnkFilter") as HyperLink;
if (lnkFilter != null)
{
string name = row.SpecificationAttributeName.Replace(" ", "");
string url = CommonHelper.ModifyQueryString(CommonHelper.GetThisPageUrl(true), name + "=" + row.SpecificationAttributeOptionId, null);
url = excludeQueryStringParams(url);
lnkFilter.NavigateUrl = url;
lnkFilter.Text = row.SpecificationAttributeOptionName + " (" + totalRecords.ToString() + ")";
}
}
}
/// <summary>
/// Gets number of products by categoryID and attributeoptionId
/// </summary>
/// <param name="categoryId">Category identifier</param>
/// <param name="specificationAttributeOptionID">attribute identifier</param>
/// <returns>Number of products</returns>
public override int GetNumberOfProductsByCategoryAndAttribute(int categoryID,
int specificationAttributeOptionID)
{
var result = 0;
Database db = NopSqlDataHelper.CreateConnection(_sqlConnectionString);
var sql = " select count(*) " +
" from nop_product p " +
" LEFT OUTER JOIN Nop_Product_Category_Mapping pcm on p.productID=pcm.productID " +
" LEFT OUTER JOIN Nop_Product_SpecificationAttribute_Mapping psam on p.productID=psam.productID " +
" where pcm.categoryId=@categoryID and psam.SpecificationAttributeOptionID=@specificationAttributeOptionID ";
DbCommand dbCommand = db.GetSqlStringCommand(sql);
db.AddInParameter(dbCommand, "categoryID", DbType.Int32, categoryID);
db.AddInParameter(dbCommand, "specificationAttributeOptionID", DbType.Int32, specificationAttributeOptionID);
result = (int)db.ExecuteScalar(dbCommand);
return result;
}
/// <summary>
/// Gets number of products by categoryID and attributeoptionId
/// </summary>
/// <param name="categoryId">Category identifier</param>
/// <param name="specificationAttributeOptionID">attribute identifier</param>
public abstract int GetNumberOfProductsByCategoryAndAttribute(int categoryID, int specificationAttributeOptionID);
#endregion
/// <summary>
/// Gets number of products by categoryID and attributeoptionId
/// </summary>
/// <param name="categoryId">Category identifier</param>
/// <param name="specificationAttributeOptionID">attribute identifier</param>
/// <returns>number of products for category and attribute</returns>
public static int GetNumberOfProductsByCategoryAndAttribute(int categoryID, int attributeOptionId)
{
return (int)DBProviderManager<DBProductProvider>.Provider.GetNumberOfProductsByCategoryAndAttribute(categoryID, attributeOptionId);
}
#endregion
protected void rptFilterByPSO_OnItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
var row = e.Item.DataItem as SpecificationAttributeOptionFilter;
int totalRecords = 0;
totalRecords = ProductManager.GetNumberOfProductsByCategoryAndAttribute(this.CategoryId, row.SpecificationAttributeOptionId);
var lnkFilter = e.Item.FindControl("lnkFilter") as HyperLink;
if (lnkFilter != null)
{
string name = row.SpecificationAttributeName.Replace(" ", "");
string url = CommonHelper.ModifyQueryString(CommonHelper.GetThisPageUrl(true), name + "=" + row.SpecificationAttributeOptionId, null);
url = excludeQueryStringParams(url);
lnkFilter.NavigateUrl = url;
lnkFilter.Text = row.SpecificationAttributeOptionName + " (" + totalRecords.ToString() + ")";
}
}
}
/// <summary>
/// Gets number of products by categoryID and attributeoptionId
/// </summary>
/// <param name="categoryId">Category identifier</param>
/// <param name="specificationAttributeOptionID">attribute identifier</param>
/// <returns>Number of products</returns>
public override int GetNumberOfProductsByCategoryAndAttribute(int categoryID,
int specificationAttributeOptionID)
{
var result = 0;
Database db = NopSqlDataHelper.CreateConnection(_sqlConnectionString);
var sql = " select count(*) " +
" from nop_product p " +
" LEFT OUTER JOIN Nop_Product_Category_Mapping pcm on p.productID=pcm.productID " +
" LEFT OUTER JOIN Nop_Product_SpecificationAttribute_Mapping psam on p.productID=psam.productID " +
" where pcm.categoryId=@categoryID and psam.SpecificationAttributeOptionID=@specificationAttributeOptionID ";
DbCommand dbCommand = db.GetSqlStringCommand(sql);
db.AddInParameter(dbCommand, "categoryID", DbType.Int32, categoryID);
db.AddInParameter(dbCommand, "specificationAttributeOptionID", DbType.Int32, specificationAttributeOptionID);
result = (int)db.ExecuteScalar(dbCommand);
return result;
}
select count(distinct p.productID)
....