Sitecore MVC确保在体验编辑器中可以选择空占位符

时间:2015-09-17 09:10:55

标签: sitecore sitecore8 sitecore-mvc page-editor experience-editor

Sitecore MVC中是否有一些占位符可以确保它们始终可以在页面编辑器体验编辑器中选择,即使它们不包含任何渲染图?我的控制器渲染在cshtml视图中声明占位符,如下所示:

<div>
  <!-- some html markup and fields rendered here --> 
  @Html.Sitecore().Placeholder("my-component-placeholder")
</div>

3 个答案:

答案 0 :(得分:6)

为确保占位符可见性和可选择性,您需要确保以下内容:

  1. Sitecore中存在占位符设置项,其中包含在cshtml呈现中声明的正确Placeholder Key匹配。
  2. 占位符设置项已选中Editable设置。
  3. 页面中的CSS不会阻止占位符显示。

答案 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);
    }
  }
}