рд╣реИрд▓реЛ рдЦрдмреНрд░реЛрд╡рд┐рддреНрд╕ред

Sitecore рдХрд╛ рд╣рдм рдкрд░ рдмрд╣реБрдд рдХрдо рдХрд╡рд░реЗрдЬ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рд╣реА рдХрд╛рд░реНрдпрд╛рддреНрдордХ (рдФрд░ рдорд╣рдВрдЧреА) CMS рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдлреА рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реИ рдЬреЛ рдЗрд╕реЗ рд╡рд╣рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рд╛рдЗрдЯрдХ рдкрд░ рд╕рд╛рдЗрдЯ (рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ) рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧ рдЕрдХреНрд╕рд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдХрдард┐рдирд╛рдИ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдХрд░рддреЗ рд╣реИрдВред рддреЛ, рдПрдХ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдпрд╛ рдПрдХрд▓ рдлрд╝реАрд▓реНрдб рдХрд╛ рдПрдХ рд╕рд░рд▓ рдирд╛рдордХрд░рдг рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░, рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд, рд╕рд╛рдЗрдЯ рдореЗрдВ рдЙрд▓реНрд▓рдВрдШрди рдХрд╛ рдирд┐рджрд╛рди рдХрд░рдирд╛ рдФрд░ рдареАрдХ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдФрд░ рд╡реЗ рдХреБрдЫ рдорд╣реАрдиреЛрдВ рдХреЗ рдмрд╛рдж рд╣реА рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдорд╛рдирдХ SiteCore FieldRenderers рдХрд╛ рдЙрдкрдпреЛрдЧ рд▓реЗрдЖрдЙрдЯ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдмрдирд╛рддрд╛ рд╣реИ, рдЬреЛ рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдерд╛ред
рдмрд╛рдЗрдХ рдХреНрдпреЛрдВ?
рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрдХреНрд╖рд╛рдПрдВ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдзрд╛рди рд╣реИрдВ (рдЬреИрд╕реЗ
trac.sitecore.net/CompiledDomainModel ), рд▓реЗрдХрд┐рди рд╡реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕рдВрд░рдЪрдирд╛, рдлрд╝реАрд▓реНрдб рдирд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдпрдХрд╛рд░реА рдХреЛ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЙрд▓реНрд▓реЗрдЦрд┐рдд CompiledDomainModel рдХреЛ рдХрд┐рд╕реА рднреА рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рдж
рд╕рднреА рдореЙрдбрд▓реЛрдВ рдХреЗ рдкреБрдирд░реНрдЬрдирди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрд╣ рд╕рд╣рдпреЛрдЧреА рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рднреА рдЦрд░рд╛рдм рд░реВрдк рд╕реЗ рдЕрдиреБрдХреВрд▓ рд╣реИ (рдЙрддреНрдкрдиреНрди рдХреЛрдб рдореЗрдВ рд▓рдЧрд╛рддрд╛рд░ рд╕рдВрдШрд░реНрд╖), рд╕рднреА рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдЕрджреНрд╡рд┐рддреАрдп рдирд╛рдореЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдФрд░ рдЖрдИрдбреА рд╕реЗ рдмрдВрдзрд╛ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд░рд╛рдХреНрд╖рд╕реА рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ (рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдкрд░ 60,000 рд╕реЗ рдЕрдзрд┐рдХ рд▓рд╛рдЗрдиреЗрдВ рдФрд░ рдЦреБрд▓реА рдереАрдВ) рдпрд╣ рд╡реАрдПрд╕ рдореЗрдВ рдмрд╣реБрдд рддреЗрдЬ рдирд╣реАрдВ рдерд╛)ред
рд╣рдорд╛рд░реА рдЯреАрдо рд╕реМрднрд╛рдЧреНрдпрд╢рд╛рд▓реА рдереА рдХрд┐ рдореМрдЬреВрджрд╛ рд╕рд╛рдЗрдЯреЛрдВ рдХреЗ рд╕рдорд░реНрдерди рдореЗрдВ рдЕрдиреБрднрд╡ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╕рд╛рдЗрдЯрдХреЙрд░ 6.3 рдХреЗ рд▓рд┐рдП рдПрдХ рдирдИ рд╕рд╛рдЗрдЯ рд╡рд┐рдХрд╕рд┐рдд рдХреА рдЧрдИред рдореБрдЭреЗ рддреБрд░рдВрдд рдЗрд╕ рдмрд╛рдд рдкрд░ рдЬреЛрд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╣рдо рдПрдХ рд╕рд╛рдордЧреНрд░реА рд╕рд╛рдЗрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред рджрд┐рд▓рдЪрд╕реНрдк рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗрд╡рд▓ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдереА рдФрд░ рдЗрд╕рдХрд╛ рд╕рд╛рдЗрдЯрдХреЙрд░ рдХреЗ рд╕рд╛рде рд╕реАрдзрд╛ рд╕рдВрдмрдВрдз рд╣реИред
рдкрд╣рд┐рдпреЛрдВ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдЧрд▓рд╛
рд╕рдмрд▓реЗрдЙрдЯ рдкрд░ рд╕рд╛рдЗрдЯрдХ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рдЫреЛрдбрд╝рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдФрд░ рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрдд рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЛ рддреЗрдЬрд╝ рдХрд░реЗрдВ, рдХреЗрд╡рд▓ рдПрдХ рдПрдХрд▓ рдФрд░ рдЕрдиреБрдорд╛рдирд┐рдд рд╕реНрдерд╛рди рдкрд░ рдлрд╝реАрд▓реНрдб рдХреЗ рдирд╛рдореЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВред
рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рд╕рднреА рд░реИрдкрд░ рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЖрдзрд╛рд░ рдХреНрд▓рд╛рд╕ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рд╕рднреА рдореМрдЬреВрджрд╛ рдЖрдЗрдЯрдо рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдФрд░ рдШреЛрд╖рд┐рдд рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдЙрдирдХреЗ рдирд╛рдореЛрдВ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реИред рд╡рд░реНрдЧ-рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕рдВрдмрдВрдз рдХреЗ рд▓рд┐рдП, DataContract рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдиреЛрдЯ: рдЗрд╕рдХреЗ рдмрд╛рдж, рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ рдФрд░ рдкрдардиреАрдпрддрд╛ рдХреЛ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рдЫреЛрдЯрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ[DataContract(Name = "Base text page")] public class BaseTextPage : Template {...}
public class Template { private readonly Item item; public Template(Item item) { var missedTemplates = GetMissedTemplates(item, this.GetType());
рдЙрд╕реА рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреНрд▓рд╛рд╕ рдореЗрдВ, рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдлрд╝реАрд▓реНрдб рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдЙрдкрдпреЛрдЧреА рдХрд╛рд░реНрдп рд╣реИрдВ:
protected T GetField<T>(string name, T @default = default(T)) { var dataType = typeof(T); var field = this.Item.Fields[name]; тАж
рдЕрдЧрд▓рд╛ рдХрджрдо рдЦреЗрддреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдирд╛ рд╣реИред рд╕рд╛рдЗрдЯ-рд╕рд╛рдЗрдЯреЛрдВ рдХреА рд╕рд╣рд╛рдпрддрд╛ рд╕реЗ рд╕рд╛рдЗрдЯ-рд╕рд╛рдЗрдЯ рдХреА рдПрдХ рдЬрд╛рдиреА-рдорд╛рдиреА рд╕рдорд╕реНрдпрд╛ рдкреВрд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЙрджрд╛рд░рддрд╛рдкреВрд░реНрд╡рдХ рдмрд┐рдЦрд░реЗ рд╣реБрдП рдлрд╝реАрд▓реНрдб рдирд╛рдо рд╣реИрдВред рд╣рдорд╛рд░рд╛ рдХрд╛рд░реНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдХ рдФрд░ рдХреЗрд╡рд▓ рдПрдХ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдирд╛рдо рд░рдЦрдирд╛ рд╣реИред рдлрд┐рд░ рд╕реЗ рд╣рдо рдорд╛рдирдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЕрдм DataMemberред
[DataContract(Name = "Base text page")] public class BaseTextPage : Template { [DataMember(Name = "Big text content")] public string Text { get { return this.Item[this.GetFieldName(x => x.QuestionText)]; } } [DataMember(Name = "Logo Image")] public string LogoImage { get { return this.GetField<ImageField>(this.GetFieldName(x => x.BigImage)).GetMediaUrl(); } } тАж }
рдпрд╣рд╛рдБ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд GetFieldName рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рдЬрд┐рд╕реЗ рдлрд╝реЙрд░реНрдо рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░-рд╡рд┐рдзрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
private static readonly Dictionary<string, string> fieldNameCache = new Dictionary<string, string>(); public static string GetFieldName<T, TResult>(this T obj, Expression<Func<T, TResult>> memberExpression) where T : class { if (obj == null) { throw new ArgumentNullException("obj"); } var member = memberExpression.ToMember(); if (member.MemberType != MemberTypes.Property) { throw new ArgumentException("Not a property access", "memberExpression"); } var fieldCahceKey = typeof(T).Name + member.Name; if (fieldNameCache.ContainsKey(fieldCahceKey)) { return fieldNameCache[fieldCahceKey]; } var fieldName = typeof(T) .GetProperty(member.Name) .GetCustomAttributes(typeof(DataMemberAttribute), true) .Cast<DataMemberAttribute>() .Select(curr => curr.Name) .FirstOrDefault(); if (string.IsNullOrEmpty(fieldName)) { return null; } fieldNameCache[fieldCahceKey] = fieldName; return fieldName; } private static MemberInfo ToMember<TMapping, TReturn>( this Expression<Func<TMapping, TReturn>> propertyExpression) { if (propertyExpression == null) { throw new ArgumentNullException("propertyExpression"); } var expression = propertyExpression.Body; if (expression.NodeType == ExpressionType.MemberAccess) { var memberExpression = expression as MemberExpression; if (memberExpression != null) { return memberExpression.Member; } } throw new ArgumentException("Not a member access", "propertyExpression"); }
рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рд╣рдо рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:
BaseTextPage page = new BaseTextPage(Sitecore.Context.Item); var text = page.Text; var imageUrl = page.LogoImage;
рдФрд░ рд╡рд░реНрддрдорд╛рди рдЖрдЗрдЯрдо рдХреЗ "рдмрд┐рдЧ рдЯреЗрдХреНрд╕реНрдЯ рдХрдВрдЯреЗрдВрдЯ" / "рд▓реЛрдЧреЛ рдЗрдореЗрдЬ" рдлрд╝реАрд▓реНрдб рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рдмрд╢рд░реНрддреЗ рдХрд┐ рдЗрд╕рдХрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдмреЗрд╕рдЯреЗрдХреНрд╕реНрдЯрдкреЗрдЬ рдХреНрд▓рд╛рд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реЛред
рдЕрдЧрд▓рд╛, рд╣рдо рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рд░рдг рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рдЕрдиреНрдп рд╕рднреА рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдЖрдзрд╛рд░ рд╣реЛрдЧрд╛ред рдХрдо рд╕реЗ рдХрдо рдпрд╣ рдПрдХ "рдЕрддрд┐рд░рд┐рдХреНрдд рдЯреЗрдореНрдкрд▓реЗрдЯ" рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЖрдорддреМрд░ рдкрд░ рдХреБрдЫ рдФрд░ рдЙрдкрдпреЛрдЧреА рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
[DataContract(Name = "Base page")] public class BasePage : Template { [DataMember(Name = "Show in menu")] public bool ShowInMenu { get { return this.Item[this.GetFieldName(x => x.ShowInMenu)].GetBoolValue(); } } [DataMember(Name = "Page title")] public string Title { get { return this.Item[this.GetFieldName(x => x.Title)]; } } }
рдЕрдм рд╣рдо рд╕рдмрд▓реЗрдЖрдЙрдЯ рдореЗрдВ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ:
public class BaseSublayout<T> : UserControl where T : BasePage { protected virtual T Model { get { return (T)Activator.CreateInstance(typeof(T), Sitecore.Context.Item); } } } public partial class ConcreteTextPage: BaseSublayout<MyProject.ORM.Content.ConcreteMapping> { protected void Page_Load(object sender, EventArgs e) { var smthUsefull = this.Model.HeaderText; } }
рдЗрд╕ рдХреНрд╖рдг рд╕реЗ, .aspx рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕рд╛рдордЧреНрд░реА ASP.MVC рдореЗрдВ рдЙрди рд▓реЛрдЧреЛрдВ рдХреА рддрд░рд╣ рдмрдирдиреЗ рд▓рдЧрддреА рд╣реИред рд╕реБрд╡рд┐рдзрд╛
рдкреНрд░рднрд╛рд╡ рдХреЛ
рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдбреЗрдЯрд╛ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ / рд╡реИрдзрддрд╛ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рдЬрд╛рдВрдЪ рдХреЗ рд╕рд╛рде рдорд╛рд░реНрдХрдЕрдк рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЦрд╛рд▓реА src рдпрд╛ href рдХреЗ рдмрд┐рдирд╛ рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рди рдХрд░реЗрдВ)ред
<h1><%= this.Model.Header %></h1> <%= HtmlHelper.RenderImage(this.Model.SomeEntity.MainImage) %> <% foreach (var link in this.Model.SelectedLinks) { %> <%= HtmlHelper.Anchor(link.Url, link.Text) %> <% } %>
рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд▓рд╛рдн:
+ рдЧреБрдг рдХреЗ рд░реВрдк рдореЗрдВ рд╣рд╛рде рдореЗрдВ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЖрдЗрдЯрдо рдХреЗ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдХреНрд╖реЗрддреНрд░
+ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЖрдЗрдЯрдо рдореЗрдВ рд╣рдореЗрд╢рд╛ рд╕рд╣реА рдЯреЗрдореНрдкрд▓реЗрдЯ рд╣реЛрддрд╛ рд╣реИ
+ рд╕рд┐рдЯрдХреЛрд░ рдХреЗ рд▓рд┐рдП рд╕рднреА рдбреЗрдЯрд╛-рдЬрд╛рдБрдЪ рдорд╛рдирдХ рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
+ рд╕рд╛рдЗрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рддрдХ рдХреЗрдВрджреНрд░реАрдХреГрдд рдкрд╣реБрдВрдЪ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдЖрд╡рд░рдг рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ
+ рд╕реНрд╡рдЪреНрдЫ (рдиреНрдпреВрдирддрдо, рд▓рд╛рдкрддрд╛) рдкреГрд╖реНрда рдХреЛрдб
+ рдкреВрд░реНрдг рд▓реЗрдЖрдЙрдЯ рдирд┐рдпрдВрддреНрд░рдг
рд╡рд┐рдкрдХреНрд╖
- рд╕рднреА рд╣рд╛рде рдореИрдкрд┐рдВрдЧ
- рдлрд╝реАрд▓реНрдб / рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рдирд╛рдо рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЦрд░реНрдЪ
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд▓реЗрдЦ рд╕рд╛рдЗрдЯрдЪреЛрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред