Создание формы "Добавить элемент"
Вы можете создать форму, которая позволяет пользователям создавать новые элементы контента, просто вызывая следующее в методе контроллера:
\IPS\Output::i()->output = \IPS\yourApp\YourModelClass::create( $node );
Вы должны передать ноду, в которой создаётся элемент контента, в виде параметра (или передать NULL, если вы создаёте элемент контента, не зависящие от нод, или если вы добавите элемент формы (например выпадающий список), из которого пользователь может выбрать сам ноду). Метод create() автоматически обработает отображение формы, создание элемента, а затем перенаправит пользователя после создания.
Элементы формы получаются из метода formElements() унаследованного вашей моделью из модели элемента контента. Вы можете переопределить этот метод в своей собственной модели, добавив дополнительные поля, которые будут отображаться как в форме создания, так и в форме редактирования. Метод автоматически добавляет поля для:
- Заголовка элемента.
- Тегов (если ваша модель реализует тегирование).
- Поля редактора для первого комментария к вашему элементу (если комментирование поддерживается вашей моделью, и требуется первый комментарий).
Если вы переопределяете метод formElements(), обязательно также вызовите родительский метод, чтобы включить эти автоматические поля.
Названия для элементов форм имеют префикс в виде значения статического свойства $formLangPrefix (которое по умолчанию пустое, если не будет перезаписано). Вы можете установить это свойство, если хотите использовать собственные языковые строки для кастомизации результата вашей формы.
Методы жизненного цикла
Существует несколько методов жизненного цикла, которые можно переопределить для выполнения действий в определенных точках создания.
boolean canCreate( \IPS\Member $member [, \IPS\Node\Model $container=NULL [, boolean $showError=FALSE ] ] )
Прежде чем отобразить форму, этот метод вызывается, чтобы определить, имеет ли пользователь разрешение на создание новых элементов. Большинство проверок разрешений обрабатываются автоматически, поэтому обычно вам не нужно переопределять этот метод, но если вам нужно выполнить дополнительные проверки, они могут быть выполнены здесь. Например, модуль личных сообщений имеет настройку, которая может ограничивать количество сообщений, отправленных за день, поэтому данный лимит проверяется в этом методе модели личных сообщений.
- $member (\IPS\Member, обязательный ) - пользователь, чьи разрешения проверяются.
- $container (\IPS\Node\Model, необязательный) - контейнер, в котором будет создан элемент, если необходимо.
- $showError (boolean, необязательный, по умолчанию FALSE) - по умолчанию этот метод вернёт знаение true/false. Если $showError имеет значение TRUE, вместо того, чтобы возвращать значение, этот метод будет показывать ошибку пользователю.
void processBeforeCreate( массив $values )
Данный метод вызывается непосредственно перед вводом данных в базу данных, но после того, как объект был создан в памяти, и были установлены стандартные значения, такие как автор, дата и любые поля, которые могут быть установлены благодаря наличию того же ключа, как и столбец базы данных. Важно отметить, что этот метод работает только для новых элементов.
- $values (массив, обязательный) - Массив значений из формы.
void processForm( массив $values )
Данный метод вызывается сразу же после processBeforeCreate (см. ниже). Он отличается от этого метода тем, что он также работает для редактируемых элементов. Вы должны использовать его для установки любых полей, добавленных в formElements(), которые являются более сложными, чем просто установить прямое значение (что было бы сделано автоматически). Стандартный метод устанавливает заголовок, теги (если включено - смотрите раздел Теги) и другие данные, поэтому убедитесь, что вы вызываете метод в родительском классе, чтобы не переопределить это.
- $values (массив, обязательный) - Массив значений из формы.
void processAfterCreate( \IPS\Comment\Content $comment=NULL, массив $values )
Вызывается после того, как элемент контента был добавлен в базу данных, и была завершена вся обработка, включая создание первого комментария, если включено.
- $comment (\IPS\Comment\Content, required, default NULL) - Объект для первого комментария, если применимо
- $values (array, required) - Массив значений из формы.
Увеличение количества сообщений
По умолчанию, при публикации пользователем нового элемента контента, его количество сообщений увеличивается на единицу. Это может быть нежелательно в зависимости от цели вашего приложения, поэтому, определяя метод incrementPostCount на вашей модели, вы можете контролировать это поведение.
boolean incrementPostCount( \IPS\Node\Model $container=NULL )
- $container (\IPS\Node\Model, optional, default NULL) - Контейнер, в котором создается элемент контента, если это применимо.
Возвращает true или false из этого метода, чтобы определить, следует ли увеличивать количество сообщений пользователя.