2012-08-29 28 views
5

साइटकोर में कोई तरीका है यह सुनिश्चित करने के लिए कि एक निश्चित प्रकार के आइटम में केवल एक निश्चित प्रकार का आइटम हो सकता है? मैं नियम इंजन कुकबुक पढ़ रहा हूं, लेकिन मुझे ज्यादा जानकारी नहीं मिल रही है।साइटकोर एक निश्चित प्रकार के अधिकांश (1) बच्चों को सुनिश्चित करने के लिए नियम डालें

+1

महान प्रश्न !!! –

उत्तर

6

जिन साइटों पर मैंने काम किया था उनमें से एक की आवश्यकता थी कि एक निश्चित आइटम प्रकार के नीचे 6 से अधिक बच्चे आइटम मौजूद न हों। हमने एक सम्मिलित विकल्प नियम का उपयोग करने पर विचार किया, लेकिन इस विचार को त्यागने का फैसला किया क्योंकि यह वस्तुओं की प्रतिलिपि बनाने, स्थानांतरित करने या डुप्लिकेट करने से नहीं रोका।

इसके बजाय हमने item:created ईवेंट को विशेष रूप से इस कार्य के लिए हैंडलर के साथ विस्तारित करने का निर्णय लिया। नीचे यह कैसे काम करता है इसका एक संक्षिप्त उदाहरण है। एक स्पष्ट सुधार माता-पिता आइटम पर फ़ील्ड से अधिकतम बाल सीमा लाने के लिए होगा (केवल प्रशासक के लिए दृश्यमान)। आप शायद यहां नियम इंजन का भी लाभ उठा सकते हैं ...

public void OnItemCreated(object sender, EventArgs args) 
{ 
    var createdArgs = Event.ExtractParameter(args, 0) as ItemCreatedEventArgs; 

    Sitecore.Diagnostics.Assert.IsNotNull(createdArgs, "args"); 
    if (createdArgs != null) 
    { 
     Sitecore.Diagnostics.Assert.IsNotNull(createdArgs.Item, "item"); 
     if (createdArgs.Item != null) 
     { 
      var item = createdArgs.Item; 

      // NOTE: you may want to do additional tests here to ensure that the item 
      // descends from /sitecore/content/home 
      if (item.Parent != null && 
       item.Parent.TemplateName == "Your Template" && 
       item.Parent.Children.Count() > 6) 
      { 
       // Delete the item, warn user 
       SheerResponse.Alert(
        String.Format("Sorry, you cannot add more than 6 items to {0}.", 
             item.Parent.Name), new string[0]); 
       item.Delete(); 
      } 
     } 
    } 
} 
+0

क्या आप पूरा विवरण साझा कर सकते हैं? मैं साइटकोर के लिए नया हूं, और मुझे पूरा यकीन नहीं है कि कहां से शुरू करना है .... यह ईवेंट हैंडलर कहां जाता है? –

+1

यहां एक [साइटकोर घटनाओं पर आलेख] है (http://sdn.sitecore.net/Articles/API/Using%20Events.aspx)। यह पुराना है, लेकिन इसमें से अधिकांश अभी भी प्रासंगिक है। असल में, आपको साइट क्लास/इवेंट सेक्शन में web.config में इस वर्ग का संदर्भ जोड़ना होगा और प्रत्येक आइटम को बनाए जाने पर इसे निष्पादित किया जाएगा। –

+1

इसके अलावा, यहां एक उदाहरण संदर्भ है: '<हैंडलर टाइप = "आपका नामस्थान। ओनआईटमक्रेटेड, आपका। लाइब्रेरी" विधि = "ऑनइटेमक्रेटेड" /> ' –