您好我想顯示狀態下拉根據國家選擇magento產品從管理員可以任何一個請給出一個想法如何做到這一點。我已經谷歌搜索但徒然。如何添加國家下拉列表,根據在magento產品形式選擇的國家
2
A
回答
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;
}
謝謝。
-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>");
相關問題
- 1. 選擇的國家/國家從動態下拉列表
- 2. 如何根據國家選擇的軌道選擇國家?
- 3. 特定國家Magento產品
- 4. 如何在yii中添加下拉式國家/地區列表?
- 5. Django:國家下拉列表?
- 6. 如何將選擇下拉列表中的國家和國家的「選擇選項」設置
- 7. 根據國家/地區代碼選擇國家/地區
- 8. 國家不是根據選定的國家加載
- 9. 如何在iTunes Connect領域中選擇孟加拉國國家?
- 10. 在PHP中根據產品和買家國家計算收入
- 11. 幫助使用JS下拉列表爲國家/國家與PHP
- 12. 選擇國家和國家代碼?
- 13. 動態國家,州,市下拉選擇
- 14. 更新狀態,城市下拉根據國家選擇Symfony
- 15. 如何從django國家的國家列表中篩選
- 16. 以j2me表格的國家選擇下拉列表
- 17. BootStrap形式助手國家選擇器
- 18. 國家,州,市的Javascript下拉列表
- 19. 使用Javascript - 填寫國家代碼下拉國家下拉
- 20. Drupal 7的形式API - 國家下拉列表
- 21. 根據用戶選擇從下拉列表中顯示國家代碼
- 22. 下拉菜單中的電話國家代碼的國家選擇
- 23. 添加小時根據國家
- 24. 動態添加選擇國家和國家通過點擊添加更多
- 25. 國家/州動態下拉列表
- 26. 國家下拉列表輸出查看
- 27. 下拉列表國家與CountryFlags
- 28. 如果在另一個下拉列表中選擇美國作爲國家,則驗證狀態下拉列表
- 29. asp.net MVC 3 - MVC 3剃鬚刀:國家選擇下拉列表
- 30. MVC 3剃刀:國家選擇下拉列表
喜饅頭感謝您的回覆。以上你必須一提的是正常的形式就是在管理部分,但我要求「的產品從」當我們編輯或添加目錄產品部分中的產品時 – Sunel