Версия: 6.x
burger close
Обновление ReadyScript с версии 4.0 до 4.1

Обзор технических изменений ReadyScript 4.1, влияющих на совместимость с ReadyScript 4.0

Данный материал предназначен для разработчиков, создававших собственные модули с использованием контроллеров административной панели.

В ReadyScript 4.1 переработано взаимодействие с древовидными списками, в следствие этого необходимо внести изменения в административные контроллеры которые используют способ отображения viewAsTableTree() и viewAsTree()

Для контроллеров, использующих viewAsTableTree() с плоским списком в левой части (EntityList)

В методе __construct:

Следует использовать метод $this->setCategoryApi() для установки объекта api, работающего с элементами списка.

class PropCtrl extends \RS\Controller\Admin\Crud
{
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.

class PropCtrl extends \RS\Controller\Admin\Crud
{
...
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, работающего с элементами списка.

class Ctrl extends \RS\Controller\Admin\Crud
{
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().

class Ctrl extends \RS\Controller\Admin\Crud
{
...
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().

class Ctrl extends \RS\Controller\Admin\Crud
{
...
public function helperIndex()
{
...
$helper->setTreeFilter($this->getIndexTreeFilterControl());
...
}
protected function getIndexTreeFilterControl()
{
$filter = new \RS\Html\Filter\Control(array( ... ));
return $filter;
}
...
}

Для контроллеров, использующих viewAsTree()

В методе __construct:

После вызова parent::__construct() добавить строку

class Ctrl extends \RS\Controller\Admin\Crud
{
public function __construct()
{
parent::__construct(new \Affiliate\Model\AffiliateApi());
$this->setTreeApi($this->api);
}
...
}

Добавить метод getIndexTreeElement()

getIndexTreeElement() должен возвращать объект RS::Html::Tree::Element с настройками отображения дерева, который передаётся первым параметром в setTree().

class Ctrl extends \RS\Controller\Admin\Crud
{
...
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().

class Ctrl extends \RS\Controller\Admin\Crud
{
...
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>