我需要更改产品项目的图像字段来源,具体取决于我在内容或页面编辑器中创建项目时创建产品项目的文件夹路径。
如果我在/home/bicycles
下创建产品,我需要将产品图片字段自动更改为/sitecore/media library/Images/bicycles
如果我在/home/cars
下创建产品,我需要将产品图片字段自动更改为/sitecore/media library/Images/cars
如果我在/home/scooters
下创建产品,我需要将产品图片字段自动更改为/sitecore/media library/Images/scooters
datatemplate中该图像字段来源的默认设置为/sitecore/media library/Images/bicycles
我该怎么做呢?
答案 0 :(得分:1)
一个选项是创建扩展默认图像字段类型的自定义内容编辑器字段。
首先创建一个继承自Sitecore.Shell.Applications.ContentEditor.Image
的类。然后覆盖OnPreRender
方法,根据您的位置条件/要求确定并设置图片字段的Source
属性。
有关详细信息,请参阅以下代码中的注释。
public class ContextAwareImageField : Sitecore.Shell.Applications.ContentEditor.Image
{
/// <summary>
/// The ItemID proprety is set by the Content Editor via reflection
/// </summary>
public string ItemID { get; set; }
/// <summary>
/// Override the OnPreRender method.
/// The base OnPreRender method assigns a value to the Source viewstate property and we need to overwrite it.
/// </summary>
/// <param name="e"></param>
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
Source = GetSource();
}
protected virtual string GetSource()
{
//retrieve and return the computed source value if it has already been set
var contextSource = GetViewStateString("ContextSource");
if (!string.IsNullOrWhiteSpace(contextSource))
return contextSource;
//retrieve the context item (the item containing the image field)
var contextItem = Sitecore.Context.ContentDatabase.GetItem(ItemID);
if (contextItem == null)
return string.Empty;
//determine the source to be used by the media browser
//in this case we're just checking based on parent path, but any logic could be inserted
contextSource = "/sitecore/media library/Images";
switch (contextItem.Parent.Paths.FullPath.ToLowerInvariant())
{
case "/sitecore/content/home/bicycles":
contextSource = "/sitecore/media library/Images/Bicycles";
break;
case "/sitecore/content/home/cars":
contextSource = "/sitecore/media library/Images/Cars";
break;
case "/sitecore/content/home/scooters":
contextSource = "/sitecore/media library/Images/Scooters";
break;
}
//store the computed source value in view bag for later retrieval
SetViewStateString("ContextSource", contextSource);
//return the computed source value
return contextSource;
}
}
接下来,执行以下步骤:
使用管理员权限登录Sitecore桌面,并使用右下角的数据库图标切换到 Core 数据库。
在核心数据库中,打开内容编辑器,然后导航至/sitecore/system/Field Types/Simple Types
。在那里,您会找到一个代表图片字段类型的项目。
复制图片字段类型项,并将重复项重命名为相关内容(例如上下文感知图像)。
编辑重复的项目
MyClient.MySite.dll
)MyClient.MySite.CustomFields.ContextAwareImageField
)删除控制字段
保存更改
切换回 Master 数据库。
打开内容编辑器,然后导航到应包含新图片字段的模板。
在模板中创建新字段,然后在类型下拉列表中选择新的自定义字段类型。或者,更改现有图片字段的类型。
保存模板更改。
在内容树中,根据上面的模板导航到某个项目,然后单击所包含图像字段的浏览按钮。媒体浏览器对话框应默认为自定义字段中逻辑指定的源位置。