0

私はmagento 1.7.0.2で顧客グループごとに並べ替える必要があります.magento wikiに従ってみます:

http://www.magentocommerce.com/wiki/5_-_modules_and_development/admin/sort_order_by_customer_groups

しかし、うまくいきません。

app/code/core/Mage/Adminhtml/Block/Sales/Order/Grid.php を app/code/local/Mage/Adminhtml/Block/Sales/Order/Grid.php にコピーして、magento コアに触れないようにします。

このコードをこの関数に追加します

protected function _prepareColumns(){

 $this->addColumn('customer_group_id', array(
                'header'=> Mage::helper('customer')->__('Customer Group'),
                'width' => '80px',
                'index' => 'group_id',
                'renderer' => new   Mage_Adminhtml_Block_Sales_Order_Renderer_CustomerGroup(),
                'type' => 'options',
                'options' => Mage_Adminhtml_Block_Sales_Order_Renderer_CustomerGroup::getCustomerGroupsArray(),
        ));

// now the code original
}

次に、同じファイルにこのオーバーライド関数を追加します

protected function _addColumnFilterToCollection($column) {

        if ($this->getCollection()) {
            $field = ( $column->getFilterIndex() ) ? $column->getFilterIndex() : $column->getIndex();
            if ($column->getFilterConditionCallback()) {
                call_user_func($column->getFilterConditionCallback(), $this->getCollection(), $column);
            }
            else {
                $cond = $column->getFilter()->getCondition();
                if ($field && isset($cond)) {
                    if (in_array('NULL', array_values($cond))) {
                        $this->getCollection()->addFieldToFilter($field, array('null' => true));
                    }
                    else {                      
                        $this->getCollection()->addFieldToFilter($field, $cond);
                    }
                }
            }
        }
        return $this;
    }

3 番目に、Grid.php でこの関数を変更します。

protected function _prepareCollection()
    {
        $collection = Mage::getResourceModel($this->_getCollectionClass());

        $collection->getSelect()->joinLeft(
          array('ce'=>'customer_entity'),
          'ce.entity_id=main_table.customer_id',
          array('ce.group_id')
        );
        $this->setCollection($collection);
        return parent::_prepareCollection();
    }

次に、このファイルを app/code/local/Mage/Adminhtml/Block/Sales/Order/Renderer/CustomerGroup.php に次のコードで作成します。

class Mage_Adminhtml_Block_Sales_Order_Renderer_CustomerGroup
extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract {

    // Holds an associative array with customer_group_id and the associated label
    private static $_customerGroups = array(); // "singleton"

    public static function getCustomerGroupsArray() {
        // Make sure the static property is only populated once
        if (count(self::$_customerGroups) == 0) {
            $customer_group = new Mage_Customer_Model_Group();
            $customer_groups = $customer_group->getCollection()->toOptionHash();
            self::$_customerGroups = $customer_groups;
        }

        return self::$_customerGroups;
    }

    // Transforms the customer_group_id into corresponding label
    public function render(Varien_Object $row)
    {
        $val = $this->_getValue($row);
        $customer_groups = self::getCustomerGroupsArray();
        return isset($customer_groups[$val]) ? $customer_groups[$val] : false;
    }

}

そして、私はこのエラーがあります:

:5:{i:0;s:92:"SQLSTATE[42S22]: 列が見つかりません: 1054 不明な列 'customer_group_id' in 'where 句'";i:1;s:5645:"#0 MyProjectFolder\lib\ Varien\Db\Statement\Pdo\Mysql.php(111): Zend_Db_Statement_Pdo->_execute(配列)

前もって感謝します !

4

1 に答える 1

0

私はmagentoフォーラムで解決策を見つけました.誰かが私に正しい解決策を教えてくれます:

protected function _prepareCollection()
{
        $collection = Mage::getResourceModel($this->_getCollectionClass());

        $collection->getSelect()->join(
          array('oe'=>'sales_flat_order'),
          'oe.entity_id=main_table.entity_id',
          array('oe.customer_group_id')
        );
        $this->setCollection($collection);
        return parent::_prepareCollection();
}
于 2013-02-09T14:59:38.027 に答える