2015-02-19 5 views
0

Я хотел бы создать пользовательский тип контента, используемый в форме, которая имеет поля, которые ведут себя по-разному, когда редактируются в пользовательской форме чем изнутри бэкэнда администратора. Форма позволяет посетителям регистрироваться, чтобы получать уведомления при изменении онлайн-публикации. Я планирую использовать форму в пределах iframe внутри другого приложения.Orchard CMS - Как реализовать поля в пользовательской форме, которые ведут себя по-разному на странице пользовательской формы vs admin backend

Пользовательские поля Content Type

  • ПгвЬЫате
  • LastName
  • Род занятий
  • Email
  • PublicationId
  • SubscribeDate
  • CancelDate
  • IsActive

Для пользователей, заполнив форму на странице пользовательской формы (в отличие от создания нового элемента контента внутри администратора бэкэнда) Я хотел бы изменить поведение несколько полей:

  • ProductId поля (тип текст) не должно быть доступно для редактирования или видимыми и должны получить его значение из строки запроса переменной
  • SubscribeDate поле не должно быть редактируемым или видимым и должно быть автоматически установлено на дату формы отправлено
  • CancelDate поле не должно быть редактируемым или видимый
  • IsActive поле не должно быть редактируемым или видимым и должно быть автоматически установлено истинным

Я новичок в сад и сначала я думал о создании пользовательских полей или пользовательские части или альтернативные представления для полей, в которых используются скрытые входы. После написания вопроса я думаю, что у меня есть хорошее решение, но я хотел бы знать, есть ли лучший способ.

Возможное решение

  1. Создание пользовательского типа содержимого специально для формы, которая отличается, чем один выше, который имеет только FirstName, LastName, Occupation, Email и PublicationId.
  2. Переопределите представление формы и вместо элемента text input для PublicationId используйте hidden input, который получает свое значение из строковой переменной запроса. Кроме того, создайте пользовательский вид только для поля PublicationId.
  3. Использование Workflow, после отправки формы создайте экземпляр пользовательского типа контента выше. Установите значения по умолчанию для SubscribeDate и IsActive. Я не уверен, сколько элементов управления у меня есть в Workflows, так что вместо этого создайте обработчик для отправки формы (это существует?), Который создает экземпляр настраиваемого типа контента выше и устанавливает значения по умолчанию.

Я направляюсь в правильном направлении?И должен ли я создавать пользовательские типы контента в пользовательском интерфейсе администратора или в коде? Я хотел бы, чтобы весь мой код, связанный с этой функцией уведомления о публикации, был в одном месте, поэтому написать модуль имеет смысл. Некоторые другие части этой функции будут:

  • отправить подтверждение по электронной почте, когда пользователь подписывает вверх
  • имеет возможность для пользователя нажать на ссылку в электронном письме, которое отписать их от уведомления публикации
  • запустить ежедневную задачу, которая проверяет, что публикации изменились (у нас есть отдельный API, чтобы мы могли написать логику там и просто позвонить API) и отправить по электронной почте всем, кто подписался на эту публикацию

Благодаря! Любой вход очень приветствуется.

ответ

1

Я думаю, что вам нужно будет создать новую часть контента, эта часть содержимого должна содержать эти поля (все они). Эта часть должна быть назначена новому типу содержимого.

Создание поля для части (миграций) ...

ContentDefinitionManager.AlterPartDefinition("YourPartName", builder => builder.WithField("YourFieldName", fieldBuilder => fieldBuilder.OfType("TextField").WithDisplayName("Your field name")));

После добавления всех нужных полей, которые необходимо присоединить новую часть к новому типу контента ...

ContentDefinitionManager.AlterTypeDefinition("YourContentTypeName", 
    builder => builder.WithPart("YourPartName")); 

Совет. Всегда используйте миграцию, они позволяют вам управлять, и если вы работаете в разных средах, вы будете иметь одинаковую структуру, не создавая снова те же части/типы содержимого.

Рекомендую взглянуть на parts and drivers.

Надеюсь, это поможет.

С уважением.

+0

Спасибо. Создание части таким образом совпадает с добавлением типа контента в пользовательский интерфейс администратора? И я могу делать экспорт/импорт, если я работаю в разных средах? – pholly

+0

Да, это то же самое, но каждый раз, когда вам нужно обновить тип детали/содержимого, вам придется экспортировать/импортировать снова. – krbnr