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