2013-08-03 100 views

回答

7

Sunel.please檢查下游解決方案,它可能會幫助你。

打開您的形式是Yournamespace/Modulename/Block/Adminhtml/Modulename/Edit/Tab/Form.php然後添加下面的字段

$country = $fieldset->addField('country', 'select', array(
      'name' => 'country', 
      'label'  => 'Country', 
      'values' => Mage::getModel('adminhtml/system_config_source_country') ->toOptionArray(), 
      'onchange' => 'getstate(this)', 
     )); 

$fieldset->addField('state', 'select', array(
      'name' => 'state', 
      'label'  => 'State', 
      'values' => Mage::getModel('modulename/modulename')->getstate('AU'), 
     )); 

     /* 
     * Add Ajax to the Country select box html output 
     */ 
     $country->setAfterElementHtml("<script type=\"text/javascript\"> 
      function getstate(selectElement){ 
       var reloadurl = '". $this->getUrl('modulename/adminhtml_modulename/state') . "country/' + selectElement.value; 
       new Ajax.Request(reloadurl, { 
        method: 'get', 
        onLoading: function (stateform) { 
         $('state').update('Searching...'); 
        }, 
        onComplete: function(stateform) { 
         $('state').update(stateform.responseText); 
        } 
       }); 
      } 
     </script>"); 

現在modulenamecontroller.php文件創建國家行動,這將是這個樣子

public function stateAction() { 
    $countrycode = $this->getRequest()->getParam('country'); 
    $state = "<option value=''>Please Select</option>"; 
    if ($countrycode != '') { 
     $statearray = Mage::getModel('directory/region')->getResourceCollection() ->addCountryFilter($countrycode)->load(); 
     foreach ($statearray as $_state) { 
      $state .= "<option value='" . $_state->getCode() . "'>" . $_state->getDefaultName() . "</option>"; 
     } 
    } 
    echo $state; 
} 

謝謝。

+0

喜饅頭感謝您的回覆。以上你必須一提的是正常的形式就是在管理部分,但我要求「的產品從」當我們編輯或添加目錄產品部分中的產品時 – Sunel

-1
//        if (Mage::app()->isSingleStoreMode()) { 
//            $fieldset->removeField('website_id'); 
//            $fieldset->addField('website_id', 'hidden', array(
//                'name'      => 'website_id' 
//           )); 
//            $customer->setWebsiteId(Mage::app()->getStore(true)->getWebsiteId()); 
//        } 
//        $fieldset->addField('country', 'select', array(
//                            'name'  => 'country', 
//                            'label' => 'Country', 
//                            'values' => Mage::getModel('adminhtml/system_config_source_country')->toOptionArray(),   
//           )); 
//        
//        $fieldset->addField('state', 'select', array(
//            'name'  => 'state', 
//            'label'     => 'State', 
//            'values'    => Mage::getModel('adminhtml/system_config_source_region')->getResourceCollection(), 
//       )); 

  

        $country = $fieldset->addField('country', 'select', array(

            'name' => 'country', 

            'label' => Mage::helper('customer')->__('Country'), 

            'values' => Mage::getModel('adminhtml/system_config_source_country')->toOptionArray(), 

            'class' => 'required-entry', 

            'required' => true, 

            'onchange' => 'getstate(this)', 

       )); 

  

//Edit action pass your custom table to country id and get state 

        $storeId = $this->getRequest()->getParam('id'); 

        if ($storeId != ''): 

            $editState = $stateCollection = Mage::getModel('directory/region')->load($storeId); 

            $stateCollection = Mage::getModel('directory/region')->getResourceCollection()->addCountryFilter($editState->getCountry())->load(); 

            $state = ""; 

            foreach ($stateCollection as $_state) { 

                $state[] = array('value' => $_state->getCode(), 'label' => $_state->getDefaultName()); 

            } 

            $fieldset->addField('state', 'select', array(

                'label' => Mage::helper('customer')->__('State'), 

                'required' => false, 

                'name' => 'state', 

                'selected' => 'selected', 

                'values' => $state, 

           )); 

        else: 

            //New action 

            $fieldset->addField('state', 'select', array(

                'name' => 'state', 

                'required' => false, 

                'label' => Mage::helper('customer')->__('State'), 

                'values' => '--Please Select Country--', 

            )); 

        endif; 

        

        /* 

        * Add Ajax to the Country select box html output 

        */ 

        $country->setAfterElementHtml("<script type=\"text/javascript\"> 

            function getstate(selectElement){ 

                var reloadurl = '". $this->getUrl('adminhtml_customer/state') . "country/' + selectElement.value; 

                new Ajax.Request(reloadurl, { 

                    method: 'get', 

                    onComplete: function(transport){ 

                        var response = transport.responseText; 

                        $('storelocatorstate').update(response); 

                    } 

                }); 

            } 

        </script>"); 
+0

歡迎使用Stackoverflow。請使用基本的格式選項使您的答案可讀。 – Daenarys

0
Hi Santosh Pal Sir... 
    i am writing my whole code , please try it on your system... When i choose country then loding process is complete but no value is feteching in the state dropdown. 
    **app/code/local/Mage/Adminhtml/Block/Customer/Edit/Tab/Account.php** ,please find my custome code 
    <?php 

    class Mage_Adminhtml_Block_Customer_Edit_Tab_Account extends Mage_Adminhtml_Block_Widget_Form 
    { 
     /** 
      * Initialize block 
     */ 
public function __construct() 
{ 
    parent::__construct(); 
} 

/** 
* Initialize form 
* 
* @return Mage_Adminhtml_Block_Customer_Edit_Tab_Account 
*/ 
public function initForm() 
{ 
    $form = new Varien_Data_Form(); 
    $form->setHtmlIdPrefix('_account'); 
    $form->setFieldNameSuffix('account'); 

    $customer = Mage::registry('current_customer'); 

    /** @var $customerForm Mage_Customer_Model_Form */ 
    $customerForm = Mage::getModel('customer/form'); 
    $customerForm->setEntity($customer) 
     ->setFormCode('adminhtml_customer') 
     ->initDefaultValues(); 

    $fieldset = $form->addFieldset('base_fieldset', array(
     'legend' => Mage::helper('customer')->__('Account Information') 
    )); 

    $attributes = $customerForm->getAttributes(); 
    foreach ($attributes as $attribute) { 
     /* @var $attribute Mage_Eav_Model_Entity_Attribute */ 
     $attribute->setFrontendLabel(Mage::helper('customer')->__($attribute->getFrontend()->getLabel())); 
     $attribute->unsIsVisible(); 
    } 

    $disableAutoGroupChangeAttributeName = 'disable_auto_group_change'; 
    $this->_setFieldset($attributes, $fieldset, array($disableAutoGroupChangeAttributeName)); 

    $form->getElement('group_id')->setRenderer($this->getLayout() 
     ->createBlock('adminhtml/customer_edit_renderer_attribute_group') 
     ->setDisableAutoGroupChangeAttribute($customerForm->getAttribute($disableAutoGroupChangeAttributeName)) 
     ->setDisableAutoGroupChangeAttributeValue($customer->getData($disableAutoGroupChangeAttributeName))); 

    if ($customer->getId()) { 
     $form->getElement('website_id')->setDisabled('disabled'); 
     $form->getElement('created_in')->setDisabled('disabled'); 
    } else { 
     $fieldset->removeField('created_in'); 
     $form->getElement('website_id')->addClass('validate-website-has-store'); 

     $websites = array(); 
     foreach (Mage::app()->getWebsites(true) as $website) { 
      $websites[$website->getId()] = !is_null($website->getDefaultStore()); 
     } 
     $prefix = $form->getHtmlIdPrefix(); 

     $form->getElement('website_id')->setAfterElementHtml(
      '<script type="text/javascript">' 
      . " 
      var {$prefix}_websites = " . Mage::helper('core')->jsonEncode($websites) ."; 
      Validation.add(
       'validate-website-has-store', 
       '" . Mage::helper('customer')->__('Please select a website which contains store view') . "', 
       function(v, elem){ 
        return {$prefix}_websites[elem.value] == true; 
       } 
      ); 
      Element.observe('{$prefix}website_id', 'change', function(){ 
       Validation.validate($('{$prefix}website_id')) 
      }.bind($('{$prefix}website_id'))); 
      " 
      . '</script>' 
     ); 
    } 
    $renderer = $this->getLayout()->createBlock('adminhtml/store_switcher_form_renderer_fieldset_element'); 
    $form->getElement('website_id')->setRenderer($renderer); 

    //  if (Mage::app()->isSingleStoreMode()) { 
    //   $fieldset->removeField('website_id'); 
//   $fieldset->addField('website_id', 'hidden', array(
//    'name'  => 'website_id' 
    //   )); 
    //    $customer->setWebsiteId(Mage::app()->getStore(true)->getWebsiteId()); 
    //  } 

    $customerStoreId = null; 
    if ($customer->getId()) { 
     $customerStoreId = Mage::app()->getWebsite($customer->getWebsiteId())->getDefaultStore()->getId(); 
    } 

    $prefixElement = $form->getElement('prefix'); 
    if ($prefixElement) { 
     $prefixOptions = $this->helper('customer')->getNamePrefixOptions($customerStoreId); 
     if (!empty($prefixOptions)) { 
      $fieldset->removeField($prefixElement->getId()); 
      $prefixField = $fieldset->addField($prefixElement->getId(), 
       'select', 
       $prefixElement->getData(), 
       $form->getElement('group_id')->getId() 
      ); 
      $prefixField->setValues($prefixOptions); 
      if ($customer->getId()) { 
       $prefixField->addElementValues($customer->getPrefix()); 
      } 

     } 
    } 

    $suffixElement = $form->getElement('suffix'); 
    if ($suffixElement) { 
     $suffixOptions = $this->helper('customer')->getNameSuffixOptions($customerStoreId); 
     if (!empty($suffixOptions)) { 
      $fieldset->removeField($suffixElement->getId()); 
      $suffixField = $fieldset->addField($suffixElement->getId(), 
       'select', 
       $suffixElement->getData(), 
       $form->getElement('lastname')->getId() 
      ); 
      $suffixField->setValues($suffixOptions); 
      if ($customer->getId()) { 
       $suffixField->addElementValues($customer->getSuffix()); 
      } 
     } 
    } 


    // my Custome code for country and state 

    $country = $fieldset->addField('country', 'select', array(

     'name' => 'country', 

     'label' => Mage::helper('customer')->__('Country'), 

     'values' => Mage::getModel('adminhtml/system_config_source_country')->toOptionArray(), 

     'class' => 'required-entry', 

     'required' => true, 

     'onchange' => 'getstate(this)', 

    )); 



    //Edit action pass your custom table to country id and get state 

    $storeId = $this->getRequest()->getParam('id'); 

    if ($storeId != ''): 

     $editState = $stateCollection = Mage::getModel('directory/region')->load($storeId); 

     $stateCollection = Mage::getModel('directory/region')->getResourceCollection()->addCountryFilter($editState->getCountry())->load(); 

     $state = ""; 

     foreach ($stateCollection as $_state) { 

      $state[] = array('value' => $_state->getCode(), 'label' => $_state->getDefaultName()); 

     } 

     $fieldset->addField('state', 'select', array(

      'label' => Mage::helper('customer')->__('State'), 

      'required' => false, 

      'name' => 'state', 

      'selected' => 'selected', 

      'values' => $state, 

     )); 

    else: 

     //New action 

     $fieldset->addField('state', 'select', array(

      'name' => 'state', 

      'required' => false, 

      'label' => Mage::helper('customer')->__('State'), 

      'values' => '--Please Select Country--', 

     )); 

    endif; 

    $url = Mage::getBaseUrl(); 
    $country->setAfterElementHtml("<script type=\"text/javascript\"> 
    function getstate(selectElement){ 
    var reloadurl = '".$url.'admin/customer/state/' . "country/' + selectElement.value; 
    new Ajax.Request(reloadurl, { 
     method: 'POST', 
     onComplete: function(){ 
     }, 
     success: function (response) { 
     alert(response) 
     } 
    }); 
    } 
    </script>"); 

    /* 



    /* end my code country and state 
     */  




    if ($customer->getId()) { 
     if (!$customer->isReadonly()) { 
      // Add password management fieldset 
      $newFieldset = $form->addFieldset(
       'password_fieldset', 
       array('legend' => Mage::helper('customer')->__('Password Management')) 
      ); 
      // New customer password 
      $field = $newFieldset->addField('new_password', 'text', 
       array(
        'label' => Mage::helper('customer')->__('New Password'), 
        'name' => 'new_password', 
        'class' => 'validate-new-password' 
       ) 
      ); 
      $field->setRenderer($this->getLayout()->createBlock('adminhtml/customer_edit_renderer_newpass')); 

      // Prepare customer confirmation control (only for existing customers) 
      $confirmationKey = $customer->getConfirmation(); 
      if ($confirmationKey || $customer->isConfirmationRequired()) { 
       $confirmationAttribute = $customer->getAttribute('confirmation'); 
       if (!$confirmationKey) { 
        $confirmationKey = $customer->getRandomConfirmationKey(); 
       } 
       $element = $fieldset->addField('confirmation', 'select', array(
        'name' => 'confirmation', 
        'label' => Mage::helper('customer')->__($confirmationAttribute->getFrontendLabel()), 
       ))->setEntityAttribute($confirmationAttribute) 
        ->setValues(array('' => 'Confirmed', $confirmationKey => 'Not confirmed')); 

       // Prepare send welcome email checkbox if customer is not confirmed 
       // no need to add it, if website ID is empty 
       if ($customer->getConfirmation() && $customer->getWebsiteId()) { 
        $fieldset->addField('sendemail', 'checkbox', array(
         'name' => 'sendemail', 
         'label' => Mage::helper('customer')->__('Send Welcome Email after Confirmation') 
        )); 
        $customer->setData('sendemail', '1'); 
       } 
      } 
     } 
    } else { 
     $newFieldset = $form->addFieldset(
      'password_fieldset', 
      array('legend'=>Mage::helper('customer')->__('Password Management')) 
     ); 
     $field = $newFieldset->addField('password', 'text', 
      array(
       'label' => Mage::helper('customer')->__('Password'), 
       'class' => 'input-text required-entry validate-password', 
       'name' => 'password', 
       'required' => true 
      ) 
     ); 
     $field->setRenderer($this->getLayout()->createBlock('adminhtml/customer_edit_renderer_newpass')); 

     // Prepare send welcome email checkbox 
     $fieldset->addField('sendemail', 'checkbox', array(
      'label' => Mage::helper('customer')->__('Send Welcome Email'), 
      'name' => 'sendemail', 
      'id' => 'sendemail', 
     )); 
     $customer->setData('sendemail', '1'); 
     if (!Mage::app()->isSingleStoreMode()) { 
      $fieldset->addField('sendemail_store_id', 'select', array(
       'label' => $this->helper('customer')->__('Send From'), 
       'name' => 'sendemail_store_id', 
       'values' => Mage::getSingleton('adminhtml/system_store')->getStoreValuesForForm() 
      )); 
     } 
    } 

    // Make sendemail and sendmail_store_id disabled if website_id has empty value 
    $isSingleMode = Mage::app()->isSingleStoreMode(); 
    $sendEmailId = $isSingleMode ? 'sendemail' : 'sendemail_store_id'; 
    $sendEmail = $form->getElement($sendEmailId); 

    $prefix = $form->getHtmlIdPrefix(); 
    if ($sendEmail) { 
     $_disableStoreField = ''; 
     if (!$isSingleMode) { 
      $_disableStoreField = "$('{$prefix}sendemail_store_id').disabled=(''==this.value || '0'==this.value);"; 
     } 
     $sendEmail->setAfterElementHtml(
      '<script type="text/javascript">' 
      . " 
      $('{$prefix}website_id').disableSendemail = function() { 
       $('{$prefix}sendemail').disabled = ('' == this.value || '0' == this.value);". 
       $_disableStoreField 
      ."}.bind($('{$prefix}website_id')); 
      Event.observe('{$prefix}website_id', 'change', $('{$prefix}website_id').disableSendemail); 
      $('{$prefix}website_id').disableSendemail(); 
      " 
      . '</script>' 
     ); 
    } 

    if ($customer->isReadonly()) { 
     foreach ($customer->getAttributes() as $attribute) { 
      $element = $form->getElement($attribute->getAttributeCode()); 
      if ($element) { 
       $element->setReadonly(true, true); 
      } 
     } 
    } 

    $form->setValues($customer->getData()); 
    $this->setForm($form); 
    return $this; 
} 

    /** 
    * Return predefined additional element types 
    * 
    * @return array 
    */ 
    protected function _getAdditionalElementTypes() 
    { 
    return array(
     'file'  => Mage::getConfig()->getBlockClassName('adminhtml/customer_form_element_file'), 
     'image'  => Mage::getConfig()->getBlockClassName('adminhtml/customer_form_element_image'), 
     'boolean' => Mage::getConfig()->getBlockClassName('adminhtml/customer_form_element_boolean'), 
    ); 
} 

}

////////////////////////////////////////////////////////////////////// Now i add stateAction() in 
app/code/core/Mage/Adminhtml/controllers/CustomerController.php, just after saveAction() method finish 


    public function stateAction() { 
    $countrycode = $this->getRequest()->getParam('country'); 
    $state = "<option value=''>Please Select</option>"; 
    if ($countrycode != '') { 
    $statearray = Mage::getModel('directory/region')->getResourceCollection() ->addCountryFilter('US')->load(); 
    foreach ($statearray as $_state) { 
     $state .= "<option value='" . $_state->getCode() . "'>" . $_state->getDefaultName() . "</option>"; 
      } 
     } 
    echo $state; 
     } 
0
/* 
* Add Ajax to the Country select box html output 
*/ 
$url = Mage::getBaseUrl(); 
$country->setAfterElementHtml("<script type=\"text/javascript\"> 
    function getstate(selectElement){ 
     var reloadurl = '".$url.'admin/customer/state/' . "country/' + selectElement.value; 
     new Ajax.Request(reloadurl, { 
      method: 'POST', 
      onComplete: function(){ 
      }, 
      success: function (response) { 
      alert(response) 
      } 
     }); 
    } 
</script>"); 
相關問題