This shows you the differences between two versions of the page.
Both sides previous revision Previous revision | |||
api:form [2012/06/19 16:13] celutp removed |
— (current) | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Методы для обработки форм ====== | ||
- | |||
- | Функции форм предназначены для создания или изменения статей контента посредством HTML-форм, но могут также использоваться для чисто программной модификации содержимого контентов. | ||
- | |||
- | ===== Общие ===== | ||
- | |||
- | ==== FieldName ==== | ||
- | |||
- | <code c#>string FieldName(string content_name, string field_name)</code> | ||
- | Возвращает внутреннее имя поля (''field_<id поля>''). Обычно используется в HTML-формах для наименования полей совместно с методами [[#AddFormToContent]] или [[#UpdateContentItem]]. Поддерживает [[:development:container#выбор_источника|динамическое изменение контента]]. | ||
- | |||
- | ==== FieldID ==== | ||
- | |||
- | <code c#>int FieldID(string content_name, string field_name)</code> | ||
- | Возвращает идентификатор поля. | ||
- | |||
- | ===== Добавление ===== | ||
- | |||
- | ==== AddFormToContent ==== | ||
- | |||
- | Метод используется для создания новых статей: | ||
- | |||
- | <code c#>int AddFormToContent(string content_name, string status_name)</code> | ||
- | |||
- | и обновления существующих: | ||
- | |||
- | <code c#>int AddFormToContent(string content_name, string status_name, int content_item_id)</code> | ||
- | |||
- | Необходимо передать: | ||
- | |||
- | * Имя контента (поддерживается [[:development:container#выбор_источника|динамическое изменение контента]]) | ||
- | * Имя статуса (обычно -- "Published") | ||
- | * ID статьи (при обновлении) | ||
- | | ||
- | Перед вызовом AddFormToContent значения полей статьи должны находиться в коллекции [[development:values|Values]], данные в которую могут попасть либо автоматически при отправке на сервер HTML-формы (имена полей формы должны формироваться с помощью функции [[#FieldName]]), либо вручную, с помощью функции [[api:values#addvalue|AddValue]] (ключи также должны быть созданы с помощью [[#FieldName]]). | ||
- | |||
- | Возвращает ID созданной/обновленной статьи. Также этот ID записывается в коллекцию [[development:values|Values]] c ключом ''new_content_item_id''. | ||
- | |||
- | Если в веб-форме есть поля ввода типа file с корректными именами (имена полей должны формироваться с помощью функции [[#FieldName]]), то соответствующие файлы будут сохранены в [[:content:library|библиотеку контента]]. Если файл с таким именем уже существует, то файл будет сохранен под измененным именем с числовым индексом, например ''image[1].jpg''. Также при необходимости будут сгенерированы динамические изображения. | ||
- | |||
- | AddFormToContent поддерживает добавление/обновление полей Many-To-Many (вызывает внутри себя [[#AddUpdateContentItemLink]]). Значение поля должно представлять собой строку идентификаторов связанных статей, разделенных запятыми (результат функции [[api:contents#GetContentItemLinkIds]]). | ||
- | |||
- | AddFormToContent инициирует отправку уведомлений. Если это поведение нежелательно, можно использовать [[#AddFormToContentWithoutNotification]]. | ||
- | |||
- | Нельзя обновлять виртуальные контенты - генерируется исключение. | ||
- | |||
- | Обновление идет сразу в несколько таблиц единой транзакцией. | ||
- | |||
- | В соответствии с настройками полей производятся следующие проверки: | ||
- | * На тип поля c точки зрения БД (NVARCHAR, NUMERIC, DATETIME) | ||
- | * На обязательность поля | ||
- | * На допустимую длину и маску ввода (поле String) | ||
- | * Проверка на уникальность не поддерживается | ||
- | |||
- | Пример: | ||
- | <code c#>AddValue(FieldName("Users", "Login"), Login); | ||
- | AddValue(FieldName("Users", "Password"), Password); | ||
- | AddFormToContent("Users", "Published");</code> | ||
- | |||
- | |||
- | ==== AddFormToContentWithoutNotification ==== | ||
- | <code c#>int AddFormToContentWithoutNotification(string content_name, string status_name)</code> | ||
- | <code c#>int AddFormToContentWithoutNotification(string content_name, string status_name, int content_item_id)</code> | ||
- | |||
- | Методы работают аналогично [[#AddFormToContent]], но без посылки уведомлений. | ||
- | |||
- | ===== Обновление ===== | ||
- | |||
- | ==== UpdateContentItem ==== | ||
- | <code c#>void UpdateContentItem()</code> | ||
- | Работает подобно [[#AddFormToContent]] с параметром content_item_id, но в данном случае ID статьи передается через коллекцию Values (ключ content_item_id). Имя контента вычисляется по ID статьи. Если в коллекции [[Values]] будут присутствовать не все поля, то значения обнулятся. Если же это поведение нежелательно, то нужно использовать перегруженную версию с параметром ''updateEmpty = false''. | ||
- | |||
- | UpdateContentItem инициирует отправку уведомлений. Если это поведение нежелательно, можно использовать [[#UpdateContentItemWithoutNotification]]. | ||
- | |||
- | <code c#>void UpdateContentItem(bool updateEmpty, string statusName)</code> | ||
- | |||
- | Эта перегруженная версия метода позволяет обновлять статус статьи (если статус менять не нужно, то передайте в метод пустую строку), а также обновлять только несколько полей статьи с помощью параметра ''updateEmpty = false'' (данный вариант предпочтительнее, чем несколько вызовов [[#UpdateContentItemField]]). | ||
- | |||
- | |||
- | Пример: | ||
- | <code c#>AddValue("content_item_id", 12345); | ||
- | AddValue(FieldName("Users", "Login"), Login); | ||
- | AddValue(FieldName("Users", "Password"), Password); | ||
- | UpdateContentItem();</code> | ||
- | |||
- | ==== UpdateContentItemWithoutNotification ==== | ||
- | |||
- | <code c#>void UpdateContentItemWithoutNotification()</code> | ||
- | Работает подобно [[#UpdateContentItem]], но без посылки уведомлений. | ||
- | |||
- | |||
- | |||
- | ==== UpdateContentItemField ==== | ||
- | |||
- | <code c#>void UpdateContentItemField(string content_name, string field_name, int content_item_id) </code> | ||
- | Метод работает аналогично [[#AddFormToContent]] c параметром content_item_id, но он предназначен для обновления только одного поля статьи. Если необходимо обновление сразу нескольких полей, лучше воспользоваться методом [[#UpdateContentItem]] с параметром ''UpdateEmpty = false''. По умолчанию метод не инициирует отправку уведомлений. Если это поведение надо изменить, можно воспользоваться перегруженной версией: | ||
- | |||
- | <code c#>void UpdateContentItemField(string content_name, string field_name, int content_item_id, bool with_notification)</code> | ||
- | |||
- | Пример: | ||
- | <code c#>AddValue(FieldName("Users", "Login"), "newLogin"); | ||
- | UpdateContentItemField("Users", "Login", Value("cid"));</code> | ||
- | |||
- | |||
- | |||
- | ==== AddUpdateContentItemLink ==== | ||
- | |||
- | <code c#>int AddUpdateContentItemLink(string LinkFieldName, int ItemID, string LinkItems, string TargetLinkItems)</code> | ||
- | Добавляет или обновляет заданное поле связи типа M2M (параметр LinkFieldName) для заданной статьи (параметр ItemID). Возвращает 1 в случае удачного завершения, -1 -- при неудачном. Значение поля передается в параметре LinkItems. Оно представляет собой строку идентификаторов связанных статей, разделенных запятыми. Параметр TargetLinkItems позволяет ограничить набор обновляемых идентификаторов. Формат этого параметра такой же, как и у параметра LinkItems. Если обновление затрагивает все идентификаторы, то в качестве параметра TargetLinkItems нужно передать пустую строку. | ||
- | |||
- | Пример: | ||
- | <code c#>AddUpdateContentItemLink("Books", NumValue("AuthorID"), Value("12345,45678,7890, 23415, 8907"), "");</code> | ||
- | |||
- | ===== Удаление ===== | ||
- | |||
- | ==== RemoveContentItem ==== | ||
- | |||
- | <code c#>void RemoveContentItem(int content_item_id)</code> | ||
- | |||
- | Удаляет статью по заданному идентификатору. Метод поддерживает уведомления. | ||
- | |||
- | ==== DeleteContentItem ==== | ||
- | |||
- | <code c#>void DeleteContentItem()</code> | ||
- | Удаляет статью по заданному идентификатору, который передается через коллекцию [[Values]] (ключ content_item_id). Метод поддерживает уведомления. | ||
- | |||
- | |||
- | |||
- | |||
- | |||