Страница 1 из 1

насчет карты гугл

СообщениеДобавлено: 07 сен 2017, 15:58
vanred79
Добрый день! Подскажите пожалуйста можно ли сделать загрузку карты гугл асинхронно? В коде страницы как я понял за загрузку карты отвечает вроде этот код
Код: Выделить всё
<script type="text/javascript" src="https://www.google.com/jsapi"
. Файл который его формирует вот этот framework\web\helpers\CGoogleApi.php.
Подскажите пожалуйста как сделать в этом коде:
Код: Выделить всё
public static $bootstrapUrl='http://www.google.com/jsapi';

    
/**
     * Renders the jsapi script file.
     * @param string $apiKey the API key. Null if you do not have a key.
     * @return string the script tag that loads Google jsapi.
     */
    
public static function init($apiKey=null)
    {
        if(
$apiKey===null)
            return 
CHtml::scriptFile(self::$bootstrapUrl);
        else
            return 
CHtml::scriptFile(self::$bootstrapUrl.'?key='.$apiKey);
    } 


чтобы в итоге получилось
Код: Выделить всё
<script async defer type="text/javascript" src="https://www.google.com/jsapi"

Re: насчет карты гугл

СообщениеДобавлено: 08 сен 2017, 08:48
Xpycm
Здравствуйте.

Попробуйте так:
Код: Выделить всё
CHtml::scriptFile('ссылка_на_js_карт', array('async' => '''defer'=> '')); 

Re: насчет карты гугл

СообщениеДобавлено: 08 сен 2017, 12:52
vanred79
Xpycm писал(а):Здравствуйте.

Попробуйте так:
Код: Выделить всё
CHtml::scriptFile('ссылка_на_js_карт', array('async' => '', 'defer'=> ''));

Добрый день Хруст!
Оказывается не этот кусок кода ответственный за загрузку, а вот этот:
Код: Выделить всё
$cs=Yii::app()->getClientScript();
        
$url=$apiKey===null?self::$bootstrapUrl:self::$bootstrapUrl.'?key='.$apiKey;
        
$cs->registerScriptFile($url); 

Сделал вот так:
Код: Выделить всё
$cs->registerScriptFile($url, array('async' => '''defer'=> '')); 

Но тогда этот код
Код: Выделить всё
<script type="text/javascript" src="https://www.google.com/jsapi"></script>

вообще исчезает со страницы

Re: насчет карты гугл

СообщениеДобавлено: 08 сен 2017, 13:56
Xpycm
Конечно оно будет исчезать.

Вы документацию вообще читаете перед тем как писать код?
http://www.yiiframework.com/doc/api/1.1 ... ile-detail

Вторым параметром идёт позиция, а не опции

Re: насчет карты гугл

СообщениеДобавлено: 08 сен 2017, 18:28
vanred79
Сделал вот так
Код: Выделить всё
$cs->registerScriptFile($url,CClientScript::POS_HEAD,array('async'=>'''defer'=> '')); 

но все равно не работает, возможно из-за версии yii, вот здесь об этом пишут http://www.yiiframework.ru/forum/viewtopic.php?t=14309

Re: насчет карты гугл

СообщениеДобавлено: 08 сен 2017, 19:19
Xpycm
Похоже на правду, что для корректной работы требуется обновить фреймворк до версии 1.1.14.
Ранее это был баг фреймворка по всей видимости: - Bug #1724: Allow CClientScript registering scripts and script files with the HTML options (klimov-paul)

Взято отсюда: https://raw.githubusercontent.com/yiiso ... /CHANGELOG

Рекомендую сразу обновить до 1.1.15. Не вспомню как оно обновится с "танцами с бубном" или без них, т.к 1.1.15 вышла более 3 лет назад

Помню точно, что до версии 1.1.16 "без танцев с бубном" и необходимым багажом знаний не обновить, т.к - Chg #2025: Upgraded jQuery to 1.11.1 (marcovtwout)

Re: насчет карты гугл

СообщениеДобавлено: 09 сен 2017, 11:58
vanred79
Добрый день Хруст! Как думаете можно вот так сделать в моем случае:
1) закомментировать код
Код: Выделить всё
$cs->registerScriptFile($url);
в файле \framework\web\helpers\CGoogleApi.php
2) в файл protected\views\layouts\main.php в head вставить код:
Код: Выделить всё
<script async defer type="text/javascript" src="//www.google.com/jsapi">

Можно ли так сделать?

Если, да, то еще такой вопрос, как задать условие, чтобы
Код: Выделить всё
<script async defer type="text/javascript" src="//www.google.com/jsapi">
появлялся только на страницах объявлений (/property)?