编程语言
首页 > 编程语言> > php-如何在SilverStripe中的CountryDropDownfield中订购国家/地区?

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