gpt4 book ai didi

sitecore - 尝试在 Sitecore 子布局中使用数据源模板时出现问题;越来越空的 Sublayout.Datasource

转载 作者:行者123 更新时间:2023-12-02 00:05:54 25 4
gpt4 key购买 nike

在我们前进的过程中,我们一直在尝试“组件化”我们的 Sitecore 解决方案,以准备过渡到使用页面编辑器(哇!终于!),但实际上我们仍然主要使用可能继承的页面模板- 基于页面特定字段的组合,加上 1: 许多这些组件化模板。下面是我们解决方案中的一个示例——横幅功能轮播和特色卡通是我们正在创建的一些新组件:

Base templates showing components

为了尝试不再使用 Sitecore.Context.Item(正如我最近被 this post 提醒的那样),我已经开始在新组件的子布局上填写数据源模板字段,看起来就像我在演示细节、Sitecore 子布局和 .NET 代码文件之间建立了适当的联系(据我所知;同样,我们对这种工作方式还比较陌生)。

我还尝试根据 this post by Nick Allen 为这些组件设置基类,但这就是我遇到问题的地方:当我执行我的代码时,这个基类正在适本地找到组件 Sublayout(整个“this.Parent 作为 Sublayout”的东西)但是,当我去询问 Sublayout.Datasource属性,它是一个空字符串。这是我的这个基类的代码(到目前为止):

public class ComponentBase : System.Web.UI.UserControl
{
private Sublayout Sublayout { get { return Parent as Sublayout; } }

public Item DataSourceItem
{
get
{
return Sublayout != null && !String.IsNullOrEmpty(Sublayout.DataSource) ?
Sitecore.Context.Database.GetItem(Sublayout.DataSource) : Sitecore.Context.Item;
}
}
}

我显然遗漏了 Sitecore 子布局中的数据源模板字段与实际转换为数据源的方式之间的一些相互作用。是因为这些组件模板被用来组合Page模板了吗?我在想数据源最终只会解析为当前正在使用相关组件的页面模板,但这也许是我的误解。

如果有人能给我任何提示,让我检查或指出任何我可能用来取得进一步进展的资源,我将不胜感激。我自己已经向 Googs 询问了很多,但没有得到任何有用的信息。

预先感谢 Sitecore 的 friend 们!

最佳答案

看起来您已经按照上述步骤为您的子布局配置了允许的模板。这基本上告诉了 Sitecore; '允许用户根据这些子布局的模板选择项目'。仅此一项不会在使用子布局的项目上设置数据源。您仍然需要进入使用此子布局的任何项目的演示详细信息,选择子布局,然后设置其数据源属性(在内容编辑器中转到 Presentation > Details > [Sublayout] > Data Source) .

我的 answer to this question提供检索数据源项所需的源代码,并循环访问子布局上的 sitecore 控件,设置它们的所有 Item 属性。

代码如下:

public class SublayoutBase : UserControl
{
private Item _dataSource;

public Item DataSource
{
get
{
if (_dataSource == null)
{
if (Parent is Sublayout)
{
_dataSource =
Sitecore.Context.Database.GetItem(((Sublayout)Parent).DataSource);
}
if (_dataSource == null)
{
_dataSource = Sitecore.Context.Item;
}
}
return _dataSource;
}
}

protected override void OnLoad(EventArgs e)
{
foreach (Control c in Controls)
{
SetFieldRenderers(DataSource, c);
}
base.OnLoad(e);
}

private void SetFieldRenderers(Item item, Control control)
{
if (item != null)
{
var ctrl = control as Sitecore.Web.UI.WebControl;
if (ctrl != null && !string.IsNullOrEmpty(ctrl.DataSource))
{
//don't set the source item if the DataSource has already been set.
return;
}
if (control is FieldRenderer)
{
var fr = (FieldRenderer)control;
fr.Item = item;
}
else if (control is Image)
{
var img = (Image)control;
img.Item = item;
}
else if (control is Link)
{
var link = (Link)control;
link.Item = item;
}
else if (control is Text)
{
var text = (Text)control;
text.Item = item;
}
else
{
foreach (Control childControl in control.Controls)
{
SetFieldRenderers(item, childControl);
}
}
}
}
}

关于sitecore - 尝试在 Sitecore 子布局中使用数据源模板时出现问题;越来越空的 Sublayout.Datasource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18409476/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com