Slyweb
На разработку сайта! Скидки 50%!

Вывод карты плагином в своем коде

Всё по компоненту и плагину "Яндекс карты"!

Вывод карты плагином в своем коде

Сообщение EvanRoda » 09 апр 2012, 19:03

Здравствуйте.
Попытался вставить карту с помощью плагина в своем компоненте. И ничего не вышло, просто выводится текст {mapyandex_id=3}. Если этот код вставить в статью все ок. Т.е. сам плагин работает и я так понимаю, что работает он только со статьями. Не подскажите, что можно изменить в плагине или как сформировать мою страницу что бы плагин работал нормально. Конечно если это не военная тайна, или не противоречит политике партии. Заранее спасибо.
EvanRoda
 
Сообщения: 3
Зарегистрирован: 09 апр 2012, 18:49

Re: Вывод карты плагином в своем коде

Сообщение admin » 09 апр 2012, 21:00

Здравствуйте, это не сложно, если Вы обладаете начальными знаниями о php и плагинах Joomla 1.5.
Как то уже такое просили, но только нужно было выводить не в тексте статьи, а через компонент Contacts(страницы контактов в Joomla).
Думаю нижняя часть это кода как раз то что вам нужно, начиная со 122 строки:

Код: Выделить всё
...
$article = $this->contact->misc;
...


Код: Выделить всё
<?php
/** $Id: default_address.php 12387 2009-06-30 01:17:44Z ian $ */
defined( '_JEXEC' ) or die( 'Restricted access' );
jimport('joomla.plugin.plugin');
jimport('joomla.application.component.helper');
?>
<?php if ( ( $this->contact->params->get( 'address_check' ) > 0 ) &&  ( $this->contact->address || $this->contact->suburb  || $this->contact->state || $this->contact->country || $this->contact->postcode ) ) : ?>
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<?php if ( $this->contact->params->get( 'address_check' ) > 0 ) : ?>
<tr>
   <td rowspan="6" valign="top" width="<?php echo $this->contact->params->get( 'column_width' ); ?>" >
      <?php echo $this->contact->params->get( 'marker_address' ); ?>
   </td>
</tr>
<?php endif; ?>
<?php if ( $this->contact->address && $this->contact->params->get( 'show_street_address' ) ) : ?>
<tr>
   <td valign="top">
      <?php echo nl2br($this->escape($this->contact->address)); ?>
   </td>
</tr>
<?php endif; ?>
<?php if ( $this->contact->suburb && $this->contact->params->get( 'show_suburb' ) ) : ?>
<tr>
   <td valign="top">
      <?php echo $this->escape($this->contact->suburb); ?>
   </td>
</tr>
<?php endif; ?>
<?php if ( $this->contact->state && $this->contact->params->get( 'show_state' ) ) : ?>
<tr>
   <td valign="top">
      <?php echo $this->escape($this->contact->state); ?>
   </td>
</tr>
<?php endif; ?>
<?php if ( $this->contact->postcode && $this->contact->params->get( 'show_postcode' ) ) : ?>
<tr>
   <td valign="top">
      <?php echo $this->escape($this->contact->postcode); ?>
   </td>
</tr>
<?php endif; ?>
<?php if ( $this->contact->country && $this->contact->params->get( 'show_country' ) ) : ?>
<tr>
   <td valign="top">
      <?php echo $this->escape($this->contact->country); ?>
   </td>
</tr>
<?php endif; ?>
</table>
<br />
<?php endif; ?>
<?php if ( ($this->contact->email_to && $this->contact->params->get( 'show_email' )) ||
         ($this->contact->telephone && $this->contact->params->get( 'show_telephone' )) ||
         ($this->contact->fax && $this->contact->params->get( 'show_fax' )) ||
         ($this->contact->mobile && $this->contact->params->get( 'show_mobile' )) ||
         ($this->contact->webpage && $this->contact->params->get( 'show_webpage' )) ) : ?>
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<?php if ( $this->contact->email_to && $this->contact->params->get( 'show_email' ) ) : ?>
<tr>
   <td width="<?php echo $this->contact->params->get( 'column_width' ); ?>" >
      <?php echo $this->contact->params->get( 'marker_email' ); ?>
   </td>
   <td>
      <?php echo $this->contact->email_to; ?>
   </td>
