Sitecore Условное отображение полей
Так что я довольно новичок в sitecore, и эта тема не обсуждалась во время моего обучения. Мои вопросы просто для того, чтобы помочь мне указать правильный термин или документацию о методе для выполнения следующих действий.
У меня есть элемент определения с кучей групп полей, что я хочу сделать, это что-то вроде:
если значение поля X равно "да", то свернуть / скрыть поле X или группу полей X.
Имеет ли это смысл? Это правило валидации? или какие-то другие правила, это рабочий процесс, который мне нужно присоединить? Вы помещаете это только в поле, которое я хочу скрыть, или поле, которое вызывает действие?
Я ценю любое руководство.
2 ответа
В Sitecore нет ничего готового для достижения того, чего вы хотите, но нет причины, по которой вы не можете создать составной тип настраиваемого поля для этого. Следующие статьи помогут вам достичь этого:
Создайте новый элемент управления, унаследованный либо от Droplist (если сравнение значения должно основываться на тексте), либо от Droplink (для сравнения ID). Вы можете добавить параметр в поле "Источник" элемента управления, чтобы указать, какие значения должны вызывать скрытие.
Основной элемент управления в редакторе контента - это просто стандартный HTML select
элемент. добавлять onchange
события в элемент управления и добавьте свой обработчик Javascript, чтобы скрыть другие элементы управления. Поскольку я не смог найти способ добавления дополнительных пользовательских классов css к элементам управления Sitecore, было бы лучше / проще всего спрятать все остальные элементы управления в той же самой свертываемой группе после того, как вы управляете. Это будет означать, что вам нужно будет лучше сгруппировать элементы управления (или, по крайней мере, логически).
Javascript будет выглядеть примерно так (редактор контента использует каркас Prototype JS):
if ($(this).getValue() == 'no') {
// find the parent container of this control and then hide all the next siblings in the same group
$(this).up('.scEditorFieldMarker').nextSiblings('.scEditorFieldMarker').invoke('hide');
}
Вы можете проверить это, запустив вышеуказанное в консоли, заменив ключевое слово this
с идентификатором вашего поля, например $('FIELD2292054')
,
В чем я не уверен, так это в том, как вызвать скрытие при начальной загрузке, т.е. когда кто-то возвращается к существующему элементу, это может быть возможно путем добавления к одному из конвейеров, но было бы лучше использовать решение JS, если это возможно. Я подумаю над этим и получу правильный пример кода в течение следующих нескольких дней.
РЕДАКТИРОВАТЬ: Вы можете добавить обработчик событий в sc:contenteditorupdated
для обработки редактора контента, который повторно загружается.
document.observe("sc:contenteditorupdated", myFunction);
Я написал сообщение в блоге и разместил код на GitHub, если вам интересно.
Не уверен, что вы сталкивались с этой записью в блоге Энди Узика.
Он мудро говорит о скрытии полей в редакторе контента, а также создал модуль Sitecore под названием Hide Field Template Extension, который размещен на торговой площадке Sitecore с полным исходным кодом для расширения.
Прочитав и попробовав расширение, я чувствую, что оно не решит полностью вашу проблему (как вы описали ее в вопросе). Но это даст вам:
- Среднесрочное решение, чтобы скрыть несколько ненужных полей, которые некоторые редакторы контента не хотели бы просматривать.
- Поля, которые требуются только администраторам для административных целей - для снятия помех эти поля могут быть скрыты.
Только одна вещь, которую нужно иметь в виду, это упоминается в требованиях Sitecore 6.5 и 6.6. Я не проверял его в Sitecore 7. Если вы используете Sitecore 7, который, как мне кажется, и есть, можно изменить исходный код и заставить его работать для Sitecore 7.
Посмотрите и поделитесь своими выводами.
Удачного Sitecoring!