Sitecore MVC 中的占位符是否有一些技巧可以确保在页面编辑器体验编辑器中始终可以选择它们,即使它们不包含任何渲染?我的控制器渲染在 cshtml 视图中声明了占位符,如下所示:
<div>
<!-- some html markup and fields rendered here -->
@Html.Sitecore().Placeholder("my-component-placeholder")
</div>
Sitecore MVC 中的占位符是否有一些技巧可以确保在页面编辑器体验编辑器中始终可以选择它们,即使它们不包含任何渲染?我的控制器渲染在 cshtml 视图中声明了占位符,如下所示:
<div>
<!-- some html markup and fields rendered here -->
@Html.Sitecore().Placeholder("my-component-placeholder")
</div>
为确保占位符的可见性和可选择性,您需要确保以下内容:
Placeholder Key
cshtml 渲染中声明的正确匹配。Editable
检查设置。如果您使用某种动态占位符键,则有一个设置可以控制没有设置的空占位符是否可编辑。它位于Sitecore.ExperienceEditor.config中。
WebEdit.PlaceholdersEditableWithoutSettings
默认值为假。如果设置为 true,则可以编辑空占位符:
<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
<sitecore>
<settings>
<setting name="WebEdit.PlaceholdersEditableWithoutSettings">
<patch:attribute name="value">true</patch:attribute>
</setting>
</settings>
</sitecore>
</configuration>
通过设置 Query.MaxItems 解决:
<setting name="Query.MaxItems">
<patch:attribute name="value">1000</patch:attribute>
</setting>
说明:
在大型项目中,您可能有很多占位符(Sitecore Query API 一次读取的默认项目数量超过 260 个)。
Sitecore 团队设置了限制,但占位符缓存没有固定,并且仍然只读取一次项目,因此由于限制而未添加到缓存中的占位符被跳过。
这是从反射器中获取的缓存管理器的代码:
public virtual void Reload()
{
lock (FieldRelatedItemCache.Lock)
{
this.itemIDs = new SafeDictionary<string, ID>();
Item[] local_1 = this.Database.SelectItems(string.Format("{0}//*[@@templateid = '{1}']", (object) this.ItemRoot.Paths.FullPath, (object) this.ItemTemplate));
if (local_1 == null)
return;
foreach (Item item_0 in local_1)
{
string local_3 = item_0[this.FieldKey];
if (!string.IsNullOrEmpty(local_3) && !this.itemIDs.ContainsKey(this.GetCacheKey(local_3)))
this.Add(local_3, item_0);
}
}
}