</tr>
<?php endif; ?>
<?php if ( $this->contact->telephone && $this->contact->params->get( 'show_telephone' ) ) : ?>
<tr>
   <td width="<?php echo $this->contact->params->get( 'column_width' ); ?>" >
      <?php echo $this->contact->params->get( 'marker_telephone' ); ?>
   </td>
   <td>
      <?php echo nl2br($this->escape($this->contact->telephone)); ?>
   </td>
</tr>
<?php endif; ?>
<?php if ( $this->contact->fax && $this->contact->params->get( 'show_fax' ) ) : ?>
<tr>
   <td width="<?php echo $this->contact->params->get( 'column_width' ); ?>" >
      <?php echo $this->contact->params->get( 'marker_fax' ); ?>
   </td>
   <td>
      <?php echo nl2br($this->escape($this->contact->fax)); ?>
   </td>
</tr>
<?php endif; ?>
<?php if ( $this->contact->mobile && $this->contact->params->get( 'show_mobile' ) ) :?>
<tr>
   <td width="<?php echo $this->contact->params->get( 'column_width' ); ?>" >
   <?php echo $this->contact->params->get( 'marker_mobile' ); ?>
   </td>
   <td>
      <?php echo nl2br($this->escape($this->contact->mobile)); ?>
   </td>
</tr>
<?php endif; ?>
<?php if ( $this->contact->webpage && $this->contact->params->get( 'show_webpage' )) : ?>
<tr>
   <td width="<?php echo $this->contact->params->get( 'column_width' ); ?>" >
   </td>
   <td>
      <a href="<?php echo $this->escape($this->contact->webpage); ?>" target="_blank">
         <?php echo $this->escape($this->contact->webpage); ?></a>
   </td>
</tr>
<?php endif; ?>
</table>
<?php endif; ?>
<br />
<?php if ( $this->contact->misc && $this->contact->params->get( 'show_misc' ) ) : ?>
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
   <td width="<?php echo $this->contact->params->get( 'column_width' ); ?>" valign="top" >
      <?php echo $this->contact->params->get( 'marker_misc' ); ?>
   </td>
   <td>
<?php

