вопрос по написанию плагина гекодирования
Добрый день, я написал не большой плагин который определяет округ, район и станцию метро города, и загоняет это в твшки по которым потом можно фильтрануть, все не плохо работает но есть странность, плагин срабатывает на событие OnBeforeDocFormSave и OnDocFormSave и почему то после сохраниеня документа вываливает окошко с сообщением с заголовком ошибка, а текст ошибки содержится полный путь кпапке с сайтом на сервер, подскажите как убрать?
Комментарии: 10
help!
А можно текст ошибки?
help
Я знаю что тебе поможет!
Хотя нет, бред…
Или поможет?
Ну ладно, не буду томить.
Чтобы решить твою проблему, нужен… код! Да-да, он самый! Который плагин. Прямо здесь. Прямо обрамлённый тэгом code. Вероятность решения проблемы как минимум увеличится! :-)
p.s. сорри за стиль, но привести код — это первое что нужно сделать, чтобы тебе попытались помочь. Это же очевидно.
Хотя нет, бред…
Или поможет?
Ну ладно, не буду томить.
Чтобы решить твою проблему, нужен… код! Да-да, он самый! Который плагин. Прямо здесь. Прямо обрамлённый тэгом code. Вероятность решения проблемы как минимум увеличится! :-)
p.s. сорри за стиль, но привести код — это первое что нужно сделать, чтобы тебе попытались помочь. Это же очевидно.
я сделал вывод что эта ошибка вылетает вне зависимости от того како в плагине код, то что я написал работает, вот то что пишет ошибка 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();
буду очень рад замечаниям и исправлению кода, я почти уверен что наговнокодил
у вас как я понимаю если редактируете ресурс и сохраняете — заного все геокодируется. вот мое решение для яндекса.
плагин:
плагин:
<?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();
да, я находил ваше решение, но у меня не получилось заставить его работать
[[geocoords]] выведет координаты, их выводите в коде яндекс карт.
как оно должно работать я понял, но у меня так не заработало, + geocoords выводит координаты которые потом нужно обрабатывать javascript а у меня он сразу записывает в ТВ нужный округ и район по которым потом я могу отфильтровать объекты
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.