php-如何在SilverStripe中的CountryDropDownfield中订购国家/地区?
作者:互联网
SilverStripe中由CountryDropdownField
生成的下拉菜单的默认顺序是字母顺序:
>阿富汗
>奥兰群岛
>阿尔巴尼亚
>阿尔及利亚
>等
如何对下拉列表进行排序,以使常见国家/地区位于列表的顶部,然后是字母顺序排列的较少使用国家/地区?
即
>澳大利亚
>加拿大
>法国
>德国
>纽西兰
>南非
>英国
>美国
>阿富汗
>奥兰群岛
>阿尔巴尼亚
>阿尔及利亚
解决方法:
我们可以创建自己的国家/地区数组,并使用CountryDropdownField setSource函数设置国家/地区的顺序:
$countriesList = Zend_Locale::getTranslationList('territory', i18n::get_locale(), 2);
asort($countriesList, SORT_LOCALE_STRING);
$commonCountries = array(
'AU' => 'Australia',
'CA' => 'Canada',
'FR' => 'France',
'DE' => 'Germany',
'NZ' => 'New Zealand',
'ZA' => 'South Africa',
'GB' => 'United Kingdom',
'US' => 'United States'
);
CountryDropdownField::create('Country', 'Country')
->setSource(array_merge($commonCountries, $countriesList));
或使用uksort而不是合并数组:
$countriesList = Zend_Locale::getTranslationList('territory', i18n::get_locale(), 2);
$commonCountries = array('AU', 'CA', 'FR', 'DE', 'NZ', 'ZA', 'GB', 'US');
uksort($countriesList, function ($a, $b) use ($countriesList, $commonCountries) {
if (in_array($a, $commonCountries)) {
if (in_array($b, $firstCountries)) {
return ($countriesList[$a] < $countriesList[$b]) ? -1 : 1;
}
return -1;
}
if (in_array($b, $commonCountries)) {
return 1;
}
return ($countriesList[$a] < $countriesList[$b]) ? -1 : 1;
});
CountryDropdownField::create('Country', 'Country')->setSource($countriesList);
标签:silverstripe,php 来源: https://codeday.me/bug/20191026/1938730.html