目前在我的/etc/system.xml文件中,我可以使用它来浏览存储在Magento中的完整区域列表,并将它们显示为多选。这样可以正常工作,但我更愿意只浏览一个国家的地区,例如英国各州或美国各州:
<counties translate="label">
<label>Counties</label>
<frontend_type>multiselect</frontend_type>
<sort_order>10</sort_order>
<source_model>adminhtml/system_config_source_allregion</source_model>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
</counties>
原因是我在系统上添加了很多地区/州/县,现在它不是一个非常友好的多选框。
在没有立即对下面提供的解决方案采取行动之后,我在一段时间后重新审视了这个问题,并根据所提供的答案将我自己的解决方案整合在一起。
我将app / code / core / Mage / Adminhtml / Model / System / Config / Source / Allregion.php复制到app / code / core / Mage / Adminhtml / Model / System / Config / Source / Ukregion.php
然后我将类定义更改为Mage_Adminhtml_Model_System_Config_Source_Ukregion。
然后我改变了:
$regionsCollection = Mage::getResourceModel('directory/region_collection')->load();
包含国家/地区过滤器:
$regionsCollection = Mage::getResourceModel('directory/region_collection')->addCountryFilter('GB')->load();
我现在得到英国的县(我必须自己编辑,但这是一个不同的故事式 - magento问题)。
最后我改变了我的system.xml:
<counties translate="label">
<label>Counties</label>
<frontend_type>multiselect</frontend_type>
<sort_order>10</sort_order>
<source_model>adminhtml/system_config_source_ukregion</source_model>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
</counties>
使用'UK'代替'GB'完全是故意的 - GB不包括它仅用于“遗留原因”的NI县。 “英国”确实包括北爱尔兰,我的县名单也是如此。
答案 0 :(得分:4)
查看页面系统&gt;配置&gt;送货设置,您可以重新创建区域的调整方式以匹配所选国家/地区。
现在查看文件app/code/core/Mage/Shipping/etc/system.xml
。国家和地区字段如下所示:
<country_id translate="label">
<label>Country</label>
<frontend_type>select</frontend_type>
<frontend_class>countries</frontend_class>
<source_model>adminhtml/system_config_source_country</source_model>
<sort_order>10</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>0</show_in_store>
</country_id>
<region_id translate="label">
<label>Region/State</label>
<frontend_type>text</frontend_type>
<sort_order>20</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>0</show_in_store>
</region_id>
重要的部分是:
countries
,ID为country_id
。region_id
。 javascript已经存在于配置页面中。它找到类countries
的元素,并使用它的ID来查找类似命名的元素(区域)。当第一个元素发生变化时,第二个元素由AJAX更新。
过去使用此功能时,如果页面上有多个国家/地区对,则有时会出现问题,因此最好避免这种情况。
答案 1 :(得分:1)
source_model属性定义类“where”是此multiselect字段的选项。您可以创建一个只包含要在此字段中显示的选项的新类,并将source_model指向此新类。
您应该使用 toOptionArray()方法来定义选项。快速执行此操作的方法如下例所示:
public function toOptionArray()
{
return array(
array( 'value' => VALUE,
'label' => LABEL ) ),
array( 'value' => VALUE2,
'label' => LABEL2 )
);
}
当然,从数据库表中获取选项将是一种更好的做法。