2013-02-08 2 views
10

私は奇妙な問題があり、多くの人がインターネット上で同じことをしているようです。絵の下には、私が強調してきたように、私の問題であり、また私のMagentoのバージョンは1.7カテゴリ内で誤った商品数を示しているマゼンタ

enter image description here

で定義する、LEFTはカテゴリが16製品を提供していますと言いますが、実際にはカテゴリー製品用タブ15個の製品を示しています。私のすべてのカテゴリが混乱しています。どうしたらいいのか教えてください。キャッシュを無効にしようとしましたが、機能しませんでした。

[編集]

私は、カテゴリから1製品を削除しようとした

は、その後、左の数が14だから、私はそのこのカテゴリにそこで無効になっている物であってもよいと思った15件の総レコードを行ってきました。しかし、私が障害のある商品を探していたときは、誰もそこにいませんでした。 catalog_category_productと私は固定されているcatalog_category_entity

答えて

4

こんにちは製品数は、あなたが深いで掘るする場合は、このカウントは2つのテーブル間の結合をクエリから来ているcode/core/Mage/Catalog/Model/Resource/Category/Collection.php

場所に配置されたメソッド名loadProductCountから来ていますイベントオブザーバを使用してこの問題を解決します。あなたは当分の間同じことをすることができます。あなたがもっと良い解決策を見つけたら教えてください。これは、それらをすべて修正しますconfig.xmlの

<events> 
<catalog_product_delete_after> <!-- identifier of the event we want to catch --> 
<observers> 
<catalog_product_delete_after_handler> <!-- identifier of the event handler --> 
<type>model</type> <!-- class method call type; valid are model, object and singleton --> 
<class>countfix/observer</class> <!-- observers class alias --> 
<method>deleteCountCategory</method> <!-- observer's method to be called --> 
<args></args> <!-- additional arguments passed to observer --> 
</catalog_product_delete_after_handler> 
</observers> 
</catalog_product_delete_after> 
</events> 
+0

はあなたが同じ問題を抱えていたと述べたましたか? –

+0

はい私はMagento 1.7 CEで同じ問題に直面していました。何らかの形で製品を削除した後、そのエントリはcatalog_category_productテーブルから削除されていませんでした。 –

+0

あなたはどのイベントを観察していますか? – CarComp

12

で使用

public function deleteCountCategory (Varien_Event_Observer $observer) { 
    try { 
    $product = $observer->getEvent()->getProduct(); 
    $productId = $product->getId();      
    $resource = Mage::getSingleton('core/resource');  
    $writeConnection = $resource->getConnection('core_write'); 
    $tableName = $resource->getTableName('catalog_category_product'); 
    $query = "DELETE FROM {$tableName} WHERE product_id = ".(int)$productId;    
    $writeConnection->query($query);    
    } catch (Exception $e) { 
     throw $e;     
    } 
    return $this;   
} 

イベント。

DELETE FROM 
catalog_category_product 
where product_id NOT IN (SELECT entity_id FROM (catalog_product_entity)) 

次に、解決策をオブザーバーに実装して、再び発生しないようにします。

2

これに対する簡単な解決策は、/アプリ/コード/コア/メイジ/カタログ/モデルに行く

Category.php

であるかそうでない効果しばらくMagentoのアップグレードを行うように、ローカルファイルを作成する方が良いでしょう。今では)(getFrontentProductCountを言う新しい関数を作成するには、このモデルでは アプリ/コード/ローカル/メイジ/カタログ/モデル/ Category.php

を作成

public function getFrontentProductCount() 
{ 
    $collection = Mage::getResourceModel('catalog/product_collection') 
     ->addCategoryFilter($this); 
Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($collection); 
Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($collection); 
return $collection->count(); 

}

テンプレートにアクセスしてくださいphtmlファイルで、カテゴリの製品数を実行します。一般的なケースでは、それはです:テーマ/テンプレート/カタログ/ナビゲーション/ left.phtml

今のように、必要に応じて上記の関数を呼び出す:

<ol> 
      <?php foreach ($_categories as $_category): ?> 
       <?php if($_category->getIsActive()): ?> 
       <li> 
        <a href="<?php echo $this->getCategoryUrl($_category) ?>"<?php if ($this->isCategoryActive($_category)): ?> class="current"<?php endif; ?>><?php echo $this->htmlEscape($_category->getName()) ?></a> (<?php echo $_category->getFrontentProductCount() ?>) 
       </li> 
       <?php endif; ?> 
      <?php endforeach ?> 
      </ol> 
関連する問題