Закусило Александр пишет:getInstance() реализует паттерн Singletone. И предназначен для возвращения одной копии объекта всегда(Singletone). Что касается selectList, то она использует родительскую функцию getSelectList(0) и действительно запрашивает доп. поля. Это всё можно использовать, но не понятно. Какую задачу Вы хотите решить и что получить? Какая структура данных?
Кстати на всякий случай у нас есть видеоуроки по программированию
Я хочу получить 2 связанные таблицы: категории и устройства.
ORM категории:
'site_id' => new Type\CurrentSite(),
'title' => new Type\Varchar(array(
'maxLength' => '150',
'description' => t('Название'),
'Checker' => array('chkEmpty',t('Необходимо заполнить поле название')),
'attr' => array(array(
'data-autotranslit' => 'alias'
))
)),
'alias' => new Type\Varchar(array(
'maxLength' => '150',
'description' => t('Псевдоним(Ан.яз)'),
)),
'image' => new Type\Image(array(
'maxLength' => '255',
'max_file_size' => 10000000,
'allow_file_types' => array('image/pjpeg', 'image/jpeg', 'image/png', 'image/gif'),
'description' => t('Картинка'),
)),
'public' => new Type\Integer(array(
'description' => t('Показывать категорию'),
'maxLength' => 1,
'default' => 1,
'checkboxView' => array(1,0)
)),
'sortn' => new Type\Integer(array(
'description' => t('Сортировочный индекс'),
'maxLength' => '11',
'visible' => false,
)),
API категории:
<?php
namespace Service\Model;
class DeviceDirApi extends \RS\Module\AbstractModel\TreeCookieList
{
protected
static $instance;
function __construct()
{
parent::__construct(new \Service\Model\Orm\DeviceDir,
array(
'multisite' => true,
'idField' => 'id',
'aliasField' => 'alias',
'nameField' => 'title',
'sortField' => 'sortn',
'defaultOrder' => 'sortn',
));
}
static function getInstance()
{
if (!isset(self::$instance)) self::$instance = new self();
return self::$instance;
}
static function selectList($include_root = true)
{
$_this = self::getInstance();
$list = $_this -> getSelectList(0);
return $include_root ? array('' => t('Верхний уровень')) + $list : $list;
}
function listWithAll()
{
$tree = $this->getTreeList();
array_unshift($tree, array('fields' => array(
'noOtherColumns' => true,
'noCheckbox' => true,
'noDraggable' => true,
'noFullValue' => true,
'title' => t('Все'),
'id' => 0,
'alias' => ''
),
'child' => array()
));
return $tree;
}
}
ORM устройств:
'site_id' => new Type\CurrentSite(),
'title' => new Type\Varchar(array(
'maxLength' => '255',
'description' => t('Название'),
'Checker' => array('chkEmpty', t('Укажите название устройства')),
'attr' => array(array(
'data-autotranslit' => 'alias'
))
)),
'alias' => new Type\Varchar(array(
'maxLength' => '150',
'description' => t('URL имя'),
'hint' => t('Могут использоваться только английские буквы, цифры, знак подчеркивания, запятая, точка и минус'),
'meVisible' => false,
'Checker' => array('chkalias', null),
)),
'parent' => new Type\Integer(array(
'index' => true,
'description' => t('Категория'),
'List' => array(array(new \Service\Model\DeviceDirApi(), 'selectList')),
'Attr' => array(array('size' => 0)),
)),
'image' => new Type\Image(array(
'maxLength' => '255',
'max_file_size' => 10000000,
'allow_file_types' => array('image/pjpeg', 'image/jpeg', 'image/png', 'image/gif'),
'description' => t('Картинка'),
)),
'sortn' => new Type\Integer(array(
'description' => t('Сортировочный индекс'),
'maxLength' => '11',
'visible' => false,
)),
'public' => new Type\Integer(array(
'maxLength' => '1',
'index' => true,
'description' => t('Показывать устройство'),
'default' => 1,
'CheckboxView' => array(1, 0),
)),
Собственно вопрос по этому полю
'parent' => new Type\Integer(array(
'index' => true,
'description' => t('Категория'),
'List' => array(array(new \Service\Model\DeviceDirApi(), 'selectList')),
'Attr' => array(array('size' => 0)),
)),
Как мне вернуть SelectList из DeviceDir?