2014-02-11 2 views
4

Прочитав Fixing Magento Flat Collections with Chaos от Alan Storm и найдя аналогичный вопрос SO here Я пытаюсь вернуть продукты, относящиеся к категории, но без «плоских» данных Magento.Не используйте «плоские» данные в magento

Вот код, который я первоначально использовал:

 $category_model = Mage::getModel('catalog/category')->load($cid); 
     $collection = Mage::getModel('catalog/product_collection'); 
     $collection->addCategoryFilter($category_model); 
     $collection->addAttributeToSort('entity_id','DESC'); 
     $collection->addAttributeToSelect('*'); 

     $collection->printLogQuery(true); 

Когда этот код увольняют через AJAX я получаю разные результаты, чем когда я запускаю его от наблюдателя и причина из-за плоских данных. Так что я написал свои собственные классы, которые предназначены для использования модели EAV:

app/code/local/Mynamespace/Mymodule/Model/Category.php: 

class Mynamespace_Mymodule_Model_Category extends Mage_Catalog_Model_Category 
{ 
    protected function _construct() 
    { 

     $this->_init('catalog/category'); 

    } 

} 

И:

app/code/local/Mynamespace/Mymodule/Model/Productcollection.php: 

class Mynamespace_Mymodule_Model_Productcollection 
extends Mage_Catalog_Model_Resource_Product_Collection 
{ 
    protected function _construct() 
    { 

     $this->_init('catalog/product'); 
     $this->_initTables(); 
    } 

} 

А затем изменить мой код запроса:

 $category_model = Mage::getModel('mymodule/category')->load($cid); 
     $collection = Mage::getModel('mymodule/productcollection'); 
     $collection->addCategoryFilter($category_model); 
     $collection->addAttributeToSort('entity_id','DESC'); 
     $collection->addAttributeToSelect('*'); 

     $collection->printLogQuery(true); 

Однако приведенный выше код по-прежнему запрашивает таблицу плоских данных. Что я могу делать неправильно?

+0

На данный момент это было сделано, написав мой собственный SQL-запрос, но было бы полезно, если кто-то может помочь в любом случае. – beingalex

ответ

3

, так как вы уже переписал Mage_Catalog_Model_Resource_Product_Collection простой рерайт

public function isEnabledFlat() 
{ 
    if (Mage::app()->getStore()->isAdmin()) { 
     return false; 
    } 
    if (!isset($this->_flatEnabled[$this->getStoreId()])) { 
     $this->_flatEnabled[$this->getStoreId()] = $this->getFlatHelper() 
      ->isEnabled($this->getStoreId()); 
    } 
    return $this->_flatEnabled[$this->getStoreId()]; 
} 

в

public function isEnabledFlat() 
{ 
    return false; 
} 

, который должен исправить это :)

1

Чтобы отключить плоский индекс для текущего запроса, вы также можете установить конфигурация временно без сохранения as described here:

Mage::app()->getStore()->setConfig(
    Mage_Catalog_Helper_Product_Flat::XML_PATH_USE_PRODUCT_FLAT, '0'); 

Важно, чтобы это было сделано до того, как сбор продукта был инициализирован, потому что здесь проверяется конфигурация (через isEnabledFlat().

Смежные вопросы