Клуб API Карт

Серая карта (каталог Sobi + Tabs)

suleymanov.vitaliy
18 февраля 2011, 13:42

Помогите решить проблем с табами. Есть сайт с каталогом sobi, на нем по координатам отображаются карты Яндекса. Но карты находятся в табе и соответственно если при загрузке страницы таб не активен то и вмест карты серый прямоугольник.

Помогите куда и как правильно мне вставить код с map.redraw(), что б карта обновлялась при клике на таб.

Код с функцией:

P.S то, что написано GoogleMaps не имеет значение.

    function showGoogleMaps($mySobi, $config)
    {

        if( !$config->useGoogleMaps || !isset( $config->googleMapsApiKey ) ) {
            return null;
        }
        $map_url = "http://api-maps.yandex.ru";
        $map_api_version = "1.0";
 
        $title = $config->jsAddSlashes( $mySobi->title );
        $GeoPos = $config->getGeoPosition( $mySobi->id );
  
     if( $GeoPos['lat'] && $GeoPos['long'] &&
is_numeric( $GeoPos['lat'] ) && is_numeric( $GeoPos['lat'] ) ) {
            ?>
 
  
                     <script src="<?php echo
$map_url?>/<?php echo $map_api_version?>/index.xml?key=<?php
echo $config->googleMapsApiKey ?>"
type="text/javascript"></script>
                        <script type="text/javascript">
                //<![CDATA[
                window.onload = function init () {
            var map = new YMaps.Map(document.getElementById("YMapsID"));
           
map.setCenter(new YMaps.GeoPoint(<?php echo $GeoPos['lat']; ?>,
<?php echo $GeoPos['long']; ?>), <?php echo
$config->googleMapsZoom;  ?>);
 
var placemark=new
YMaps.Placemark(new YMaps.GeoPoint(<?php echo $GeoPos['lat']; ?>,
<?php echo $GeoPos['long']; ?>));
    map.addOverlay(placemark);
  
 placemark.openBalloon('<div style="text-align:center; width: 200px;
"><strong><?php echo $title;
?></strong></div>');
 
 
map.addControl(new YMaps.SmallZoom());
 
        };
 
 //]]>
</script>

 
<div style="width: <?php echo $config->googleMapsWidth;
?>px; height: <?php echo $config->googleMapsHeight; ?>px;"
id="YMapsID"></div>
 
<?php
        }
      
 elseif ( ( strlen( trim($GeoPos['lat'] ) ) && strlen( trim(
$GeoPos['long'] ) ) ) && !is_numeric( $GeoPos['lat'] ) ||
!is_numeric( $GeoPos['lat'] ) ) {
          
 trigger_error("HTML_SOBI::showGoogleMaps(): Given cooordinates
({$GeoPos['lat']}, {$GeoPos['long']}) are not correct. Please enter
float values");
        }
    }

и код вставки в шаблон вместе с табами. Таб с картами третий - YaMapTab

 

<?php $myTabs = new sobiTabs (true);?>
    <?php $myTabs->startPane("myOwnPane");?>
            
    <?php $myTabs->startTab("Фото","FirstTab");?>
        <?php echo $plugins["gallery"]; ?>
    <? $myTabs->endTab();?>
    <?php $myTabs->startTab("Ваши мнения и оценки","SecondTab");?>
      <table style="width:98%;">
          <tr><td width="50%">
            <?php echo $plugins['reviews']; ?>
            </td></tr>
        </table>
        <? $myTabs->endTab();?>

    <?php $myTabs->startTab("Показать на карте","YaMapTab");?>
    
        <table style="width:98%;">
            <tr><td>
            <center><?php HTML_SOBI::showGoogleMaps($mySobi, $config); ?></center>
            </td></tr>
            </table>
    <?php $myTabs->endTab(); ?>

      <?php $myTabs->endPane();?>

 

Ссылка с примером - http://bonus.lg.ua/catalog/diskonti/platezhno-diskontnaja-karta-lugansksity.html

8 комментариев
Подписаться на комментарии к посту
Скройте код под врезки, пожалуйста.
map.redraw() надо делать после того как откроется таб с картой
Что нужно map.redraw() я понимаю, а в какое место и с каким кодом его вставить?
карта и содержимое других табов
при кликах на табах отображается/скрывается с помощью javascript Sobi
вот там и надо вставить
map.redraw();

только map  должно быть в глобальной области видимости
(объявлено без var =)
Спасибо, завтра буду испытывать. Еще вопросик как сделать обработку таба (YaMapTab) на клик и где это прописать?
в jquery через bind

Ребята, спасибо. Очень помогли.