5

私はこれに行き詰まりました。基本的に必要なのは、チェックされたサブカテゴリノードを含むカテゴリツリーノードを自動拡張する方法です。

コードのエントリポイントは js/extjs/ext-tree-checkbox.js'catalog/category/tree.phtml'

jsメソッドでノードを展開することは可能であり、expand()すべてのノードを展開することは難しくありませんが、これはページの速度を大幅に低下させます。

アップデート:

私は次の解決策をテストしました:

  1. js/extjs/ext-tree-checkbox.jsこれを追加してレンダリングメソッドを変更します。

    var tree = n.getOwnerTree();
        if (tree){
            expandNodeIds =  tree.expandNodeIds.split(',');
            for (i in expandNodeIds) 
            {
                if (n.id == expandNodeIds[i])
                    n.expand();
            }
        }
    

このソリューションは機能しますが、パーミッションのツリーが壊れます(もう表示されません)役割

4

3 に答える 3

4

私は少しバグ修正とリファクタリングを行い、@obscuresの回答を小さな拡張機能にパッケージ化しました。GitHubを試してみてください:Kiwigrid_AutoExpandProductCategoryTree

于 2014-11-20T14:17:46.460 に答える
2

なぜなら:

 - Google sees this as a solution

私のソリューションは、クラスMage_Adminhtml_Block_Catalog_Product_Edit_Tab_CategoriesのPhp側にあります。

// start Added stuff
protected $_ubProductCategoriesParents;

public function getUbProductCategories()
{
    if (is_null($this->_ubProductCategoriesParents)) {
        $this->_ubProductCategoriesParents = array();
        $this->_ubProductCategoriesParents = array();
        foreach ($this->getCategoryIds() as $id) {
            $storeId = (int) $this->getRequest()->getParam('store');
            $path = Mage::getResourceModel('catalog/category')
                ->getAttributeRawValue($id, 'path', $storeId); // no model->load ever ever ever
            if (empty($path)) {
                $path = "";
            }
            $parentsIds = explode("/", $path);
            if (!(is_array($parentsIds) && count($parentsIds) > 0)) {
                $parentsIds = array();
            }
            $this->_ubProductCategoriesParents = array_unique(array_merge($this->_ubProductCategoriesParents, $parentsIds));
        }

        //Mage::log(print_r($this->_ubProductCategoriesParents, true));
    }

    return $this->_ubProductCategoriesParents;
}
// end Added stuff

// magento core function from class
protected function _getNodeJson($node, $level = 1)
{
    $item = parent::_getNodeJson($node, $level);

    if ($this->_isParentSelectedCategory($node)) {
        $item['expanded'] = true;
    }

    // added new if statement
    if (!(isset($item['expanded']) && $item['expanded'] == true) && array_search($node->getId(), $this->getUbProductCategories()) !== false) {
        $item['expanded'] = true;
    }

    if (in_array($node->getId(), $this->getCategoryIds())) {
        $item['checked'] = true;
    }

    if ($this->isReadonly()) {
        $item['disabled'] = true;
    }

    return $item;
}

次に、上記のコードをリライトクラスに入れます。

ありがとうございました

于 2014-04-22T21:30:36.360 に答える
1

これですべての問題が修正されます

 var tree = n.getOwnerTree();
    if (tree){
        expandNodeIds =  tree.expandNodeIds;

        if (expandNodeIds) {
            expandNodeIds = expandNodeIds.split(',');
            for (i in expandNodeIds) 
            {
                if (n.id == expandNodeIds[i])
                    n.expand();
            }
        }

render上記のコードを次のメソッドに追加しますjs/extjs/ext-tree-checkbox.js

于 2012-10-29T05:23:01.397 に答える