2012-04-03 25 views
3

私はMagento 1.5を使用しています。 のカテゴリ編集と商品編集ページに奇妙な問題があります。管理者は、あるカテゴリのサブカテゴリツリーが表示されません。特定のカテゴリのサブカテゴリを見つけるためのコードと、そのコードを使用してサブカテゴリを表示しないコードがありますが、データベースをチェックインすると、その特定のカテゴリのすべてのサブカテゴリが利用可能になります。Magentoカテゴリのツリーがカテゴリ編集とプロダクトの編集でおしゃべりになっていません

簡単な言葉では、1つのカテゴリのサブカテゴリツリーは、カテゴリ編集および管理ページの商品編集ページに表示されません。

おかげで、 JEET

+0

チェックこのサイト:http://www.sonassi.com/knowledge-base/magento-kb/magento-category -children-count-fix/- children_countクエリは私が必要としたものでした –

答えて

4

私はザカリーSchuesslerソリューションは1.7.0.2で完璧に動作することを保証することができます。 今後の質問に役立つように投稿しています。

1-「カタログ/カテゴリの管理」を使用して、ルートカテゴリの下位カテゴリから製品をたくさん削除し、「カテゴリ製品」タブの製品の選択を解除した後、この問題が発生しました。

2 - パターンのカテゴリはハードウェアだった、と私はいくつかのサブカテゴリを持っていたの内側に、展開する「+」記号は、ちょうど消えたとように、バックエンドでのすべてのサブカテゴリ、フロントエンドのすべての罰金。

3 Zachary Schuesslerが言っていて、でデータベースを見ていましたか?ハードウェアカテゴリID「catalog_category_entity」の「children_count」列の値が「-20」でした。

4-値を「20」に編集し、バックエンドですべて正常だった。

注:これは私があるカテゴリからサブカテゴリを移動し、それを別のカテゴリに移動したときに私にも起こりました。

乾杯!

+0

ありがとう!あなたは私を救った。それは私の場合も子どもの数がマイナスだったからです。 – Zsolti

7

catalog_category_entityであなたのchildren_count列を確認してください。私が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()); 
    } 
+0

ありがとう、Zacharyが動作していません...これは何が問題なのか分かりません。 – Jitendra

+0

@Jitendraもっとコードを追加しました。それが動作するかどうか私に知らせてください。 –

+0

@Jitendra - 解決策を見つけましたか?それが他のものであっても、答えとして追加して受け入れることができます。このページに来る他の人が解決策を得るのを助ける。 –

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; 
1

アップデートこれらの2つのクエリ

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,"/%")); 
関連する問題