2014-02-08 2 views
3

Я хочу получить продукты в каталоге, список продуктов сгруппирован.Группа и список товаров сгруппированные Magento

У меня есть 4 настраиваемых продукта, и я хочу сгруппировать их в один продукт, который отображается в каталоге.

Для этого я создал текст атрибута (ассоциированный код) для связывания каждого настраиваемого продукта.

Config 1: code001 - assoccode: code001 
Config 2: code002 - assoccode: code001 
Config 3: code003 - assoccode: code001 
Config 4: code004 - assoccode: code001 

Моя проблема заключается в том, что, когда у меня есть один Настраиваемый продукт, который не имеет другой вариант он не отображается в списке каталога или если есть простой продукт или если я активировать Anchor категорию Да я получил эту ошибку: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'assoccode' in 'group statement'

Есть ли еще одна опция для группировки продуктов по атрибуту в списке продуктов каталога?

и я расширили коллекцию продуктов, как показано ниже:

class Module_GroupingConfig_Model_Productcollection extends Mage_Catalog_Model_Resource_Product_Collection 
{ 

    protected $_disabled = false; 
    protected $_flatEnabled = array(); 

    public function getFlatHelper() 
    { 
     return Mage::helper('catalog/product_flat'); 
    } 

    protected function isEnabled() 
    { 
     return !Mage::app()->getStore()->isAdmin() && !$this->_disabled; 
    } 

    public function setDisableGroupBy() 
    { 
     $this->_disabled = true; 
    } 

    public function isEnabledFlat() 
    { 
     // Flat Data can be used only on frontend 
     if (Mage::app()->getStore()->isAdmin()) { 
      return false; 
     } 
     $storeId = $this->getStoreId(); 
     if (!isset($this->_flatEnabled[$storeId])) { 
      $flatHelper = $this->getFlatHelper(); 
      $this->_flatEnabled[$storeId] = $flatHelper->isAvailable() && $flatHelper->isBuilt($storeId); 
     } 
     return $this->_flatEnabled[$storeId]; 
    } 

    protected function _beforeLoad() 
    { 
     if ($this->isEnabled()) { 
      if ($this->isEnabledFlat()) { 

       $this->getSelect()->group('assoccode'); 
       $this->getSelect()->columns(array('assoccode_color_ids' => new Zend_Db_Expr("GROUP_CONCAT(DISTINCT color ORDER BY color_value DESC SEPARATOR ',')"))); 

      } else { 

       $this->joinAttribute('assoccode', 'catalog_product/assoccode', 'entity_id'); 
       $this->joinAttribute('color', 'catalog_product/color', 'entity_id'); 

       $this->getSelect()->group('assoccode'); 
       $this->getSelect()->columns(array('assoccode_color_ids' => new Zend_Db_Expr("GROUP_CONCAT(DISTINCT at_color.value ORDER BY at_color.value DESC SEPARATOR ',')"))); 

      } 

      $this->getSelect()->columns(array('assoccode_count' => new Zend_Db_Expr('COUNT(*)'))); 
     } 
     return parent::_beforeLoad(); 
    } 

    public function getSelectCountSql() 
    { 
     if ($this->isEnabled()) { 
      $this->_renderFilters(); 

      if ($this->isEnabledFlat()) { 
       $countSelect = $this->_getClearSelect() 
        ->columns('COUNT(DISTINCT assoccode) AS cnt') 
        ->resetJoinLeft(); 
      } else { 
       $countSelect = $this->_getClearSelect() 
        ->columns('COUNT(DISTINCT at_assoccode.value) AS cnt') 
        ->resetJoinLeft(); 
      } 

      $countSelect->reset(Zend_Db_Select::GROUP); 

      return $countSelect; 
     } 
     return parent::getSelectCountSql(); 
    } 

} 

Любая помощь очень ценится.

+0

Он выглядит как плохо построенный запрос. Попробуйте зарегистрировать запрос (например: Mage :: log ($ this-> getSelectSql (true)), а затем выполнить его в своем администраторе SQL. Это скажет вам, что не так. Если вы используете FLAT, убедитесь, что «assoccode «столбец существует, если нет, убедитесь, что в« Управление атрибутами »включен« Используется в товарном листинге », а затем перестроить индексы. –

+0

Привет, я прошел через эти шаги, в log sql я вижу групповой код group_by и в таблице flat - это ассоциация к. – Dario

+0

, пожалуйста, отредактируйте свой вопрос, чтобы добавить полный запрос, как зарегистрировался в журнале – OSdave

ответ

0

1.-Вы должны создать продукт атрибута в админ, каталог -> атрибуты -> Управление атрибутами после создания «набор атрибутов», когда-то это сделал, ассоциированный с настраиваемым продуктом,

2.- Создание пользовательского модуля Block View и List, что использование атрибутов визуализации группы продукта в целях выбора

3.-в деталях Просмотр продукта с помощью пользовательской коллекции Показать группы продуктов, а также варианты

4.-Создание пользовательского модуля Добавить в корзину Блок, чтобы добавить группы товаров для множителей

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