Клуб API Карт

Серая Яндекс.Карта (АПИ 1.1) на Джумле 3.0

metaspirit
13 ноября 2012, 02:27

Серая Яндекс.Карта (АПИ 1.1) на Джумле 3.0

Воспрос следующий. Есть скрипт карт, который хорошо работает на джумла 1.5 и 2.5, но после установки на 3.0 выдает только серое окно.

Пробовал применять map.redraw(), повесив на callback-функцию лог в консоль - перерисовывание карты происходит, но окно все равно остается серым.

Может, кто сталкивался с подобным или знает решение?

Ссылка на размещенную карту - http://dev.raslab.org/item/jan-q-public#location-7476c56b-45df-4028-aa00-14731717d8ca

13 комментариев
Подписаться на комментарии к посту

Not Acceptable

An appropriate representation of the requested resource /item/jan-q-public could not be found on this server.

Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.

Лечится стиранием кукисов.

если в консоли вызвать

map_6039d596_2195_4ad1_aed6_0a3fa0161b51.redraw()

то карта начинает отображаться

видимо вы вызываете его до того как контейнер с картой успевает отобразиться

А как сделать проверку, отобразился контейнер с картой или нет? И прогрузилось АПИ или нет?

АПИ 1.1 грузится синхронно - т.е. будет доступно вместе с документом

Узнать что контейнер отобразился - наверное можно почитать документацию на тот фреймворк, который вы используете для реализации табов и их переключения. Обычно предоставляются соотв. события на которые можно подписаться

факт в том, что когда я размещаю карту вне табов, все равно серое окно.
Я даже уже подумываю, а нет ли тут конфликта с bootstrap?

И так, для перегрузки карты при открытии таба:

jQuery(function () {   
         jQuery(document).on("tabsshow", ".ui-tabs", function(event, ui) {   
            event.preventDefault(); 
            if (jQuery(ui.panel).find("div#YMapsID-identifier ?>").length) {                          
                map_identifier) ?>.redraw(true, function(){
                    //console.log("map redrawed");
                });
            }
            return false;   
        });
    });   

метод .on() введен в jQuery 1.7

Но, серое окно все равно остается, вопрос почему?

Отвечу себе сам, вышеприведенная функция в табах отлично работает. Карта перезагружается. Проверено в нескольких браузерах. Проблема с серым окном возникает только в лисе 18.0 альфа 2.

Спасибо за помощь.

У АПИ 1 была проблема со стилем max-width на img

Воспроизводилась она не везде, кажется как раз Firefox страдал

Возможно bootstrap или ваши стили выставляют это правило, попробуйте проверить

Спасибо, за подсказку.

Вот такой фикс получился для табов и бутстрапа:

jQuery(function () {           
         // fix with jQuery UI Tabs and img { max-width:100%; }
         jQuery(document).on("tabsshow", ".ui-tabs", function(event, ui) {   
            event.preventDefault();           
            var yandexmaps = jQuery(ui.panel).find("div#YMapsID-identifier ?>");
            if (yandexmaps.length) {                                                       
                map_identifier) ?>.redraw();
                yandexmaps.find("img").each(function() {
                    jQuery(this).css("max-width", "none");
                });
            }
            return false;   
        });
    });   

 

               yandexmaps.find("img").each(function() {
                    jQuery(this).css("max-width", "none");
                });

 

это слишком затратно

лучше одно добавить css правило

в той статье в самом низу есть ссылка на правильное решение

В том то и дело, что оно мне не подходит. Т.к. карт на странице может быть много и у каждой свой контейнер с уникальмым ИД, которые генерируются динамически. Хотя, можно прямо в тексте задать правило через пхп, а не через отдельный файл. Спасибо.

Кстати, Вы были правы. Мой метод работал только для текущего слоя, если переключал карту, то снова серый фон.

Последовал Вашему совету, добавил:

$doc =& JFactory::getDocument();
$doc->addStyleDeclaration("#YMapsID-".$this->identifier." img {max-width: none;}");

и глобально закрыл баг. Надеюсь, кому-то еще, кроме меня, данный дискусс окажется полезным.