$article = $this->contact->misc;
function mapyandexdisp($article, &$params, $limitstart,$id)
{


   global $mainframe;


   
   
    /* The url adress of page */
    $currurl = JURI::current();
    $content='';


   $baseurl = JURI::base();
   $document = &JFactory::getDocument();
   $title = $document->getTitle();
   
    /* customs params  */
    $pretext = $params->get( 'pretext');
   $h = $params->get( 'size');
   $b = '#FDFFBC';
   $b = $params->get( 'background');


   
   if (!JComponentHelper::isEnabled('com_mapyandex', true)) {
      echo JText::_('ERROR MAPS PLUGIN REQUIRES MAP YANDEX COMPONENT');
      
   }
   

   /**
    * Returns the query
    * @return string The query to be used to retrieve the rows from the database
    */
   
   function buildQuery($id)
   {

      $query = ' SELECT * '
         . ' FROM #__map_yandex WHERE id ='.$id;

      return $query;
   }


   function hit($id)
   {

      $db =& JFactory::getDBO();
      $db->setQuery('UPDATE '.$db->nameQuote('#__map_yandex')
      .'SET '.$db->nameQuote('hits').' = '.$db->nameQuote('hits').' + 1 WHERE id ='.$id);
      $db->query();
   }
   

   /**
    * Возвращаем данные
    * @return array Возврату подлежит массив объектов
    */
   function getFoobar($id)
   {
   $_foobar;
      // проверяем существует или нет
      if (empty( $_foobar ))
      {
         hit($id);
         $query = buildQuery($id);
         $db =& JFactory::getDBO();
         $db->setQuery( $query );
         $db->query();
         $_foobar = $db->loadObject();
      }

      return $_foobar;
   }
   
   /**
    * Возвращаем метки
    * @return array Возврату подлежит массив объектов
    */
   function getMetka($id)
   {
   
         $db =& JFactory::getDBO();
         $query = "SELECT * FROM ".$db->nameQuote('#__map_yandex_metki')
         ." WHERE ".$db->nameQuote('id_map')."=".$id;
         $db->setQuery($query);
         $metka = $db->loadObjectList();
      
      // return the foobar data
      return $metka;
   
   }
   
   
   
   $foobar = getFoobar($id);
   $getmetka = getMetka($id);
   

   if ($foobar->id_map_yandex !== '') {
      $foobar->id_map_yandex = $foobar->id_map_yandex;
   } else  {
      $foobar->id_map_yandex = $this->tmpl['apikey'];
   }

   if($foobar->id) {
   
      $document =& JFactory::getDocument();
      $document->addScript('http://api-maps.yandex.ru/1.1/index.xml?key='.$foobar->id_map_yandex.'&modules=router-editor');


      
      if($foobar->bradius == 1) {
         $borderradius = 'border-radius: 6px 6px 6px 6px;';
      }
      if($foobar->yandexborder == 1) {
         $border = 'border: 1px solid #'.$foobar->color_map_yandex.';';
      }
      if($foobar->center_map_yandex == 1) {
         $margin = 'margin:0 auto;';
      }
   $style = '.YMaps-b-balloon-wrap td {
   padding:0!important;
   }
   #YMapsID {
      margin:0;
      box-shadow: 4px 4px 4px #'.$foobar->color_map_yandex.'; 
      background: -moz-linear-gradient(center top , #'.$foobar->color_map_yandex.', #F1F1F1) repeat scroll 0 0 #F1F1F1;
      color: #333333;
      font-weight: bold;
      '.$borderradius.'
      '.$border.'
      '.$margin.'

      }
      .YMaps-b-balloon-content {
   width:'.$foobar->oblako_width_map_yandex.'px !important;
   }   
      
      ';
   $document->addStyleDeclaration($style);


   foreach($getmetka as $val) {
      if($val->yandexcoord == 1) {

         $metka .= '
            // Запуск процесса геокодирования
            var geocoder = new YMaps.Geocoder(\''.$val->city_map_yandex.', '.$val->street_map_yandex.'\', {results: 1, boundedBy: map.getBounds()});

            // Создание обработчика для успешного завершения геокодирования
            YMaps.Events.observe(geocoder, geocoder.Events.Load, function () {
            
               // Если объект был найден, то добавляем его на карту
               // и центрируем карту по области обзора найденного объекта
               if (this.length()) {
                  geoResult = this.get(0);
               
                   var lng = geoResult._point.__lng;
                   var lat = geoResult._point.__lat;
         
            // Создание метки
            
            var placemark = new YMaps.Placemark(new YMaps.GeoPoint(lng,lat),{style: "default#'.$val->deficon.'"});

            // Установка содержимого значка метки
            placemark.setIconContent("'.$val->misil.'");
            placemark.setBalloonContent("<div>'.$val->misilonclick.'</div>");
            map.addOverlay(placemark);
            } else {
                  alert("Ничего не найдено")
               }
              });
            ';
         
      } else {
         
         $lng = json_decode($val->lng);
         
         $metka .= 'var placemark = new YMaps.Placemark(new YMaps.GeoPoint('.$lng->longitude_map_yandex.', '.$lng->latitude_map_yandex.'),{style: "default#'.$val->deficon.'"});
            // Установка содержимого значка метки
            placemark.setIconContent("'.$val->misil.'");
            placemark.setBalloonContent("<div>'.$val->misilonclick.'</div>");
            // Добавление метки на карту
            map.addOverlay(placemark);';
      }
      
   }

   if ($foobar->where_text == 2) {
      echo $foobar->text_map_yandex;
   }

   if($foobar->yandexcoord == 1) {
      $stylecoo='style="display:none;"';
      $valone = 'var valone = "'.$foobar->city_map_yandex.', '.$foobar->street_map_yandex.'"';
   } else {
      $stylead = 'style="display:none;"';
      $parsejson = json_decode($foobar->lng);
      $lang = $parsejson->longitude_map_yandex;
      $lat = $parsejson->latitude_map_yandex;
      $valone = 'var valone = "'.$lang.', '.$lat.'"';
   }

      $el = json_decode($foobar->yandexel);

      if($el) {
      
            if(in_array(1,$el)) {
            $lineika = 'map.addControl(new YMaps.ToolBar());';
         }
            if(in_array(2,$el)) {
            $minimap = 'map.addControl(new YMaps.MiniMap());';
         }
            if(in_array(3,$el)) {
            $sputnik = 'map.addControl(new YMaps.TypeControl());';
         }
            if(in_array(4,$el)) {
            $search = ' map.addControl(new YMaps.SearchControl());';
         }
            if(in_array(5,$el)) {
            $scale = ' map.addControl(new YMaps.Zoom());';
         }
      } else {

         $lineika = 'map.addControl(new YMaps.ToolBar());';
         $minimap = 'map.addControl(new YMaps.MiniMap());';
         $sputnik = 'map.addControl(new YMaps.TypeControl());';
         $search = ' map.addControl(new YMaps.SearchControl());';
         $scale = ' map.addControl(new YMaps.Zoom());';
      }
      
   if($foobar->yandexbutton == 1){
   $element .= "
            // Добавление элементов управления
            ".$sputnik."
            ".$lineika."
            
            ".$minimap."
            ".$scale."
            ".$search."";
            }


   $script ='   


      
      
         YMaps.jQuery(function () {
            // Создание экземпляра карты и привязка его к контейнеру div
            var map = new YMaps.Map( document.getElementById("YMapsID") );

            // Установка центра, масштаба и типа карты
            
            '.$element.'
            // Создание экземпляров модели и редактора
            var routerModel = new YMaps.RouterEditor.RouterModel();
            var editor = new YMaps.RouterEditor.DragAndDropEditor(routerModel);
            // получение координат по названию
            
          
            '.$valone.'

            if(valone == "") {
               valone = "Москва, ул. Ленина, 50";
            }
            // Запуск процесса геокодирования
            var geocoder = new YMaps.Geocoder(valone, {results: 1, boundedBy: map.getBounds()});

            // Создание обработчика для успешного завершения геокодирования
            YMaps.Events.observe(geocoder, geocoder.Events.Load, function () {
               // Если объект был найден, то добавляем его на карту
               // и центрируем карту по области обзора найденного объекта
               if (this.length()) {
                  geoResult = this.get(0);
                  
                   var lng = geoResult._point.__lng;
                   var lat = geoResult._point.__lat;
         

   // Создание метки
            map.setCenter(new YMaps.GeoPoint(lng,lat), '.$foobar->yandexzoom.', YMaps.MapType.MAP);
            var placemark = new YMaps.Placemark(new YMaps.GeoPoint(lng,lat));

            // Установка содержимого значка метки
            placemark.setIconContent("'.$foobar->misil.'");
            placemark.setBalloonContent("<div>'.$foobar->misilonclick.'</div>");
            // Добавление метки на карту
            map.addOverlay(placemark);

          

               }else {
                  alert("Ничего не найдено")
               }
            });
            '.$metka.'
            // Процесс геокодирования завершен неудачно
            YMaps.Events.observe(geocoder, geocoder.Events.Fault, function (geocoder, error) {
               alert("Произошла ошибка: " + error);
            })
               

            


   
   });';
      
   $document->addScriptDeclaration($script);

   $content .= ' <div id="YMapsID" style="height:'.$foobar->height_map_yandex.'px; width:'.$foobar->width_map_yandex.'px;"></div>

    <div style="width:'.$foobar->width_map_yandex.'px;'.$margin.';text-align:right;margin-top:5px;clear:both; font-size:10px;"><a href="http://slyweb.ru/yandexmap/" title="Карты от Яндекс">Карты от Яндекс</a></div>

    <div style="height:50px;" class="clear"></div>';


   if ($foobar->where_text == 3) {
      $content .= $foobar->text_map_yandex;
   }
} else {
   $content .= JText::_("ERROR KEY PLUGIN YANDEX MAP");

}

   
return $content;
}
      
      
         function plgJSMarks( &$article, &$params, $limitstart )
         {
            static $pluginParams = null;


               if(preg_match('@{mapyandex_id=(.*?)}@si',$article))
               {

                  preg_match('@{mapyandex_id=(.*?)}@si',$article,$id);
                  
                  $plugin =& JPluginHelper::getPlugin('content', 'mapyandex');
                  $pluginParams = new JParameter( $plugin->params );

                  
                  $content = mapyandexdisp( $article, $pluginParams, $limitstart, $id[1] );
                  
                  $article = preg_replace('@{mapyandex_id=(.*?)}@si',$content,$article);
               }

            echo $article;
         }

