我们的要求要求我们将页面模块存储在 Modules 文件夹中的页面项下。在模块的渲染中,我将数据源位置设置为 ./Modules。我的模块结构页面如下所示。
页 | --- 模块(文件夹) | --- 模块 1 --- 模块 2 --- 模块 3
当通过页面编辑器将模块添加到页面时,数据源位置是正常路径而不是其中的 ./,应出现选择关联内容框。数据源位置为“./”时不会出现。
有没有办法强制“选择相关内容”自动显示?我也不希望用户看到“组件属性”窗口。
谢谢
我们的要求要求我们将页面模块存储在 Modules 文件夹中的页面项下。在模块的渲染中,我将数据源位置设置为 ./Modules。我的模块结构页面如下所示。
页 | --- 模块(文件夹) | --- 模块 1 --- 模块 2 --- 模块 3
当通过页面编辑器将模块添加到页面时,数据源位置是正常路径而不是其中的 ./,应出现选择关联内容框。数据源位置为“./”时不会出现。
有没有办法强制“选择相关内容”自动显示?我也不希望用户看到“组件属性”窗口。
谢谢
确保您尝试的路径确实存在。当对话框没有出现是因为没有有效的数据源位置。
数据源位置字段接受路径或 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);
}
}
}
}
干杯