Обзор технических изменений ReadyScript 4.1, влияющих на совместимость с ReadyScript 4.0
Данный материал предназначен для разработчиков, создававших собственные модули с использованием контроллеров административной панели.
В ReadyScript 4.1 переработано взаимодействие с древовидными списками, в следствие этого необходимо внести изменения в административные контроллеры которые используют способ отображения viewAsTableTree() и viewAsTree()
Для контроллеров, использующих viewAsTableTree() с плоским списком в левой части (EntityList)
В методе __construct:
Следует использовать метод $this->setCategoryApi() для установки объекта api, работающего с элементами списка.
{
public function __construct()
{
parent::__construct(new \Catalog\Model\PropertyApi());
$this->setCategoryApi(new \Catalog\Model\PropertyDirApi(), t('группу характеристик'));
}
...
}
Для получения объекта api следует использовать метод $this->getCategoryApi().
В методе helperIndex:
Изменить способ отображения с viewAsTableTree() на viewAsTableCategory()
Заменить использование методов:
- setTreeListFunction() - устанавливает название метода для выборки элемнтов
- setTree() - устанавливает объект настроек отображения дерева
- setTreeBottomToolbar() - устанавливает объект настроек нужней панели инструментов
- setTreeFilter() - устанавливает объект настроек фильтра
на
- setCategoryListFunction() – указанная здесь функция должна возвращать плоский список orm объектов (если setCategoryListFunction() не вызваны - используется функция 'getList')
- setCategory()
- setCategoryBottomToolbar()
- setCategoryFilter()
В методе setCategory() в качестве первого аргумента вместо объекта RS::Html::Tree::Element следует использовать объект RS::Html::Category::Element.
{
...
public function helperIndex()
{
...
$helper->setCategoryListFunction('getList');
...
$helper->setCategory(new \RS\Html\Category\Element( ... ));
...
$helper->setCategoryBottomToolbar(new \RS\Html\Toolbar\Element( ... ));
...
$helper->setCategoryFilter(new \RS\Html\Filter\Control( ... ));
...
}
...
}
Для контроллеров, использующих viewAsTableTree() с древовидным списком в левой части (TreeList)
В методе __construct:
Следует использовать метод $this->setTreeApi() для установки объекта api, работающего с элементами списка.
{
public function __construct()
{
parent::__construct(new \Catalog\Model\Api());
$this->setTreeApi(new \Catalog\Model\DirApi(), t('категорию'));
}
...
}
Для получения объекта api использовать - $this->getTreeApi().
Реализовать метод getIndexTreeElement()
getIndexTreeElement() должен возвращать объект RS::Html::Tree::Element с настройками отображения дерева, который передаётся первым аргументом в setTree().
{
...
public function helperIndex()
{
...
$helper->setTree($this->getIndexTreeElement(), $this->getTreeApi());
...
}
protected function getIndexTreeElement()
{
$tree = new \RS\Html\Tree\Element(array( ... ));
return $tree;
}
...
}
Если используется фильтр по элементам дерева - Добавить метод getIndexTreeFilterControl()
getIndexTreeFilterControl() должен возвращать объект RS::Html::Filter::Control с настройками фильтра, который передаётся первым параметром в setTreeFilter().
{
...
public function helperIndex()
{
...
$helper->setTreeFilter($this->getIndexTreeFilterControl());
...
}
protected function getIndexTreeFilterControl()
{
$filter = new \RS\Html\Filter\Control(array( ... ));
return $filter;
}
...
}
Для контроллеров, использующих viewAsTree()
В методе __construct:
После вызова parent::__construct() добавить строку
{
public function __construct()
{
parent::__construct(new \Affiliate\Model\AffiliateApi());
$this->setTreeApi($this->api);
}
...
}
Добавить метод getIndexTreeElement()
getIndexTreeElement() должен возвращать объект RS::Html::Tree::Element с настройками отображения дерева, который передаётся первым параметром в setTree().
{
...
public function helperIndex()
{
...
$helper->setTree($this->getIndexTreeElement(), $this->getTreeApi());
...
}
protected function getIndexTreeElement()
{
$tree = new \RS\Html\Tree\Element(array( ... ));
return $tree;
}
...
}
Если используется фильтр по элементам дерева - Добавить метод getIndexTreeFilterControl()
getIndexTreeFilterControl() должен возвращать объект RS::Html::Filter::Control с настройками фильтра, который передаётся первым параметром в setTreeFilter().
{
...
public function helperIndex()
{
...
$helper->setTreeFilter($this->getIndexTreeFilterControl());
...
}
protected function getIndexTreeFilterControl()
{
$filter = new \RS\Html\Filter\Control(array( ... ));
return $filter;
}
...
}
Изменения в темах оформления
В шаблонах темы оформления, наличие дочерних элементов у узла древовидного списка следует проверять при помощи метода getChildsCount().
<ul>
{foreach $tree_list as $dir}
<li>
<span>{$dir->getName()}</span>
{if $dir->getChildsCount()}
<ul>
{foreach $dir->getChilds() as $sub_dir}
...
{/foreach}
</ul>
{/if}
</li>
{/foreach}
</ul>