plgJSMarks($article, $params, $limitstart)
      
      

      
      ?>
   </td>
</tr>
</table>
<br />
<?php endif; ?>

admin
Администратор
 
Сообщения: 165
Зарегистрирован: 15 авг 2009, 20:02

Re: Вывод карты плагином в своем коде

Сообщение EvanRoda » 10 апр 2012, 12:14

Спасибо, за подсказку. Куда копать понятно.
Но, к сожалению, ковыряться в коде плагинов для joomla мне еще не приходилось. Я почитал немного про их создание, но так и не понял, что храниться в переменной article.
Если можете объясните пожалуйста.

В коде оригинального плагина ему не присваивается никакого значения, а в примере который вы выложили, туда записывается значение поля misc.
Но я не понимаю что хранится в поле misc в данном примере, и что в моем случае я должен в article записать.

Заранее спасибо.
EvanRoda
 
Сообщения: 3
Зарегистрирован: 09 апр 2012, 18:49

Re: Вывод карты плагином в своем коде

Сообщение admin » 10 апр 2012, 21:36

в
Код: Выделить всё
$article = $this->contact->misc;
передаётся текст, в котором содержится код вставки плагина {mapyandex_id=(.*?)}, вместо (.*?) id карты.

Этот код потом разбирается и происходит замена:
Код: Выделить всё
                  preg_match('@{mapyandex_id=(.*?)}@si',$article,$id);
                 
                  $plugin =& JPluginHelper::getPlugin('content', 'mapyandex');
                  $pluginParams = new JParameter( $plugin->params );

                 
                  $content = mapyandexdisp( $article, $pluginParams, $limitstart, $id[1] );
                 
                  $article = preg_replace('@{mapyandex_id=(.*?)}@si',$content,$article);
admin
Администратор
 
Сообщения: 165
Зарегистрирован: 15 авг 2009, 20:02

Re: Вывод карты плагином в своем коде

Сообщение EvanRoda » 11 апр 2012, 11:11

Все! Получилось. Спасибо огромное.

Не там вызов функции делал, оказывается.
EvanRoda
 
Сообщения: 3
Зарегистрирован: 09 апр 2012, 18:49

Re: Вывод карты плагином в своем коде

Сообщение konstantin » 09 ноя 2012, 10:23

Приветствую!
Меня тоже интересует этот вопрос! Единственное я хочу вывести карту в модуле "произвольный html код" , вставляю код карты {mapyandex_id=1} и результата не вижу, только текст {mapyandex_id=1} !?
Где и что надо поменять, подскажите пожалуйста?!
Еще карту вывожу на страницах, вводит нормально.

p/s Спасибо за компонент!

Жду ответа на вопрос!
konstantin
 
Сообщения: 3
Зарегистрирован: 07 ноя 2012, 22:58


Вернуться в Компонент и плагин "Яндекс карты!" для Joomla

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

cron