Наследственная цепочка
Ваша модель контента расширяет несколько классов. В свою очередь, это:
- \IPS\Content\Item - Предоставляет возможности Элементов Контента. Данный класс содержит весь код для различных дополнительных функций элементов контента, которые вы активируете, добавив свойства и интерфейсы в вашу модель.
- \IPS\Content - Предоставляет небольшое количество функций, которые являются общими для моделей Элемента Контента и моделей Комментария Контента (проясним позже) таких, как получение автора и работа с $databaseColumnMap.
- \IPS\Patterns\ActiveRecord - Обеспечивает функциональность загрузки элементов из базы данных, работы с их свойствами, сохранения и удаления. Дополнительную информацию об этом классе см. в документе Active Records.
Основной скелет
<?php namespace IPS\yourapp; class _YourClass extends \IPS\Content\Item { /** * @brief Multiton Store */ protected static $multitons; /** * @brief Default Values */ protected static $defaultValues = NULL; /** * @brief Application */ public static $application = 'yourapp'; /** * @brief Module */ public static $module = 'yourmodule'; /** * @brief Database Table */ public static $databaseTable = 'table'; /** * @brief Database Prefix */ public static $databasePrefix = 'prefix_'; /** * @brief Database Column Map */ public static $databaseColumnMap = array( 'author' => 'author' ); /** * @brief Title */ public static $title = ‘thing’; /** * Get URL * * @param string|NULL * @return \IPS\Http\Url */ public function url( $action=NULL ) { $url = \IPS\Http\Url::internal( ... ); if ( $action ) { $url = $url->setQueryString( 'do', $action ); } return $url; } }
Указание свойств класса
Модели Элемента Контента требуют указания нескольких статических свойств для настройки их поведения. Многие из них относятся к классу 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();
Обязательное. Возможности, предоставленные классами выше, которые расширяет ваша модель, будут проверять этот массив, чтобы узнать, какие столбцы хранятся в вашей базе данных. Требуются следующие элементы, и во всех случаях значение с $databasePrefix опущено:
- author - Должно содержать имя столбца, содержащего ID пользователя, разместившего контент.
- title - Должно содержать имя столбца, содержащего заголовок контента.
- date - Должно содержать имя столбца, который содержит UNIX-время, когда был создан элемент контента.
- ip_address - Должно содержать имя столбца (без $databasePrefix), который содержит IP-адрес пользователя, разместившего контент.
public string $title = 'string';
Ключ для языковой строки, описывающий то, чем является ваш элемент контента (Например, 'Тема', 'Файла', 'Изображение', и т.д.)
Доступные методы моделей Элементов Контента
В дополнение к тем методам, которые предоставляются \IPS\Patterns\ActiveRecord (которые работают точно так же, как и для нод), доступен ряд дополнительных методов.
\IPS\Patterns\ActiveRecordIterator static getItemsWithPermission( ... )
Получает элементы контента, к которым у текущего пользователя есть доступ. Смотрите phpDoc в файле /system/Content/Item.php для просмотра всех поддерживаемых аргументов.
\IPS\Member author()
Возвращает объект \IPS\Member пользователя, разместившего элемент контента. Например:
$item = YourClass::load( 1 );
$user = $item->author();
echo $user->name;
boolean canView( [ \IPS\Member $member=NULL ] )
Возвращает логическое значение, указывающее, может ли предоставленный пользователь просматривать элемент контента. По умолчанию всегда будет возвращать значение TRUE, но зависит от включены ли разрешения и если включено Hiding.
- $member (\IPS\Member, optional) - Если предоставлено, используются разрешения текущего пользователя при выполнении проверки. По умолчанию будет использоваться текущий пользователь.
boolean canEdit( [ \IPS\Member $member=NULL ] )
Возвращает логическое значение, указывающее, может ли предоставленный пользователь редактировать элемент контента.
- $member (\IPS\Member, optional) - Если предоставлено, используются разрешения текущего пользователя при выполнении проверки. По умолчанию будет использоваться текущий пользователь.
boolean canDelete( [ \IPS\Member $member=NULL ] )
Возвращает логическое значение, указывающее, может ли предоставленный пользователь удалить элемент контента.
- $member (\IPS\Member, optional) - Если предоставлено, используются разрешения текущего пользователя при выполнении проверки. По умолчанию будет использоваться текущий пользователь.
boolean static modPermission( string $type [, \IPS\Member $member=NULL [, \IPS\Node\Model $container=NULL ] ] )
Возвращает логическое значение, указывающее, имеет ли предоставленный пользователь разрешение выполнить действие, указанное параметром $type в указанном контейнере $container (если предоставлен).
$type (string, required)
Тип проверяемого разрешения. Допустимые значения:
- edit
- delete
- move
- feature (если включена такая возможность)
- unfeature (если включена такая возможность)
- pin (если включена такая возможность)
- unpin (если включена такая возможность)
- lock (если включена такая возможность)
- unlock (если включена такая возможность)
- hide (если включена такая возможность)
- unhide (если включена такая возможность)
- view_hidden (если включена такая возможность)
$member (\IPS\Member, optional)
Если предоставлено, используются разрешения текущего пользователя при выполнении проверки. По умолчанию будет использоваться текущий пользователь.
$container (\IPS\Node\Model, optional)
Если предоставлено, проверяет разрешение именно в этом контейнере ноды.
void modAction( string $type [, \IPS\Member $member=NULL [, string $reason=NULL ] ] )
Выполняет указанное действие модерации. Выбрасывает исключение OutOfRangeException, если пользователь не имеет разрешения на выполнение этого действия.
- $type (строка, обязательно) - Тип выполняемого действия модерации. Допустимые значения можете найти в списке предыдущего метода.
- $member (\IPS\Member, необязательно) - Если предоставлено, используются разрешения текущего пользователя при выполнении проверки. По умолчанию будет использоваться текущий пользователь.
- $reason (строка, необязательно) - Используется только для действий скрыть/показать; определяет причину, по которой предпринимается действие.