Помощь с ExtJS

Есть два поля xtype MODx.tree.Tree.

Мне нужно, чтобы выбор пользователя при обновлении страницы сохранялся и при повторном открытии сохранялся. Сейчас, если выбрать в 1 дереве узел А, то при обновлении в двух деревьях будет выбран узел А. Как можно разделить деревья, чтобы выбранные узлы относились к своему дереву?
Сейчас написано вот что.
yandexMarket.tree.Categories = function(config) {
	config = config || {};
    Ext.apply(config,{
        id : "mycomponent-grid-mygrid",
        url: yandexMarket.config.connector_url,
        action: 'mgr/product/getcategories',
        listeners: {
            checkchange: function(n, checked) {

                MODx.Ajax.request({
                    url: yandexMarket.config.connector_url,
                    params: {
                        id : "mycomponent-grid-mygrid",
                        action: 'mgr/product/changecategories',
                        category_id: n.attributes.pk,
                        checked: checked
                    }
                });

                // If a parent node is unchecked, uncheck all the children
                if (!n.getUI().isChecked()) {
                    n.expandChildNodes(true);
                    n.eachChild(function(child){
                        child.ui.toggleCheck(false);
                    })
                } else {
                    n.expandChildNodes(true);
                    n.eachChild(function(child){
                        child.ui.toggleCheck(true);
                    })
                }
            },
        }
	});
	yandexMarket.tree.Categories.superclass.constructor.call(this,config);
};

yandexMarket.tree.Categoriess = function(config) {
	config = config || {};
    Ext.apply(config,{
        id : "mycomponent-grid-mygrid1",
        url: yandexMarket.config.connector_url,
        action: 'mgr/product/getcategories',
        listeners: {
            checkchange: function(n, checked) {

                MODx.Ajax.request({
                    url: yandexMarket.config.connector_url,
                    params: {
                        id : "mycomponent-grid-mygrid1",
                        action: 'mgr/product/changecategories',
                        category_id: n.attributes.pk,
                        checked: checked
                    }
                });

                // If a parent node is unchecked, uncheck all the children
                if (!n.getUI().isChecked()) {
                    n.expandChildNodes(true);
                    n.eachChild(function(child){
                        child.ui.toggleCheck(false);
                    })
                } else {
                    n.expandChildNodes(true);
                    n.eachChild(function(child){
                        child.ui.toggleCheck(true);
                    })
                }
            },
        }
	});
	yandexMarket.tree.Categories.superclass.constructor.call(this,config);
};
Ext.extend(yandexMarket.tree.Categories, MODx.tree.Tree);
Ext.extend(yandexMarket.tree.Categoriess, MODx.tree.Tree);
Ext.reg('yandex-market-tree-categories', yandexMarket.tree.Categories);
Ext.reg('yandex-market-tree-categories1', yandexMarket.tree.Categoriess);
Код скрипта mgr/product/changecategories, отвечающий за сохранение выбора узла
<?php
class yandexMarketChangeCategoriesProcessor extends modObjectProcessor {
    public $classKey = 'yandexMarketCategories';
	/** {@inheritDoc} */
	public function process() {
        $categoryId = $this->getProperty('category_id');
        $checked = $this->getProperty('checked') == 'true';
        $fields = array('category_id' => $categoryId);
        /** @var yandexMarketCategories $object */
        $object = $this->modx->getObject($this->classKey, $fields);

        if (!$object && $checked) {
            /** @var yandexMarketCategories $res */
            $res = $this->modx->newObject($this->classKey);
            $res->fromArray($fields);
            $res->save();
        } else if ($object && !$checked) {
            $object->remove();
        }
        return $this->success('');
	}
}
return 'yandexMarketChangeCategoriesProcessor';
Спасибо за потраченное время и извините за глупый вопрос!)
Danil
03 марта 2020, 03:42
modx.pro
507
0

Комментарии: 2

Максим
03 марта 2020, 23:50
1
+1
Если я правильно понял, то вы для обоих деревьев храните инфу в одной таблице. Тогда нужно ее хоть как-то разграничивать. Помимо category_id добавить еще поля типа market and webmaster, с дефолтным значеним 0. Если дерево маркета, то в маркет 1, если дерево вебмастера, то в него 1.
    Danil
    05 марта 2020, 02:48
    0
    Спасибо, помог! В таблице только поле category_id было. Не стал в таблицу добавлять, просто в начало category_id стал добавлять ключ, а по нему уже определять к какому дереву относится объект и проставлять чеки.
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    2