我们的要求要求我们将页面模块下的页面模块存储在Modules文件夹中。在模块的渲染中,我将数据源位置设置为./Modules。我的模块结构页面如下所示。
页 | ---模块(文件夹) | ---模块1 ---模块2 ---模块3
当通过页面编辑器将模块添加到页面,并且数据源位置是正常路径而不是其中的./时,应显示“选择关联内容”框。当数据源位置为' ./'时,它不会出现。
有没有办法强制选择相关内容'自动显示?我不希望用户也看到“组件属性”窗口。
由于
答案 0 :(得分:0)
确保您尝试的路径确实存在。没有出现对话框是因为没有有效的数据源位置。
字段数据源位置接受路径或Sitecore查询。您还可以使用多个数据源将查询与管道分开。
这些都是Ds位置的有效值。
/sitecore/content/Components/Rich Text
./modules
./ancestor-or-self::*/child::*[@@templatename='Modules']
/sitecore/content/Components/Rich Text|./modules
此外,为了改善您的谷歌搜索,这种在网页编辑器中可编辑数据源的子布局称为组件
<强>更新强>
getRenderingDatasource
管道中有这个处理器。
<processor type="Sitecore.Pipelines.GetRenderingDatasource.GetDatasourceLocation, Sitecore.Kernel" />
您可能希望去那里用可以调试的自定义类替换它,然后检查get item()。
只有当程序到达行args.DatasourceRoots.Add(item);
时,它才会显示对话框。
这是Sitecore的原始课程。
using Sitecore.Data;
using Sitecore.Data.Items;
using Sitecore.Diagnostics;
using Sitecore.Text;
using System;
using System.Collections.Generic;
namespace Sitecore.Pipelines.GetRenderingDatasource
{
/// <summary>
/// Defines the datasource location root item
/// </summary>
public class GetDatasourceLocation
{
public GetDatasourceLocation()
{
}
/// <summary>
/// Runs the processor.
/// </summary>
/// <param name="args">The arguments.</param>
public void Process(GetRenderingDatasourceArgs args)
{
Assert.IsNotNull(args, "args");
foreach (string str in new ListString(args.RenderingItem["Datasource Location"]))
{
string str1 = str;
if (str.StartsWith("./", StringComparison.InvariantCulture) && !string.IsNullOrEmpty(args.ContextItemPath))
{
str1 = string.Concat(args.ContextItemPath, str.Remove(0, 1));
}
Item item = args.ContentDatabase.GetItem(str1);
if (item == null)
{
continue;
}
args.DatasourceRoots.Add(item);
}
}
}
}
干杯