Sitecore MVC中是否有一些占位符可以确保它们始终可以在页面编辑器体验编辑器中选择,即使它们不包含任何渲染图?我的控制器渲染在cshtml视图中声明占位符,如下所示:
<div>
<!-- some html markup and fields rendered here -->
@Html.Sitecore().Placeholder("my-component-placeholder")
</div>
答案 0 :(得分:6)
为确保占位符可见性和可选择性,您需要确保以下内容:
Placeholder Key
匹配。Editable
设置。答案 1 :(得分:2)
如果您使用某种动态占位符键,则有一个设置可控制是否可以编辑没有设置的空占位符。它位于 Sitecore.ExperienceEditor.config 。
中WebEdit.PlaceholdersEditableWithoutSettings
默认值为false。如果设置为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>
答案 2 :(得分:2)
通过设置Query.MaxItems:
解决<setting name="Query.MaxItems">
<patch:attribute name="value">1000</patch:attribute>
</setting>
说明:
在大型项目中,您可能拥有大量占位符(超过260个是Sitecore Query API一次读取的默认项目数)。
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);
}
}
}