User Tools

Site Tools


api:qpage:form

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

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]]
  
  
api/qpage/form.1340111634.txt.gz · Last modified: 2012/06/19 16:13 by celutp