2

我正在使用 Kentico 7.0,电子商务版本。

我想创建一个侧边栏菜单,显示 eshop 最畅销的产品类别。我是一名 kentico 新手,所以我正在四处寻找正确的术语/指导,以便我可以更深入地挖掘。

我认为理想的方法是能够在类别上添加一个字段,用于过滤菜单的类别。通过这种方式,我可以拥有某种根据销售额自动更新字段的工作,或者为管理员提供手动覆盖以指定一个类别是否会显示在菜单上。当然,还需要某种权重来指定菜单项排序。

我应该朝哪个方向看?

4

2 回答 2

1

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();

}

手写的,所以可能有一两个错字:)

高温高压

于 2013-04-08T05:50:25.650 回答
1

您是否尝试过使用可用的“按销售额排名前 N 的产品”Web 部件?您可以配置它应该从内容树(产品)的哪个部分提取数据 - 在 Path 属性中,您还可以使用动态解析的路径表达式或宏,以便 Web 部件可以在不同部分显示不同的产品。

于 2013-01-16T17:19:44.497 回答