2015-12-25 22 views
5

Bir tarih için özel bir biçim kullanmam gerekiyor (ör. dddd dd MMMM yyyy). Bu formatı Sitecore().Field()'a geçirmek mümkün mü? Böyle bir şey yapmak istiyorum:Sitecore Kullanarak Sitecore Tarihini Biçimlendirme(). Alan()?

@Html.Sitecore().Field("Day1", new { @format="dddd dd MMMM yyyy"})

Ancak, bazı Googling sonra, ben de yapmak için özel bir alan yardımcı veya özel bir model oluşturmak zorunda olduğunu gördük. Base Sitecore kullanarak bunu yapmak için gerçekten bir yolu yok mu? Değeri düzenleyebilmek için içerik editörüne ihtiyacım olduğu için, bu işlemin Sitecore().Field() aracılığıyla yapılması önemlidir.

Bildiğim kadarıyla Sitecore kutudan çıktığı böyle bir özelliğe sahip olmadığını biliyoruz Biz

+3

çünkü bu benim için iyi çalışıyor SXP8.2 @ Html.Sitecore(). Alan ("Başlangıç ​​Tarihi", yeni {format = "dd MMMM yyyy"}) – Zooking

+0

Bu bir seçenek olmak Sitecore geliştirici e-öğrenme katılıyor hatırlıyorum. Modül 4 yanlış değilse. Kurs, Sitecore 8'dir. –

cevap

4

Sitecore 7.5 konum. Bu işlevsellik için bir yardımcı kullanabilirsiniz, lütfen aşağıdaki kodu kontrol edin. Bu kodu kullandım ve iyi çalışıyor. Alan, Sitecore boru hatları aracılığıyla düzenlendiğinden, tarih alanını sayfa düzenleyiciden de düzenleyebilirsiniz. senin cshtml olarak

public static class Helper 
{ 

    public static HtmlString RenderField(
     this SC.Mvc.Helpers.SitecoreHelper sitecoreHelper, 
     string fieldNameOrId, 
     bool disableWebEdit = false, 
     SC.Collections.SafeDictionary<string> parameters = null) 
    { 
     if (parameters == null) 
     { 
      parameters = new SC.Collections.SafeDictionary<string>(); 
     } 

     return sitecoreHelper.Field(
      fieldNameOrId, 
      new 
      { 
       DisableWebEdit = disableWebEdit, 
       Parameters = parameters 
      }); 
    } 

    public static HtmlString RenderField(
     this SC.Mvc.Helpers.SitecoreHelper sitecoreHelper, 
     SC.Data.ID fieldId, 
     bool disableWebEdit = false, 
     SC.Collections.SafeDictionary<string> parameters = null) 
    { 
     return RenderField(
      sitecoreHelper, 
      fieldId.ToString(), 
      disableWebEdit, 
      parameters); 
    } 

    public static HtmlString RenderDate(
     this SC.Mvc.Helpers.SitecoreHelper sitecoreHelper, 
     string fieldNameOrId, 
     string format = "D", 
     bool disableWebEdit = false, 
     bool setCulture = true, 
     SC.Collections.SafeDictionary<string> parameters = null) 
    { 
     if (setCulture) 
     { 
      Thread.CurrentThread.CurrentUICulture = 
       new CultureInfo(SC.Context.Language.Name); 
      Thread.CurrentThread.CurrentCulture = 
       CultureInfo.CreateSpecificCulture(SC.Context.Language.Name); 
     } 

     if (parameters == null) 
     { 
      parameters = new SC.Collections.SafeDictionary<string>(); 
     } 

     parameters["format"] = format; 
     return RenderField(
      sitecoreHelper, 
      fieldNameOrId, 
      disableWebEdit, 
      parameters); 
    } 

