【发布时间】:2015-04-23 12:32:24
【问题描述】:
Magento 1.7.0.2 - 我通过扩展目录产品集合创建了一个自定义集合。集合本质上是:产品的独特组合的集合,如果任何产品具有自定义选项,则产品 ID/选项 ID 的每个独特组合都是集合中的另一个项目。收集和计数工作正常。
但是,批量操作复选框选择的“全选”按钮仅选择具有产品 ID 的行,而不是那些 product_id 与 option_id 连接的行,如下图所示。
这是我的收藏课。
<?php
class Lightsnholsters_Inventory_Model_Resource_Catalog_Product_Collection extends Mage_Catalog_Model_Resource_Product_Collection
{
public function getSelectCountSql()
{
$this->_renderFilters();
$countSelect = clone $this->getSelect();
$countSelect->reset(Zend_Db_Select::ORDER);
$countSelect->reset(Zend_Db_Select::LIMIT_COUNT);
$countSelect->reset(Zend_Db_Select::LIMIT_OFFSET);
$countSelect->reset(Zend_Db_Select::COLUMNS);
// Count doesn't work with group by columns keep the group by
if(count($this->getSelect()->getPart(Zend_Db_Select::GROUP)) > 0) {
$countSelect->reset(Zend_Db_Select::GROUP);
$countSelect->distinct(true);
$group = $this->getSelect()->getPart(Zend_Db_Select::GROUP);
$countSelect->columns("COUNT(DISTINCT ".implode(", ", $group).")");
} else {
$countSelect->columns('COUNT(*)');
}
return $countSelect;
}
protected function _initSelect()
{
parent::_initSelect();
$this->joinAttribute('name','catalog_product/name','entity_id');
$this->getSelect()->reset(Zend_Db_Select::COLUMNS);
$this->getSelect()->joinLeft(
array('opt' => $this->getTable('catalog/product_option')),
"e.entity_id = opt.product_id AND opt.type IN('radio','drop_down')",
array(''));
$this->getSelect()->joinLeft(
array('opt_val' => $this->getTable('catalog/product_option_type_value')),
"opt.option_id = opt_val.option_id AND opt_val.sku != '' AND opt_val.sku IS NOT NULL",
array('entity_id' => new Zend_Db_Expr("CONCAT_WS('_',e.entity_id,opt_val.option_type_id)"),
'option_type_id' => new Zend_Db_Expr("IF(opt_val.option_type_id > 0, opt_val.option_type_id,0)")));
$this->getSelect()->joinLeft(
array('opt_prc' => $this->getTable('catalog/product_option_type_price')),
"opt_val.option_type_id = opt_prc.option_type_id AND opt_prc.store_id = {$this->getStoreId()}",
array(''));
$this->getSelect()->joinLeft(
array('opt_ttl' => $this->getTable('catalog/product_option_type_title')),
"opt_val.option_type_id = opt_ttl.option_type_id AND opt_ttl.store_id = {$this->getStoreId()}",
array('name' => new Zend_Db_Expr("CONCAT_WS(' ',at_name.value,title)")));
return $this;
}
}
这是我在网格类中使用的批量处理代码
protected function _prepareMassaction()
{
$this->setMassactionIdField('entity_id');
$this->setMassactionIdFilter('entity_id');
$this->getMassactionBlock()->setFormFieldName('entity_id');
$this->getMassactionBlock()->addItem('updateAttributes', array(
'label' => $this->__('Update Attributes'),
'url' => $this->getUrl('*/*/massUpdateAttributes'),
));
$statuses = array(
array('label' => '', 'value'=>''),
array('label' => $this->__('Disabled'), 'value'=>0 ),
array('label' => $this->__('Enabled') , 'value'=>1 )
);
$this->getMassactionBlock()->addItem('status', array(
'label'=> $this->__('Change status'),
'url' => $this->getUrl('*/*/massStatus', array('_current'=>true)),
'additional' => array(
'visibility' => array(
'name' => 'status',
'type' => 'select',
'class' => 'required-entry',
'label' => $this->__('Status'),
'values' => $statuses
)
)
));
Mage::dispatchEvent('lightsnholsters_inventory_autolist_grid_massaction_prepare', array('block' => $this));
return $this;
}
似乎我在$this->setMassactionIdField('entity_id'); 中输入的任何字段都被完全忽略了。
我的目标是,当我单击“全选”时,所有复选框都被选中,而不仅仅是那些没有连接 option_id 的复选框。
感谢您的帮助。
【问题讨论】:
标签: php mysql magento checkbox collections