Откройте Выбрать связанный контент в редакторе страниц Sitecore
Наши требования требуют от нас хранения модулей страницы под элементами страницы в папке "Модули". В рендерингах для модулей я установил расположение источника данных как./Modules. Моя страница со структурой модулей показана ниже.
страница | --- Модули (папка) | --- модуль 1 --- модуль 2 --- модуль 3
Когда модуль добавляется на страницу с помощью редактора страниц, а расположение источника данных является обычным путем, а не./, в нем должно появиться поле "Выбрать связанный контент". Он не отображается, если в качестве источника данных указано "./".
Есть ли способ заставить "Выбрать связанный контент" автоматически отображаться? Я также не хочу, чтобы пользователь видел окно Свойства компонента.
Спасибо
1 ответ
Убедитесь, что путь, который вы пытаетесь, действительно существует. Когда диалоговое окно не появляется, это потому, что нет действительного расположения источника данных.
Поле Datasource Location принимает путь или запросы Sitecore. Вы также можете использовать несколько источников данных, разделяющих запросы с конвейером.
Это все действительные значения для Ds Location.
/sitecore/content/Components/Rich Text
./modules
./ancestor-or-self::*/child::*[@@templatename='Modules']
/sitecore/content/Components/Rich Text|./modules
Кроме того, для улучшения поиска в Google этот вид подслоя с источниками данных, редактируемыми в редакторе страниц, называется Компоненты.
,
ОБНОВИТЬ:
Есть этот процессор в 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);
}
}
}
}
ура