Цепочка наследования
Ваша модель комментариев расширяет несколько классов. А именно:
- \IPS\Content\Comment - Предоставляет возможности комментариев. Рассмотрим эти функции в данном разделе.
- \IPS\Content - Предоставляет небольшое количество функций, которые являются общими для моделей контента и моделей комментариев, таких как получение автора и работа с $databaseColumnMap.
- \IPS\Patterns\ActiveRecord - Обеспечивает функциональность загрузки элементов из базы данных, работы с их свойствами, сохранения и удаления. Дополнительную информацию об этом класс смотрите в документе Active Records.
Основной скелет
namespace IPS\yourApp;
class _Comment extends \IPS\Content\Comment
{
/**
* @brief [ActiveRecord] Multiton Store
*/
protected static $multitons;
/**
* @brief Default Values
*/
protected static $defaultValues = NULL;
/**
* @brief [Content\Comment] Item Class
*/
public static $itemClass = 'IPS\yourApp\YourClass';
/**
* @brief [ActiveRecord] Database Table
*/
public static $databaseTable = 'yourapp_comments';
/**
* @brief [ActiveRecord] Database Prefix
*/
public static $databasePrefix = 'comment_';
/**
* @brief Title
*/
public static $title = ‘thing_comments’;
/**
* @brief Database Column Map
*/
public static $databaseColumnMap = array(
'item' => 'fid',
'author' => 'mid',
'author_name' => 'author',
'content' => 'text',
'date' => 'date',
'ip_address' => 'ip_address'
);
}
Указание свойств вашего класса
Модели комментариев требуют нескольких статических свойств для настройки их поведения, большинство из которых идентичны модели элемента контента. Многие из них относятся к классу Active Records.
public static $application = 'string';
Обязательное. Ключ приложения, к которому принадлежит комментарий.
public static $module = 'string';
Обязательное. Ключ модуля, к которому принадлежит комментарий.
public static $multitons = array();
public static $defaultValues = NULL;
Обязательное. Унаследовано от \IPS\Patterns\ActiveRecord.
Эти два свойтсва требуемы классом \IPS\Patterns\ActiveRecord. Они не нуждаются в переопределени; они просто должны быть определены.
public static $databaseTable = 'string';
Обязательное. Унаследовано от \IPS\Patterns\ActiveRecord.
Имя таблицы базы данных, в которой хранятся эти комментарии.
public static $databasePrefix = 'string';
Необязательное. Унаследовано от \IPS\Patterns\ActiveRecord.
Указывает префикс поля, используемый этой таблицей.
public static $databaseColumnMap = array();
Обязательное. Возможности, предоставляемые расширяемыми классами вашей модели, будут проверять этот массив, чтобы узнать, какие столбцы какую информацию хранят в вашей базе данных. Требуются следующие элементы:
- item Обязательный. Должен содержать название столбца, который хранит ID элемента контента, к которому принадлежит этот комментарий.
- author Обязательный. Должен содержать название столбца, который хранит номер ID пользователя, опубликовавшего контент.
- content Обязательный. Должен содержать название столбца, который хранит фактический текст комментария.
- date Обязательный. Должен содержать название столбца, который хранит unix-время даты публикации комментария.
- ip_address Обязательный. Должен содержать название столбца, который хранит IP-адрес автора комментария.
- author_name Необязательный. Может содержать название столбца, который хранит имя пользователя, опубликовавшего комментарий.
- first Необязательный. Может содержать название столбца, который хранит логическое значение, указывающее, является ли этот комментарий первым у элемента.
public static $commentTemplate = 'string';
Необязательный. Задает шаблон, который будет использоваться для отображения комментария (смотрите метод html() ниже). Например:
array( array( 'global', 'core', 'front' ), 'commentContainer' );
public static $formTemplate = 'string';
Необязательный. Задает шаблон, который будет использоваться для отображения формы комментария. Например:
array( array( 'forms', 'core', 'front' ), 'commentTemplate' );
public static $formLangPrefix = 'string';
Необязательный. Указывает префикс для добавления к языковым строкам, используемым моделью, что позволяет создавать собственные языковые строки для вашей цели.
Доступные методы в модели комментариев
В дополнение к тем, которые предоставляются классом \IPS\Patterns\ActiveRecord (которые работают точно так же, как и для моделей элементов контента), доступно несколько дополнительных методов.
\IPS\Http\Url url( string $action )
Возвращает URL-адрес комментария, автоматически вычисляет правильный номер страницы, в том числе и якорь в нужном месте страницы. Этот метод уже определен для вас.
$action (string, необязательный) если параметр будет передан, добавится параметр 'do=value' в URL-адрес.
\IPS\Content\Item item()
Возвращает элемент контента, которому принадлежит этот комментарий.
IPS\Member author()
Возвращает объект \IPS\Member для пользователя, разместившего элемент контента. Например:
$comment = YourClass::load( 1 );
$user = $comment->author();
echo $comment->name;
string truncated( [ boolean $oneLine ] )
Возвращает содержимое в формате, подходящем для использования с виджетом data-ipsTruncate.
$oneLine (boolean, необязательный, по умолчанию FALSE) - По умолчанию абзацы превращаются в разрыв строки. Если этот параметр имеет значение TRUE, параграфы заменяются пробелами вместо разрывов строк, что делает усеченный контент подходящим для однострочного отображения.
boolean canEdit( [ \IPS\Member $member ] )
Возвращает логическое значение, указывающее, может ли передаваемый пользователь редактировать элемент контента.
- $member (\IPS\Member, необязательный) - Если предоставлено, при выполнении проверки используются разрешения пользователя. По умолчанию используется текущий авторизованный пользователь.
boolean canDelete( [ \IPS\Member $member ] )
Возвращает логическое значение, указывающее, может ли передаваемый пользователь удалить элемент контента.
- $member (\IPS\Member, необязательный) - Если предоставлено, при выполнении проверки используются разрешения пользователя. По умолчанию используется текущий авторизованный пользователь.
boolean static modPermission( string $type [, \IPS\Member $member [, \IPS\Node\Model $container ] ] )
Возвращает логическое значение, указывающее, имеет ли передаваемый пользователь разрешение на выполнение действия, указанного в параметре $type в указанном контейнере $container (если указан).
- $type (string, обязательный) - Тип проверяемого разрешения. Допустимые значения:
- edit.
- delete.
- move.
- hide (если включено скрытие/одобрение).
- unhide (если включено скрытие/одобрение).
- view_hidden (если включено скрытие/одобрение)
- $member (\IPS\Member, необязательный) - Если предоставлено, использует разрешения этого пользователя при выполнении проверки. По умолчанию используется текущий авторизованный пользователь.
- $container (\IPS\Node\Model, необязательный) - Если предоставлено, проверяет разрешение именно в этом контейнере.
void modAction( string $type [, \IPS\Member $member [, string $reason ] ] )
Выполняет указанное действие модерации. Выбрасывает исключение OutOfRangeException, если пользователь не имеет разрешения на выполнение этого действия.
- $type (строка, обязательный) - Тип выполняемого действия модерации. Обратитесь к списку в предыдущем методе для допустимых значений.
- $member (\IPS\Member, необязательный) - Если предоставлено, использует разрешения этого пользователя при выполнении проверки. По умолчанию используется текущий авторизованный пользователь.
- $reason (строка, необязательный) - Используется только для действий скрыть/показать; определяет причину, по которой предпринимается действие.
boolean isFirst()
Возвращает true или false, что указывает, является ли это первым комментарием элемента контента.
boolean isIgnored( [ \IPS\Member $member ] )
Указывает, игнорирует ли пользователь автора комментария.
- $member (\IPS\Member, optional) - если указано, используются предпочтения данного пользователя при проверки на статус игнорирования. По умолчанию используется текущий авторизованный пользователь.
string dateLine()
Возвращает строку, которая может использоваться в шаблонах, чтобы показывать, когда был добавлен комментарий, например. "Добавлено 2 часа назад".
string html()
Возвращает HTML-код для отображения комментария, обёрнутый в шаблон комментария.