Magento类别树未在类别编辑和产品编辑中显示

时间:2012-04-03 13:07:53

标签: magento

我正在使用magento 1.5并且在类别编辑和产品编辑页面中有奇怪的问题 admin,一个类别的子类别树未显示我已编写自定义代码以查找该特定类别的子类别,并且未显示使用该代码的任何子类别,但是当我在数据库中检查了该特定类别的所有子类别时是可用的。

简单来说,一个类别的子类别树没有显示在管理员的类别编辑和产品编辑页面中。

谢谢, 截拳道

4 个答案:

答案 0 :(得分:7)

检查children_count中的catalog_category_entity列。如果您遇到我在1.6上遇到的问题,那么您可能会有负值。

如果是这种情况,请尝试:

UPDATE catalog_category_entity SET children_count = "1" WHERE children_count < 0;

几个月前我用它时没有任何不良影响。虽然,理想情况下,您需要计算children_count并正确设置。

编辑:我也遇到了与错误级别相同的问题。如果您导入了所有产品,则级别可能会收到错误的值。如果您有沙箱设置,请尝试以下方法:

    $categories = Mage::getModel('catalog/category')->getCollection();

    foreach ($categories as $category) {
        $category = $category->load($category->getId());

        $path = $category->getPath();

        $levels = explode('/', $path);

        if (is_array($levels) && count($levels)) {
            $category->setLevel(count($levels));
        }

        $resource = Mage::getSingleton('core/resource');

        /**
         * Category save handler doesn't save level when using
         * the API. Use hard query instead.
         */
        $writeConnection = $resource->getConnection('core_write');
        $writeConnection->query('UPDATE catalog_category_entity SET level = ' . $category->getLevel() . ' WHERE entity_id = ' . $category->getId());
    }

答案 1 :(得分:4)

我可以向您保证,Zachary Schuessler解决方案在1.7.0.2中完美运行。 我刚发帖,所以它可以帮助解决未来的问题。

1-使用“目录/管理类别”从“根目录”类别中删除了大量产品并取消选择“类别产品”选项卡中的产品后,我遇到了此问题。

2-模式类别是硬件,而我内部有几个子类别,扩展“+”符号刚刚消失,因此后端的所有子类别都很好,前端都很好。

3-当Zachary Schuessler说并在硬件类别ID上查看数据库时,“catalog_category_entity”中的“children_count”列的值为“-20”。

4-将值编辑为“20”,后端的所有内容都恢复正常。

注意:当我从一个类别移动子类别并将其移到其他不同类别中时,这也发生在我身上。

干杯!

答案 2 :(得分:1)

这是一个SQL语句,用于更新所有子项数,如果它们与移动类别不同步。如果服务器在另一个类别中移动一个类别中途崩溃,我们就会遇到这个问题。

UPDATE catalog_category_entity a
    INNER JOIN
    (SELECT  parent_id, count(entity_id) totalChildren
       FROM    catalog_category_entity
      GROUP   BY parent_id) b ON a.entity_id=b.parent_id
SET a.children_count = b.totalChildren;

答案 3 :(得分:1)

更新这两个查询

UPDATE catalog_category_entity SET level =
(SELECT LENGTH(path)-LENGTH(REPLACE(path,'/','')) AS tmpl
FROM (SELECT * FROM catalog_category_entity) AS table1
WHERE catalog_category_entity.entity_id = table1.entity_id);

UPDATE catalog_category_entity SET children_count =
(SELECT COUNT(*) FROM
(SELECT * FROM catalog_category_entity) AS table2
WHERE path LIKE
CONCAT(catalog_category_entity.path,"/%"));