2014-10-10 11 views
0

我正在爲我的網格行編輯屏幕。這是我迄今爲止這種形式:Magento編輯表單字段集 - 將選擇下拉菜單的值獲取到標籤中

<?php 

class Intellibi_Integration_Block_Adminhtml_Manageasendiapickinglists_Edit_Tab_Form extends Mage_Adminhtml_Block_Widget_Form 
{ 
    protected function _prepareForm() 
    { 
     $form = new Varien_Data_Form(); 
     $this->setForm($form); 

     $fieldset = $form->addFieldset('integration_form', array(
      'legend' => Mage::helper('integration')->__('Asendia Pick Information') 
     )); 

     $fieldset->addField('order_number', 'label', array(
      'label' => Mage::helper('integration')->__('Order Number'), 
      'name' => 'order_number' 
     )); 

     // snipped 

     $fieldset->addField('pick_status', 'select', array(
      'required' => false, 
      'class' => 'required-entry', 
      'label' => Mage::helper('integration')->__('Pick Status'), 
      'name' => 'pick_status', 
      'values' => Mage::getSingleton('ibi/asendiapickstatus')->getOptionArray(), 
      'readonly' => 'readonly' 
     )); 

     // snipped 

     return parent::_prepareForm(); 
    } 
} 

這將產生在管理後臺的輸出如下:

enter image description here

我想這樣做是pick_status列從改變selectlabel。當我這樣做,而不是顯示狀態值「新」它顯示了數組索引這樣的:

enter image description here

我爲asendiapickstatus選項數組定義這樣在我的模型:

class Intellibi_Integration_Model_Asendiapickstatus extends Varien_Object 
{ 
    const PICK_STATUS_NEW  = 1; 
    const PICK_STATUS_SENT  = 2; 
    const PICK_STATUS_SHIPPED = 3; 

    static public function getOptionArray() 
    { 
     return array(
      self::PICK_STATUS_NEW  => Mage::helper('integration')->__('New'), 
      self::PICK_STATUS_SENT  => Mage::helper('integration')->__('Sent'), 
      self::PICK_STATUS_SHIPPED => Mage::helper('integration')->__('Shipped') 
     ); 
    } 
} 

所以我的問題是,在編輯表單fieldset構建器中,如何顯示下拉字段「pick_status」的值,而不是當前的索引呢?所以如上所示,輸出將會顯示「新」而不是「1」。我需要一個自定義渲染器嗎?

回答

0

我(與自定義表單呈現的元素)解決了這個問題是這樣的:

添加自定義字段集類型

$fieldset->addType('pickstatus', 'Intellibi_Integration_Block_Adminhtml_Manageasendiapickinglists_Edit_Tab_Form_Renderer_Fieldset_Pickstatus'); 

使用的字段集這樣

$fieldset->addField('pick_status', 'pickstatus', array(
    'label' => Mage::helper('integration')->__('Pick Status'), 
    'name' => 'pick_status', 
)); 

編碼所呈現的這樣

class Intellibi_Integration_Block_Adminhtml_Manageasendiapickinglists_Edit_Tab_Form_Renderer_Fieldset_Pickstatus extends Varien_Data_Form_Element_Abstract 
{ 
    protected $_element; 

    public function getElementHtml() 
    { 
     // Load Pick Status 
     $pick_status = (int)$this->getValue(); 
     $pick_status_list = Mage::getSingleton('ibi/asendiapickstatus')->getOptionArray(); 

     // Finish 
     return array_key_exists($pick_status, $pick_status_list) ? $pick_status_list[$pick_status] : 'Unknown'; 
    } 
} 

它呈現這樣

enter image description here