====== Методы для обработки форм ====== Методы обработки форм классов [[api:qpage|QPage и QUserControl]] предназначены для создания или изменения статей контента посредством HTML-форм, но могут также использоваться для программной модификации содержимого контентов. ===== AddFormToContent ===== Метод используется для создания новых статей: public int AddFormToContent(string content_name, string status_name) и обновления существующих: public int AddFormToContent(string content_name, string status_name, int content_item_id) Необходимо передать: * Имя контента (поддерживается [[:development:container#выбор_источника|динамическое изменение контента]]) * Имя статуса (обычно -- "Published") * ID статьи (при обновлении) Перед вызовом AddFormToContent значения полей статьи должны находиться в коллекции [[development:Values]], данные в которую могут попасть либо автоматически при отправке на сервер HTML-формы (имена полей формы должны формироваться с помощью функции [[api:qpage:other#FieldName]]), либо вручную, с помощью функции [[api:qpage:values#AddValue]] (ключи также должны быть созданы с помощью [[api:qpage:other#FieldName]]). Возвращает ID созданной/обновленной статьи. Также этот ID записывается в коллекцию [[development:Values]] c ключом ''new_content_item_id''. Если в веб-форме есть поля ввода типа file с корректными именами (имена полей должны формироваться с помощью функции [[api:qpage:other#FieldName]]), то соответствующие файлы будут сохранены в [[:content:library|библиотеку контента]]. Если файл с таким именем уже существует, то файл будет сохранен под измененным именем с числовым индексом, например ''image[1].jpg''. Также при необходимости будут сгенерированы динамические изображения. Поддерживается полноценная работа с расщепленными статьями, включая Many-To-Many и Many-To-One поля. Значения таких полей должны представлять собой строку идентификаторов связанных статей, разделенных запятыми. Метод поддерживает отправку уведомлений. Если такое поведение нежелательно, можно использовать [[#AddFormToContentWithoutNotification]]. В методе производятся следующие проверки на сохраняемые поля: * Тип поля (числовой, дата) * Обязательность * Уникальность * Допустимая длина и маска ввода (поле типа String) Кроме того: * При обновлении статьи создается ее версия. * Вся работа с БД происходит в одной транзакции. Реализовано с помощью метода [[api:dbconnector:update_article#AddFormToContent]] класса [[api:DBConnector]]. ===Пример=== AddValue(FieldName("Users", "Login"), Login); AddValue(FieldName("Users", "Password"), Password); AddFormToContent("Users", "Published"); ===== AddFormToContentWithoutNotification ===== public int AddFormToContentWithoutNotification(string content_name, string status_name) public int AddFormToContentWithoutNotification(string content_name, string status_name, int content_item_id) Методы работают аналогично [[#AddFormToContent]], но без посылки уведомлений. ===== UpdateContentItem ===== public void UpdateContentItem() Работает подобно [[#AddFormToContent]] с параметром content_item_id, но в данном случае ID статьи передается через коллекцию [[api:qpage#Values]](ключ //content_item_id//). Имя контента вычисляется по ID статьи. Если в коллекции [[api:qpage#Values]] будут присутствовать не все поля, то значения обнулятся. Если же это поведение нежелательно, то нужно использовать перегруженную версию с параметром ''updateEmpty = false''. UpdateContentItem инициирует отправку уведомлений. Если это поведение нежелательно, можно использовать [[#UpdateContentItemWithoutNotification]]. public void UpdateContentItem(bool updateEmpty, string statusName) Эта перегруженная версия метода позволяет обновлять статус статьи (если статус менять не нужно, то передайте в метод пустую строку), а также обновлять только несколько полей статьи с помощью параметра ''updateEmpty = false'' (данный вариант предпочтительнее, чем несколько вызовов [[#UpdateContentItemField]]). Реализовано с помощью метода [[api:dbconnector:update_article#UpdateContentItem]] класса [[api:DBConnector]]. ===Пример=== AddValue("content_item_id", 12345); AddValue(FieldName("Users", "Login"), Login); AddValue(FieldName("Users", "Password"), Password); UpdateContentItem(); ===== UpdateContentItemWithoutNotification ===== public void UpdateContentItemWithoutNotification() Работает подобно [[#UpdateContentItem]], но без посылки уведомлений. ===== UpdateContentItemField ===== public void UpdateContentItemField(string content_name, string field_name, int content_item_id) Метод работает аналогично [[#AddFormToContent]] c параметром content_item_id, но он предназначен для обновления только одного поля статьи. Если необходимо обновление сразу нескольких полей, лучше воспользоваться методом [[#UpdateContentItem]] с параметром ''UpdateEmpty = false''. По умолчанию метод не инициирует отправку уведомлений. Если это поведение надо изменить, можно воспользоваться перегруженной версией: public void UpdateContentItemField(string content_name, string field_name, int content_item_id, bool with_notification) Реализовано с помощью метода [[api:dbconnector:update_article#UpdateContentItemField]] класса [[api:DBConnector]]. ===Пример=== AddValue(FieldName("Users", "Login"), "newLogin"); UpdateContentItemField("Users", "Login", Value("cid")); ===== AddUpdateContentItemLink ===== public int AddUpdateContentItemLink(string LinkFieldName, int ItemID, string LinkItems, string TargetLinkItems) Добавляет или обновляет заданное поле связи типа M2M (параметр //LinkFieldName//) для заданной статьи (параметр //ItemID//). Возвращает 1 в случае удачного завершения, -1 -- при неудачном. Значение поля передается в параметре //LinkItems//. Оно представляет собой строку идентификаторов связанных статей, разделенных запятыми. Параметр //TargetLinkItems// позволяет ограничить набор обновляемых идентификаторов. Формат этого параметра такой же, как и у параметра //LinkItems//. Если обновление затрагивает все идентификаторы, то в качестве параметра //TargetLinkItems// нужно передать пустую строку. ===Пример=== AddUpdateContentItemLink("Books", NumValue("AuthorID"), Value("12345,45678,7890, 23415, 8907"), ""); ===== RemoveContentItem ===== public void RemoveContentItem(int content_item_id) Удаляет статью по заданному идентификатору. Метод поддерживает уведомления. Реализовано с помощью метода [[api:dbconnector:update_article#DeleteContentItem]] класса [[api:DBConnector]]. ===== DeleteContentItem ===== public void DeleteContentItem() Удаляет статью по заданному идентификатору, который передается через коллекцию [[api:qpage#Values]] (ключ content_item_id). Метод поддерживает уведомления. Реализовано с помощью метода [[api:dbconnector:update_article#DeleteContentItem]] класса [[api:DBConnector]].