вопрос по написанию плагина гекодирования

Добрый день, я написал не большой плагин который определяет округ, район и станцию метро города, и загоняет это в твшки по которым потом можно фильтрануть, все не плохо работает но есть странность, плагин срабатывает на событие OnBeforeDocFormSave и OnDocFormSave и почему то после сохраниеня документа вываливает окошко с сообщением с заголовком ошибка, а текст ошибки содержится полный путь кпапке с сайтом на сервер, подскажите как убрать?
Сергей Скат
12 августа 2014, 16:16
modx.pro
1
1 178
0

Комментарии: 10

Сергей Скат
14 августа 2014, 19:37
0
help!
    Михаил
    14 августа 2014, 20:02
    0
    А можно текст ошибки?
    Алексей Карташов
    14 августа 2014, 20:09
    +1
    Я знаю что тебе поможет!
    Хотя нет, бред…
    Или поможет?
    Ну ладно, не буду томить.

    Чтобы решить твою проблему, нужен… код! Да-да, он самый! Который плагин. Прямо здесь. Прямо обрамлённый тэгом code. Вероятность решения проблемы как минимум увеличится! :-)

    p.s. сорри за стиль, но привести код — это первое что нужно сделать, чтобы тебе попытались помочь. Это же очевидно.
      Сергей Скат
      17 августа 2014, 11:31
      0
      я сделал вывод что эта ошибка вылетает вне зависимости от того како в плагине код, то что я написал работает, вот то что пишет ошибка cdn.joxi.ru/uploads/prod/2014/08/17/d9d/092/2b0d12ed29261dc99b6866f85da973cfec3f60ab.jpg однако все что я хочу происходит, по адресу из ТВ adres записывается в другие два ТВ округ и район этого адреса вот код для интересующихся, но повторюсь, я выяснил что ему плевать какой там код, хоть вообще пустой, все равно ошибка при сохранении, она ничего особо не делает, просто раздражает
      <?php
      $tv = $modx->getObject('modTemplateVar',array('name'=>'street')); // Получаем значение всех ТВ
          $adres_value = $tv->getValue($id); // получаем id документа в котором находимся
          $adres_output = $tv->renderOutput($id);// рендерим содержимое ТВ
          
          $adress1=urlencode($adres_output);
      	$url="http://geocode-maps.yandex.ru/1.x/?geocode=".$adress1."&kind=metro&results=3"; 
      	$content=file_get_contents($url); // получаем страницу с координатами
      	preg_match('/<pos>(.*?)<\/pos>/',$content,$point); // вырезаем нужные нам координаты
      	$coordinaty=explode(' ',trim(strip_tags($point[1]))); 
       
      	//координаты объекта
      	
          $coords_xy = $coordinaty[0].','.$coordinaty[1];
          
          
          $metro ="http://geocode-maps.yandex.ru/1.x/?geocode=".$coords_xy."&kind=metro&results=3"; // тут мы формируем http запрос на сервер для получения xml с ответом с метро 
          $metro_xml = file_get_contents($metro);
         
          preg_match('/<PremiseName>(.*?)<\/PremiseName>/',$metro_xml,$metro_point); // вырезаем нужные нам координаты для метро 
          $metro_coord=explode(' ',trim(strip_tags($metro_point[1]))); 
          
          $okrug ="http://geocode-maps.yandex.ru/1.x/?geocode=".$coords_xy."&kind=district&results=3"; // тут мы формируем http запрос на сервер для получения xml с ответом с округом
          $okrug_xml = file_get_contents($okrug);
          
          preg_match('/<DependentLocalityName>(.*?)<\/DependentLocalityName>/',$okrug_xml,$okrug_point); // вырезаем нужные нам координаты для Округов 
          $okrug_coord=explode(' ',trim(strip_tags($okrug_point[1]))); 
          
          
          $resource->setTVValue('okrug',$okrug_coord[0].' '.$okrug_coord[1].' '.$okrug_coord[2] ); // записываем значение округа в ТВ шку 
          $resource->setTVValue('metro',$metro_coord[1].' '.$metro_coord[2] );// записываем метро в Твшку 
          $resource->save();
        Сергей Скат
        17 августа 2014, 11:48
        0
        буду очень рад замечаниям и исправлению кода, я почти уверен что наговнокодил
          but1head
          17 августа 2014, 11:56
          1
          0
          у вас как я понимаю если редактируете ресурс и сохраняете — заного все геокодируется. вот мое решение для яндекса.
          плагин:
          <?php
          switch ($modx->event->name) {
          	case 'OnDocFormPrerender':
          		$_SESSION['before'] = $resource->getTVValue('adres'); // адрес при загрузке
          	break;
          	case 'OnDocFormSave':
          		$after = $resource->getTVValue('adres'); // адрес при сохранении
          		if($after !== $_SESSION['before']){
          			$param = array(
          			  'adres' => $resource->getTVValue('adres'),
          			  'id' => $resource->get('id')
          			);
          		  $modx->runSnippet('geocoords',$param);
          		}
          	break;
          }
          сниппет:
          <?php
          $doc = $modx->getObject('modResource', $id);
          
          $replace = array(' ', '/');
          $adres_new = str_replace($replace, '+', $adres);
          
          $dataCoords = simplexml_load_file('http://geocode-maps.yandex.ru/1.x/?geocode='.$adres_new);
          
          foreach ($dataCoords->GeoObjectCollection->featureMember[0]->GeoObject->Point->pos as $coords) {
          	
          	$array = explode(' ',$coords);
          	$coords = $array[1].','.$array[0];
          	$doc->setTVValue('coords', $coords);
          } 
          
          
          
          $doc->save();
            Сергей Скат
            17 августа 2014, 12:02
            0
            да, я находил ваше решение, но у меня не получилось заставить его работать
              but1head
              17 августа 2014, 12:08
              0
              [[geocoords]] выведет координаты, их выводите в коде яндекс карт.
                Сергей Скат
                17 августа 2014, 12:10
                0
                как оно должно работать я понял, но у меня так не заработало, + geocoords выводит координаты которые потом нужно обрабатывать javascript а у меня он сразу записывает в ТВ нужный округ и район по которым потом я могу отфильтровать объекты
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    10