init(); $this->apiKey = $apiKey ?? $this->providerConfig('key'); } /** * Provider unique key * @return string */ public function providerKey(): string { return 'yandex'; } /** * Provider title * @return string */ public function providerTitle(): string { return 'Yandex Maps'; } /** * Config settings form * @param Form $form */ public function providerSettingsForm($form) { $form->text($this->providerConfigKey('key'), _t('geo', 'API key'), '', false) ->htmlAfter(_t('geo', 'Get API key [a]here[/a]', ['a' => '', '/a' => ''])) ->visibleIf('geo.maps.provider', $this->providerKey()) ->sysAdmin($this->providerConfigKey('key')); } /** * Map JavaScript API URL * @param array $opts * @return string|string[] */ public function scripts(array $opts = []) { $query = $this->defaults($opts['query'] ?? [], [ 'coordorder' => 'latlong', 'onerror' => 'onYMapError', 'lang' => Lang::current('locale', 'ru_RU'), 'apikey' => $this->apiKey, ]); if (! empty($opts['full'])) { $query['load'] = 'package.full'; } $version = $opts['version'] ?? $this->providerConfig('version', '2.1'); return [ 'https://api-maps.yandex.ru/' . $version . '/' . Url::query($query), '@core/maps/map.yandex.min.js', ]; } /** * Static Map JavaScript API URL * @param string|float $latitude * @param string|float $longitude * @param int|string $width * @param int|string $height * @param array $opts * @return string|string[] */ public function staticScripts($latitude, $longitude, int $width, int $height, array $opts = []) { $query = $this->defaults($opts['query'] ?? [], [ 'l' => 'map', 'pt' => join(',', [$latitude, $longitude, 'org']), 'z' => $opts['zoom'] ?? $this->providerConfig('static.zoom', 13), 'size' => join(',', [$width, $height]), 'key' => $this->apiKey, ]); $version = $opts['version'] ?? $this->providerConfig('static.version', '1.x'); return 'https://static-maps.yandex.ru/' . $version . '/' . Url::query($query); } }