0

我想改写一下情况:我有两个数据模板,一个用于带有标签的产品,第二个用于带有/不带标签的文章,分别使用产品和文章数据模板。考虑到选项卡特征数据模板将作用于全局,它可以在任何时间点插入任何数据模板。

现在的情况是,我将标签功能与产品相关联,但没有与文章相关联,因此结果应该是在产品页面上我应该查看标签功能,而在文章标签上不应该可见。

问题仍然存在:我将如何检查我插入了标签功能的页面?另外如何找到我当前所在的当前上下文页面的 ItemID?

4

3 回答 3

2

尝试使用下面的代码。它将为您提供上下文中使用的当前 Sitecore 项目。

Sitecore.Context.Item
于 2012-10-08T13:54:34.307 回答
1

如果您已经为内容项分配了不同的数据模板,那么您可以使用如下代码检查项目所基于的数据模板:(这样做可能比仅检查 ItemId 更好)

        Sitecore.Data.Items.Item current = Sitecore.Context.Item;
        if (current.TemplateName.Equals("products", StringComparison.OrdinalIgnoreCase) == 0)
        {
            // your logic for products items
        }
        else
        {
            // your logic for services items
        }

但是,如果您只想要 ItemId,您可以使用如下代码:

        Sitecore.Data.Items.Item current = Sitecore.Context.Item;
        Sitecore.Data.ID myID = current.ID;

希望有帮助。

于 2012-10-09T08:31:00.647 回答
1

有几种情况发生在我身上,不确定哪一种是你的:

1. 当前项目是唯一项目

如果您正在执行诸如显示产品或服务项目的完整详细信息的详细信息页面之类的操作,Sitecore.Context.Item 调用将为您获取上下文中的当前项目,在大多数情况下基于 URL 中的当前项目路径(有一些方法可以改变上下文,但现在让我们忽略那些边缘情况)。然后,您可以像其他任何时候一样绑定字段或提取值。

2.绑定到项目列表

如果您正在执行类似于“事物”列表的操作(即绑定到可能是产品或服务的项目列表的 .NET 转发器)并希望使用用户控件显示每个项目。几个选项:

  1. 向您的控件添加一个属性(类似于“DataSource”),并在您的子布局中的转发器数据绑定期间设置用户控件数据源属性(或在转发器标记中这样做)
  2. 在子布局中的转发器数据绑定期间从项目中提取所需的属性,并将其传递给用户控件上的不同属性。

3. 数据源驱动

如果您正在运行配置为具有数据源的子布局,则不能使用上下文项,因为它将引用绑定到正在显示的“页面”的项,而不是您正在处理的特定组件。在这种情况下,您需要如下代码来从当前子布局中提取数据源:

var dataSourceId = ((Sitecore.Web.UI.WebControl)Parent).DataSource;

(注意:您可能希望对上述代码进行一些错误处理,以防止空引用错误)

于 2012-10-09T13:09:57.460 回答