Adminhtml 격자 열은 블록 클래스를 지정하는 필터 속성을 가지고 있습니다. 부울 예/아니요 필드의 경우 일반적으로 adminhtml/widget_grid_column_filter_select
이됩니다.
필드 유형이 '옵션'일 경우 자동으로 사용됩니다.
'refunded' => new Zend_Db_Expr("IF(qty_refunded > 0, 1, 0)"),
을 그리고 _prepareColumns()
사용 :
_prepareCollection()
이 시도
$this->addColumnAfter('refunded', array(
'header' => Mage::helper('helper')->__('Refunded'),
'index' => 'refunded',
'type' => 'options',
'options' => array(0 => $this->__('No'), 1 => $this->__('Yes'))
), 'qty');
이 여전히 "예"로 값을 렌더링해야하며, "아니오"열에서, 그리고 필터 드롭 다운으로 적절한 옵션을 선택하면됩니다.
계산 된 값이있는 열을 MySQL의 WHERE 절에서 직접 참조 할 수 없으므로이 값만으로는 충분하지 않습니다. Magento는이를 해결하기위한 두 가지 옵션을 제공합니다.
열 필터 블록은 컬렉션을 필터링하는 데 사용할 조건을 반환하는 getCondition()
메서드를 가지고 있습니다. 예를 들어 Mage_Adminhtml_Block_Widget_Grid_Column_Filter_Abstract::getCondition()
을 참조하십시오.
필터를 실행하는 데 사용되는 SQL을 사용자 정의해야하는 경우 Mage_Adminhtml_Block_Widget_Grid_Column_Filter_Select
까지 확장 된 고유 한 열 필터 블록을 만들고 필요에 따라 반환 된 조건을 조정하십시오. 즉, 일치하는 계산 된 값을 사용하십시오. 당신이 젠토의 ORM 필터 구문의 한계 밖에서 일을 prefere 경우
'type' => 'options',
'options' => array(0 => $this->__('No'), 1 => $this->__('Yes')),
'filter' => 'your_module/adminhtml_widget_grid_column_filter_custom',
것은, 당신이 컬렉션을 사용하여 직접 선택 수정할 수 있습니다
은 귀하의 사용자 정의 필터는 addColumn()
정의에서이 같은 열을 지정할 수 있습니다 필터 콜백 :
'type' => 'options',
'options' => array(0 => $this->__('No'), 1 => $this->__('Yes')),
'filter_condition_callback' => array($this, '_applyMyFilter'),
콜백 수집 및 인수로 열을 수신한다. 여기서 그 방법에 대한 간단한 예이고, (계산 된 값에 대해 필터링) 두 가지 방식이 MySQL은 매우 비효율적이라고 말할
protected function _applyMyFilter(Varien_Data_Collection_Db $collection, Mage_Adminhtml_Block_Widget_Grid_Column $column)
{
$select = $collection->getSelect();
$field = $column->getIndex();
$value = $column->getFilter()->getValue();
$select->having("$field=?, $value);
}
. 하지만이 경우에는 문제가되지 않을 수도 있습니다.
예/아니요 열에'options' 유형을 사용하지 않는 이유가 있습니까? –
@ Jürgen Thelen - 네, Magento 초보자입니다. 그러나 나는 너의 제안을 시도 할 것이다. – nevvermind
아무런 의미가 없습니다. 너를 웬일인지 피하는 줄 알았다. –