    public static HtmlString RenderDate(
     this SC.Mvc.Helpers.SitecoreHelper sitecoreHelper, 
     SC.Data.ID fieldId, 
     string format = "D", 
     bool disableWebEdit = false, 
     bool setCulture = true, 
     SC.Collections.SafeDictionary<string> parameters = null) 
    { 
     return RenderDate(
      sitecoreHelper, 
      fieldId.ToString(), 
      format, 
      disableWebEdit, 
      setCulture, 
      parameters); 
    } 

    public static HtmlString TagField(
     this SC.Mvc.Helpers.SitecoreHelper sitecoreHelper, 
     string fieldNameOrId, 
     string htmlElement, 
     bool disableWebEdit = false, 
     SC.Collections.SafeDictionary<string> parameters = null) 
    { 
     SC.Data.Items.Item item = 
      SC.Mvc.Presentation.RenderingContext.Current.ContextItem; 

     if (item == null || String.IsNullOrEmpty(item[fieldNameOrId])) 
     { 
      return new HtmlString(String.Empty); 
     } 

     string value = sitecoreHelper.RenderField(
      fieldNameOrId, 
      disableWebEdit, 
      parameters).ToString(); 
     return new HtmlString(String.Format(
      "<{0}>{1}</{0}>", 
      htmlElement, 
      value)); 
    } 

    public static HtmlString TagField(
     this SC.Mvc.Helpers.SitecoreHelper sitecoreHelper, 
     SC.Data.ID fieldId, 
     string htmlElement, 
     bool disableWebEdit = false, 
     SC.Collections.SafeDictionary<string> parameters = null) 
    { 
     return TagField(
      sitecoreHelper, 
      fieldId.ToString(), 
      htmlElement, 
      disableWebEdit, 
      parameters); 
    } 
} 

size sahip olacaktır:

 @Html.Sitecore().RenderDate("Name of field or id", "your format") 

John West burada Sitecore yardımcıları uzatmak konusunda yazıyorsanız: http://www.sitecore.net/learn/blogs/technical-blogs/john-west-sitecore-blog/posts/2012/06/sitecore-mvc-playground-part-4-extending-the-sitecorehelper-class.aspx

+0

Teşekkürler, bu işe yarıyor. Ayrıca, sadece orijinal soruma ilişkin bir şey için TagField yöntemlerinin gerekli olmadığını doğrulamak istiyorum, doğru mu? – MrSnappingTurtle

+0

@MrSnappingTurtle, doğru tagfield kullanılmıyor. Cevap doğruysa, lütfen doğru şekilde işaretleyin. Diğerleri bu cevabı gelecekte kullanacak. –

+1

@SitecoreClimber, Geçerli içerik öğesinin çocukları için kullanmam gerektiğinden, kodunuzu kullandım ama değiştirdim. Değiştirilmiş cevap aşağıda. – Juri

0

Ben değiştirdiniz @SitecoreClimber cevabı, gelmiyor çünkü Bu nedenle, varsayılan öğeleri RenderingContext.Current

kullandığı için oluşturmaya çalışıyorum. ry yöntemi argümanlar Item item eklendi ve bu gibi baz alan oluşturma için bu öğeyi kullanılan ve:

benim MVC görünümünde Yani
public static HtmlString RenderField(this SitecoreHelper sitecoreHelper, string fieldNameOrId, Item item, bool disableWebEdit = false, SafeDictionary<string> parameters = null) 
    { 
     if (parameters == null) 
     { 
      parameters = new SafeDictionary<string>(); 
     } 

     return sitecoreHelper.Field(fieldNameOrId, item, 
      new 
      { 
       DisableWebEdit = disableWebEdit, 
       Parameters = parameters 
      }); 
    } 

Şimdi sahip olabilir: Ben sonraki sürümlerinde kullanıma girmiştir düşünüyorum

@foreach (Item item in @Model.Item.Children) 
{ 
    <div class="event-date"> 
     @Html.Sitecore().RenderDate("Date", item, "d MMM") 
    </div> 
} 
İlgili konular