Я хочу получить продукты в каталоге, список продуктов сгруппирован.Группа и список товаров сгруппированные 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();
}
}
Любая помощь очень ценится.
Он выглядит как плохо построенный запрос. Попробуйте зарегистрировать запрос (например: Mage :: log ($ this-> getSelectSql (true)), а затем выполнить его в своем администраторе SQL. Это скажет вам, что не так. Если вы используете FLAT, убедитесь, что «assoccode «столбец существует, если нет, убедитесь, что в« Управление атрибутами »включен« Используется в товарном листинге », а затем перестроить индексы. –
Привет, я прошел через эти шаги, в log sql я вижу групповой код group_by и в таблице flat - это ассоциация к. – Dario
, пожалуйста, отредактируйте свой вопрос, чтобы добавить полный запрос, как зарегистрировался в журнале – OSdave