1

Sitecore MVC中的佔位符是否存在一些技巧,以確保它們始終可以在 頁面編輯器 體驗編輯器中選擇,即使它們不包含任何渲染?我控制器渲染宣佈在CSHTML視圖中的佔位符如下:Sitecore MVC確保在經驗編輯器中可以選擇空佔位符

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

你的意思是你有看到空的佔位符在xEditor一個問題嗎?如果是這樣,請確保您在佈局/佔位符設置中定義了佔位符。 – RvanDalen

+0

我已經爲它定義了佔位符設置項目。 –

+0

您是否以管理員身份登錄?當前設置和佔位符鍵有完全匹配,那麼你應該看到一個畫布區域。否則,我遇到過這樣的情況,它看起來不像是渲染,但它包含一個渲染,它返回0高度的HTML標記。 – RvanDalen

回答

4

爲了確保佔位符可見性和可選,您需要確保以下幾點:

  1. 一個佔位符設置項Sitecore的存在與正確的Placeholder Key與在cshtml渲染中聲明的匹配。
  2. 佔位符設置項目已檢查設置Editable設置。
  3. 頁面中的CSS不會阻止佔位符顯示。
+1

在佔位符名稱中使用大寫字符時也存在問題,不確定是否已修復此問題,我選擇全部小寫:http://sitecorepromenade.blogspot .co.uk/2014/12/sitecore-7x-mvc-and-placeholder.html – jammykam

+0

@jammykam是,除非您安裝修復程序,否則它仍然是個問題。在嘗試了其他一切之後,我們改變了案例,問題消失了。大約一個小時後,偶然發現了這個https://kb.sitecore.net/articles/296299有趣的是我正在使用Sitecore 8,它仍然存在。 – Fred

+0

@Fred哈!我沒有看到那篇文章。我一直使用全部小寫字母,只是個人偏好,所以從來沒有見過這個問題... – jammykam

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

通過設置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); 
    } 
    } 
} 
+0

這解決了這個問題。 – Jihyun

相關問題