【问题标题】:Dealing with generated pages in Composite C1在 Composite C1 中处理生成的页面
【发布时间】:2012-01-07 11:31:30
【问题描述】:

在我目前尝试迁移到 Composite 的 ASP.Net 项目中,我无法处理非物理页面。

为了简单起见,假设我有一个网上商店,并且数据库中的每个类别都有自己的 url。 (例如:/myshop/clothes)

在 ASP.NET 项目中,这样的 url 将被路由到页面 Category.aspx,该页面处理请求并从数据库中读取类别内容。

Composite 似乎更专注于“真实”页面,实现这样的事情的最佳方式是什么? (尤其是路由)

还有:有没有办法让这些生成的页面与 Navigation.Path 等模块一起使用?

【问题讨论】:

    标签: c# asp.net routes c1-cms


    【解决方案1】:

    对于菜单生成和面包屑,您需要自己处理,最终使用SiteMapProvider 上的SiteMap.Resolve 事件动态挂钩您的“不存在”页面。

    关于路由,C1 中有一个功能,可以将 url 解析为第一个“真实页面”并将多余的 url 部分交给你可以使用。假设 /myshop 是您的商店页面,并且用户请求 /myshop/clothes,那么它将仍然是 /myshow 将被执行,并且您将在那里放置处理您的类别的代码。

    在“myshop”页面上提取“clothes”的代码是Composite.Core.Routing.Pages.C1PageRoute.GetPathInfo(),并指示 C1 不要抛出 404 错误,调用 Composite.Core.Routing.Pages.C1PageRoute.RegisterPathInfoUsage(),让 C1 知道“clothes”是有效的类别。

    阅读更多关于它的 API here

    如果您需要处理选择类别时的不同情况,并且当用户直接点击 /myshop 时,您可以将 MyShop 页面设置为使用特定模板,并在其中包装 <rendering:contentplaceholder> 元素在具有某种 else-if 逻辑的函数中。如果没有选择类别,则打印出<rendering:contentplaceholder>的内容,否则根据类别进行查找,打印出其他内容。

    【讨论】:

    • 如果 /myshop 页面上有内容怎么办?如何最好地隐藏“标准”内容?我可以将它放在一个控件中,但是我无法通过 Composite 后端对其进行编辑。
    • 让你的shop-page使用一个特定的模板,将页面的内容包装在一个if-else函数中,所以如果没有设置category,你只打印正常的内容,如果category是设置,你用它做点什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-23
    • 2011-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多