Umc_Base icon indicating copy to clipboard operation
Umc_Base copied to clipboard

Why is there no Region dropdown option?

Open lanrosta opened this issue 8 years ago • 2 comments

I see there is an option to use the Country Dropdown, but I do not see one for the magento Regions. Any reason why devs?

lanrosta avatar Nov 02 '17 20:11 lanrosta

@lanrosta Main reason it the lack of time. Also for regions is a bit trickier because in order to get a region you need to select a country first and not all countries have regions in the DB. This means more php/js logic to be generated.

UltimateModuleCreator avatar Nov 03 '17 13:11 UltimateModuleCreator

@dev - This should be pretty easy to implement for you. All you need to do is create an option for dropdown that is called 'Country and Region'. Then if this is selected, generate this code for the admin form...

<field name="country_id"> <argument name="data" xsi:type="array"> <item name="options" xsi:type="object">Magento\Directory\Model\ResourceModel\Country\Collection</item> <item name="config" xsi:type="array"> <item name="label" xsi:type="string" translate="true">Country</item> <item name="formElement" xsi:type="string">select</item> <item name="sortOrder" xsi:type="number">120</item> <item name="source" xsi:type="string">address</item><!-- fieldset name --> <item name="dataScope" xsi:type="string">country</item><!-- 'country' - db table column name where country code is saved --> <item name="validation" xsi:type="array"> <item name="required-entry" xsi:type="boolean">true</item> </item> </item> </argument> </field> <field name="region_id"> <argument name="data" xsi:type="array"> <item name="options" xsi:type="object">Magento\Directory\Model\ResourceModel\Region\Collection</item> <item name="config" xsi:type="array"> <item name="label" xsi:type="string" translate="true">State/Province</item> <item name="formElement" xsi:type="string">select</item> <item name="sortOrder" xsi:type="number">130</item> <item name="source" xsi:type="string">address</item><!-- fieldset name --> <item name="customEntry" xsi:type="string">state_province</item><!-- 'state_province' - db table column name where region name is saved --> <item name="dataScope" xsi:type="string">state_province_id</item><!-- 'state_province_id' - db table column name where region id is saved --> <item name="validation" xsi:type="array"> <item name="required-entry" xsi:type="boolean">true</item> </item> <item name="filterBy" xsi:type="array"> <item name="target" xsi:type="string">${ $.provider }:${ $.parentScope }.country</item><!-- 'country' - db table column name where country code is saved --> <item name="field" xsi:type="string">country_id</item><!-- country_id field name --> </item> </item> </argument> </field> <field name="region"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> <item name="dataType" xsi:type="string">text</item> <item name="label" xsi:type="string" translate="true">State/Province</item> <item name="formElement" xsi:type="string">input</item> <item name="sortOrder" xsi:type="number">135</item> <item name="source" xsi:type="string">address</item><!-- fieldset name --> <item name="customEntry" xsi:type="string">state_province</item><!-- 'state_province' - db table column name where region name is saved --> <item name="dataScope" xsi:type="string">state_province</item><!-- 'state_province' - db table column name where region name is saved --> <item name="visible" xsi:type="boolean">false</item> </item> </argument> </field>

Note this creates three fields (an extra for state_province Text field for Countries with no State Province dropdown in Magento). Also note that the field names MUST be the same for each control!

Then for the admin Listing page...

<column name="country"> <argument name="data" xsi:type="array"> <item name="options" xsi:type="object">Magento\Config\Model\Config\Source\Locale\Country</item> <item name="config" xsi:type="array"> <item name="filter" xsi:type="string">select</item> <item name="editor" xsi:type="array"> <item name="editorType" xsi:type="string">select</item> <item name="validation" xsi:type="array"> <item name="required-entry" xsi:type="boolean">true</item> </item> </item> <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> <item name="dataType" xsi:type="string">select</item> <item name="label" xsi:type="string" translate="true">Country</item> <item name="sortOrder" xsi:type="number">170</item> </item> </argument> </column> <column name="region"> <argument name="data" xsi:type="array"> <item name="options" xsi:type="object">Magento\Config\Model\Config\Source\Locale\Country</item> <item name="config" xsi:type="array"> <item name="filter" xsi:type="string">select</item> <item name="editor" xsi:type="array"> <item name="editorType" xsi:type="string">select</item> <item name="validation" xsi:type="array"> <item name="required-entry" xsi:type="boolean">true</item> </item> </item> <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> <item name="dataType" xsi:type="string">select</item> <item name="label" xsi:type="string" translate="true">Region</item> <item name="sortOrder" xsi:type="number">180</item> </item> </argument> </column> <column name="state_province_id"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> <item name="filter" xsi:type="string">text</item> <item name="editor" xsi:type="string">text</item> <item name="dataType" xsi:type="string">text</item> <item name="label" xsi:type="string" translate="true">State ID</item> <item name="sortOrder" xsi:type="number">190</item> </item> </argument> </column>

More info can be found here: See Petttro's answer here: https://magento.stackexchange.com/questions/134002/ui-component-form-state-region-field-update-after-country-select-m-2-1

lanrosta avatar Nov 07 '17 16:11 lanrosta