Как добавить раскрывающийся список страны и штата на вкладке информации об учетной записи клиента и отображать состояние в зависимости от страны, выбранной в администраторе magento.

Я хочу показать еще два раскрывающихся списка на вкладке информации об учетной записи клиента в боковой панели администратора и отобразить весь список стран и штатов в первый раз. при выборе страны, чем показать весь список состояний на основе выбранной страны.


person Santosh Pal    schedule 24.05.2016    source источник


Ответы (1)


Open your "app\code\core\Mage\Adminhtml\Block\Customer\Edit\TabAccount.php" file and copy file in your local code folder 

добавить код после идентификатора сайта

$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',`enter code here`
            'required' => true,
            'onchange' => 'getstate(this)',
        ));

        //Edit action pass your custom table to country id and get state
        $storeId = $this->getRequest()->getParam('id');
        $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,
        ));


        /*
         * 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 (transport) {
                jQuery('#_accountstate').html(transport.responseText);
            }
        });
    }
//</script>");

add function in "app\code\core\Mage\Adminhtml\controllers\CustomerController.php after extend it in your local code pool


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>";
            }strong text
        }
        echo $state;

Заголовок

   i have tested it on magento 1.7

clear your magento cache.

хорошо здесь

person Santosh Pal    schedule 24.05.2016