我正在使用 Kentico 7.0,电子商务版本。
我想创建一个侧边栏菜单,显示 eshop 最畅销的产品类别。我是一名 kentico 新手,所以我正在四处寻找正确的术语/指导,以便我可以更深入地挖掘。
我认为理想的方法是能够在类别上添加一个字段,用于过滤菜单的类别。通过这种方式,我可以拥有某种根据销售额自动更新字段的工作,或者为管理员提供手动覆盖以指定一个类别是否会显示在菜单上。当然,还需要某种权重来指定菜单项排序。
我应该朝哪个方向看?
我正在使用 Kentico 7.0,电子商务版本。
我想创建一个侧边栏菜单,显示 eshop 最畅销的产品类别。我是一名 kentico 新手,所以我正在四处寻找正确的术语/指导,以便我可以更深入地挖掘。
我认为理想的方法是能够在类别上添加一个字段,用于过滤菜单的类别。通过这种方式,我可以拥有某种根据销售额自动更新字段的工作,或者为管理员提供手动覆盖以指定一个类别是否会显示在菜单上。当然,还需要某种权重来指定菜单项排序。
我应该朝哪个方向看?
Kentico 有多种编码方式。我个人觉得 API 有点笨拙,在很多情况下,我很惊讶不存在需要额外调用才能获得所需结果的方法。在将数据放入 Kentico 时,我确实更多地使用 Kentico API。将其拉出我使用以下内容。
存储过程
编写一个 SQL 存储过程来获取前 X 个类别 - GetTop5Categories。
查看 COM_* 表,特别是 COM_OrderItem,将 OrderItemSKUID 链接回 COM_SKU(或 View_COM_SKU_Joined,如果您需要访问 IA)。
这将为您提供最畅销的产品,其中包含 group by、count、top X 和 order by。
然后,您可以链接到其他表格,例如 CMS_Category 或 CMS_Document(取决于您如何设置类别)。这样做的好处是编译过程,您在那里进行所有数据操作(这是 MSSQL 擅长的!)并且您只在结果集中发回您需要的内容。
DOMAIN(利用 EF)
我通常创建一个单独的类库项目 myproject.domain 并将一个实体框架 edmx 放在那里映射回 Kentico DB。将 proc 添加到 EDMX,然后从新导入的 proc 创建一个 Function Import MyProject_GetTop5Categories。
网络
从您的 Web 项目中添加对域项目的引用,并在控件的代码隐藏顶部添加一个“使用”。
使用 myproject.domain;
然后在 Page_Load 中为控件:
...
if(!IsPostBack)
{
var entities = new MyProjectModelContainer();
var list = entities.MyProject_GetTop5Categories().ToList();
StringBuilder sb = new StringBuilder("<ul>");
foreach(var category in list)
{
sb.Append("<li><a href='"+category.Link+"'>" + category.Name + "</a></li>");
}
sb.Append("<ul>");
listPlaceHolder = sb.ToString();
}
手写的,所以可能有一两个错字:)
高温高压
您是否尝试过使用可用的“按销售额排名前 N 的产品”Web 部件?您可以配置它应该从内容树(产品)的哪个部分提取数据 - 在 Path 属性中,您还可以使用动态解析的路径表达式或宏,以便 Web 部件可以在不同部分显示不同的产品。