Jump to content

Модель

Базовый класс, который будут расширять классы вашей ноды, это \IPS\Node\Model. Этот класс предоставляет широкий набор специальных методов для работы с данными вашей ноды. \IPS\Node\Model в свою очередь расширяет \IPS\Patterns\ActiveRecord, предоставляя стандартные способы выборки и взаимодействия с основными данными в вашей базе данных.

<?php

namespace IPS\yourApp;

class _ExampleModel extends \IPS\Node\Model
{
	//...
}

Затем ваша модель может быть загружена в ваши контроллеры, например так:

$item = \IPS\yourApp\exampleModel::load( 1 );

Указание свойств класса

Классы нод требуют несколько статических свойств для настройки своего поведения. Многое наследуется от \IPS\Patterns\ActiveRecord.

protected static $multitons = array();

Обязательное свойство. Унаследовано от \IPS\Patterns\ActiveRecord. Просто должно быть определено подклассами \IPS\Patterns\ActiveRecord.

public static $nodeTitle = 'string';

Обязательное. Ключ языковой строки во множественном числе, определяющий сущность вашей ноды, например "Форумы" или "Категории". 

public static $databaseTable = 'string';

Обязательное. Унаследовано от \IPS\Patterns\ActiveRecord. Задаёт таблицу базы данных, к которой относится паттерн ActiveRecord.

public static $databaseColumnOrder = 'string';

Обязательное. Должен быть столбец в вашей таблице базы данных (без префикса), который содержит номер позиции, в порядке которой будут выстроены ноды (центральный код будет обрабатывать настройку и использовать значение, но вам нужно создать для этого поле - столбец INT).

public static $databasePrefix = 'string';

Необязательное. Унаследовано от \IPS\Patterns\ActiveRecord. Указывает префикс поля, используемого этой таблицей.

public static $databaseColumnId = 'string';

Необязательное (по умолчанию: 'id'). Унаследовано от \IPS\Patterns\ActiveRecord. Задает поле первичного ключа для этой таблицы базы данных.

public static $nodeSortable = boolean;

Необязательное (по умолчанию: true)
Определяет, будут ли ноды сортироваться администраторами в админцентре.

public static $modalForms = boolean;

Необязательное (по умолчанию: false)
Определяет, будут ли формы редактирования/добавления нод в админцентре отображаться во всплывающем модельном окне.

Определение методов вашего класса

В дополнение к методам, унаследованным от \IPS\Patterns\ActiveRecord, класс \IPS\Node\Model также предоставляет дополнительные методы (некоторые из которых обязательны в вашем собственном классе).

public void url()

Обязательный. Должен вернуть объект \IPS\Http\Url, указывающий на местоположение во фронт-енде, где пользователи могут просматривать элементы контента в вашей ноде.

public void form( \IPS\Helpers\Form $form )

Обязательный.
Должен определять элементы формы в объекте $form, которые будут использованы для оображения формы для редактирования/добавления нод в админцентре.

public static array roots()

Возвращает массив нод. Если вы реализуете отношение с родитель-потомок, метод возвращает только те, у которых нет родителя.

public static array search( string $column, string $query, string $order=NULL, mixed $where=array() )

Возвращает массив нод, соответствующих поиску.

public array getButtons( string $url [, boolean $subnode=FALSE] )

Должен вернуть массив кнопок для отображения в дереве нод для нод в админцентре. Базовый класс определяет следующие кнопки автоматически (на основе конфигурации модели ноды):

  • add
  • edit
  • permissions
  • copy
  • empty
  • delete

Вы можете определить дополнительные кнопки. Обязательно вызовите parent::getButtons( $url ) в вашем классе для установки стандартных кнопок.

Геттеры и сеттеры

Поскольку \IPS\Node\Model расширяет \IPS\Patterns\ActiveRecord, могут быть определены геттеры и сеттеры для обработки определённых свойств нод. \IPS\Node\Model определил большинство из них, поэтому вам нужно только определить свои собственные, если хотите обрабатывать поля по-разному. Например, вы всегда определяете метод get__title(), но вам практически никогда не понадобится вручную определять метод get__id().

Свойство Описание Get Set Стандартное значение
$_id Возвращает ID номер вашей ноды. Значение столбца "id" в базе данных.
$_title Возвращает заголовок вашей ноды. Пустая строка
$_description Возвращает описание ноды, или NULL если не применимо. NULL
$_badge Может использоваться для возврата бэйджа, отображаемого при просмотре нод в админцентре. Смотрите phpDocs. NULL
$_icon Может использоваться для возврата иконки в строке, отображаемой при просмотре нод в админцентре. Возвращает CSS класс для иконки. NULL
$_enabled Если реализовано, добавит бэйдж "Включено" / "Отключено", на который можно кликнуть, чтобы переключить статус. Вы должны реализовать это, если у ваших нод есть концепция включения/отключения. NULL
$_locked Если вы используете $_enabled, это можно использовать для указания того, что отдельная нода не может быть включена/отключена и заблокирована в текущем состоянии. NULL
$_position Возвращает позицию ноды. Значение столбца в базе данных, представленное $databaseColumnOrder
$_items Количество элементов контента в ноде NULL
$_comments Количество комментариев к элементам контента в ноде NULL
$_reviews Количество отзывов к элементам контента в ноде NULL

Формы модели

При просмотре нод в админцентре Invision Community автоматически строит формы для их добавления/изменения. Поэтому вы должны определить метод формы в вашей модели, которые должны строить элементы форм для отображения. Например:

public function form( \IPS\Helpers\Form $form )
{
	$form->add( new \IPS\Helpers\Form\Translatable( 'category_title', NULL, TRUE, array( 'app' => 'yourApp', 'key' => ( $this->id ? "yourApp_category_{$this->id}" : NULL ) ) ) );
	$form->add( new \IPS\Helpers\Form\YesNo( 'category_example', $this->example ) );
}

Этот код создаёт форму с двумя элементами - Переводимое поле, позволяющее администратору установить локализованное название вашей ноды, и поле ДаНет для другого (не существующего, в данном случае) свойства.

При сохранении формы, любые поля, соответствующие столбцам в таблице базы данных, будут установлены автоматически. Однако вам может потребоваться дополнительная работа. В этом примере, поскольку заголовок является переводимым, его нельзя хранить в определенном столбце базы данных, поэтому нам нужно сохранить его в языковой системе. Это можно сделать, переопределив метод saveForm(). Например так:

public function saveForm( $values )
{
	// Need to do this as if we’re creating a new node, we
	// won’t have an ID yet and the language system will need one to
	// store the title.
	if ( !$this->id )
	{
		$this->save();
	}
	
	\IPS\Lang::saveCustom( 'yourApp', "yourApp_category_{$this->id}", $values['category_title'] );
  	parent::saveForm( $values );
}

 




Messenger

    ×
    ×
    • Create New...

    Important Information

    By using our site you agree to our Privacy Policy