Ранее я всегда получал список поселений немного видоизмененным кодом, выдранным откуда-то из шопскрипта:
public static function getSettlements()
{
$settlements = array();
$routing = wa()->getRouting();
$domain_routes = $routing->getByApp('shop');
foreach ($domain_routes as $domain => $routes) {
foreach ($routes as $key => $route) {
$settlement = $domain . '/' . $route['url'];
$settlement = rtrim($settlement, '/*');
$url = parse_url('http://' . $settlement);
$path = isset($url['path']) ? $url['path'] : '';
$settlement = $url['host'] . $path;
$settlements[$key]['title'] = $settlement;
$settlements[$key]['value'] = 'id-' . $key;
}
}
return $settlements;
}Не обращайте внимание на "http://". Это чисто мой костыль. Собственно этот код всегда работал и всегда его принимали. При помощи него я показывал поселения в админке.
Теперь этот код модероторов не устраивает:
В настройках плагина отображаются не все имеющиеся поселения магазина (в том числе на разных доменах).
Т.е. надо как-то показывать поселения вместе с доменами. Прошу поделиться мыслями или кодом. Да и вообще я даже чисто визуально не пойму как это все представить в настройках. Ведь у разных доменов могут быть одинаковые поселения...
Сейчас еще раз проверил как работает этот код:
Т.е. как-то раз на раз не приходится. У меня показывает разные домены, у модераторов не показывает. Хз че делать...
Если бы не выделенная жирным фраза, то я мог бы предположить, что модератору не понравился тот факт, что витрина shop/* и shop* будут выглядеть одинаково. Но тут явно не о том.
Я нашел ошибку. Все дело в ключах массива ($key). Они могут быть одинаковыми для разных доменов. Поэтому могут переписать друг друга. Короче нужно массив видоизменить и все будет нормально.
Есть какие-нибудь идеи как засунуть в value для чекбокса два ключа?
Вот так нормально работает:
public static function getSettlements() { $settlements = array(); $routing = wa()->getRouting(); $domain_routes = $routing->getByApp('shop'); foreach ($domain_routes as $domain => $routes) { foreach ($routes as $key => $route) { $s = $domain . '/' . $route['url']; $s = rtrim($s, '/*'); $settlements[$s]['title'] = $s; $settlements[$s]['value'] = $s; } } return $settlements; }А почему такой странный формат возвращаемых данных? Почему не?
public static function getSettlements() { $settlements = array(); foreach (wa()->getRouting()->getByApp('shop') as $domain => $routes) { foreach ($routes as $id => $route) { $url = $domain . '/' . rtrim($route['url'], '*'); $name = isset($route['_name']) ? $route['_name'] : _w('Shop') . ' ' . $id; $settlements[$url] = $name; } } return $settlements; }Потому, что это колбэк для настроек плагина.