2015-12-25 11 views
5

मुझे किसी दिनांक के लिए कस्टम प्रारूप का उपयोग करने की आवश्यकता है (यानी dddd dd MMMM yyyy)। क्या इस प्रारूप को Sitecore().Field() पर पास करना संभव है? मैं कुछ इस तरह करना चाहते हैं:साइटकोर() फ़ील्ड() का उपयोग कर प्रारूप साइटकोर दिनांक।

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

हालांकि, कुछ Googling के बाद, मैंने पाया कि मैं या तो यह करने के लिए एक कस्टम फ़ील्ड सहायक या एक कस्टम मॉडल बनाने के लिए किया है। बेस साइटकोर का उपयोग करके ऐसा करने का कोई तरीका नहीं है? यह महत्वपूर्ण है कि यह Sitecore().Field() के माध्यम से किया जाए क्योंकि मुझे मूल्य संपादित करने में सक्षम होने के लिए सामग्री संपादक की आवश्यकता है।

जहाँ तक मुझे पता Sitecore बॉक्स से बाहर इस तरह के एक सुविधा उपलब्ध नहीं है हम Sitecore 7.5

+3

मुझे लगता है कि बाद के संस्करणों में शुरू किया गया है क्योंकि यह मेरे लिए SXP8.2 @ Html.Sitecore() फ़ील्ड ("प्रारंभ दिनांक", नया {प्रारूप = "डीडी एमएमएमएम yyyy"}) – Zooking

+0

मुझे यह याद है कि यह साइटकोर डेवलपर elearning में भाग लेने के दौरान एक विकल्प है। मॉड्यूल 4 अगर मुझे गलत नहीं लगता है। पाठ्यक्रम साइटकोर 8. –

उत्तर

4

पर हैं। आप इस कार्यक्षमता के लिए एक सहायक का उपयोग कर सकते हैं, कृपया नीचे कोड देखें। मैंने इस कोड का उपयोग किया और ठीक काम कर रहा है। आप पृष्ठ संपादक से दिनांक फ़ील्ड भी संपादित कर सकते हैं क्योंकि फ़ील्ड साइटकोर पाइपलाइनों के माध्यम से संपादित किया जाता है।

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

अपने cshtml में आप होगा:

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

जॉन पश्चिम कैसे यहाँ sitecore सहायकों का विस्तार करने के बारे में लिखने: 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

धन्यवाद, यह काम करता है। साथ ही, मैं सिर्फ यह पुष्टि करना चाहता हूं कि मेरे मूल प्रश्न से संबंधित किसी भी चीज़ के लिए टैगफिल्ड विधियों की आवश्यकता नहीं है, सही? – MrSnappingTurtle

+0

@MrSnappingTurtle आप सही टैगफील्ड का उपयोग नहीं किया जाता है। अगर उत्तर सही है तो कृपया इसे सही चिह्नित करें। अन्य भविष्य में इस प्रतिक्रिया का उपयोग करेंगे। –

+1

@SitecoreClimber, मैंने आपके कोड का उपयोग किया है लेकिन आपके कोड को संशोधित किया है, क्योंकि मुझे इसे वर्तमान संदर्भ आइटम के बच्चों के लिए उपयोग करने की आवश्यकता है। नीचे संशोधित उत्तर। – Juri

0

मैं बदलाव कर दिया है @SitecoreClimber जवाब है, क्योंकि यदि ऐसा नहीं होता बच्चों के आइटम को प्रस्तुत करने के लिए काम करें क्योंकि यह डिफ़ॉल्ट RenderingContext.Current

का उपयोग करता है इसलिए मैंने पूर्व संध्या अपडेट किया है ry विधि तर्कों और Item item जोड़ा गया है और, आधार क्षेत्र प्रतिपादन के लिए है कि आइटम इस्तेमाल किया इस तरह:

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 
      }); 
    } 
मेरी MVC दृश्य में

तो मैं अब हो सकता है:

@foreach (Item item in @Model.Item.Children) 
{ 
    <div class="event-date"> 
     @Html.Sitecore().RenderDate("Date", item, "d MMM") 
    </div> 
} 
संबंधित मुद्दे