2010-11-01 4 views
0

При использовании N2 CMS:N2: Установка значений по умолчанию для ContentItems

Если я хочу установить некоторые значения по умолчанию, когда новый ContentItem создается (например, установив значение CreatedByUser для новой страницы, так что я могу записать, кто первоначально создал его), где лучше всего разместить этот код?

Я считаю, что конструктор ContentItem не идеален, потому что он будет вызван при загрузке существующих объектов.

ответ

1

Если вы используете Get/SetDetail синтаксис, то вы можете сделать что-то подобное в собственность добытчика:

public virtual string TopImage 
{ 
    get { return (string)(GetDetail("TopImage") ?? string.Empty); } 
    set { SetDetail("TopImage", value); } 
} 

Это немного некрасиво, так что есть также перегрузки Get/Set деталь, которая позволяет можно указать по умолчанию:

public virtual string TopImage 
{ 
    get { return GetDetail("TopImage", String.Empty /* Default */); } 
    set { SetDetail("TopImage", value, String.Empty /* Default */); } 
} 

Если вы хотите сохранить значение, когда-то сохранены попробуйте перекрывая AddTo метод на ContentItem. Это вызывается каждый раз, когда объект сохраняется, поэтому будьте осторожны, если вы хотите просто называть его первым, когда что-то будет сохранено (ID == 0, когда элемент «новый»)

+0

Спасибо, я думаю, для метода SetDetail для работы свойство должно иметь атрибут «Редактируемый ...», чтобы движок редактирования вызывал установщика. Это делает его немного уродливым в случае с идентификаторами пользователя, которые вы не обязательно хотите отображать в редакторах контента (или разрешить им редактировать). Тем не менее, переопределение метода AddTo с проверкой идентификатора звучит неплохо. – codeulike

+0

Вам не нужен атрибут Editable для значения, которое нужно сохранить - Editable просто добавляет некоторые «магии», чтобы позволить пользовательскому интерфейсу администратора отображать правильный элемент управления редактированием. – spmason

+0

. Привет, вам удалось исправить вашу проблему в конце? – spmason

Смежные вопросы