Страница 1 из 2

можно ли средствами MD сделать функцию?

Добавлено: Сб июн 17, 2017 5:09 pm
directman66
Чтобы потом к ней обращаться с определенными параметрами и она возвращала значения? Средствами php знаю, что можно, интересует именно средствами CMS.

Как пример написал сценарий получения адреса по координатам:
СпойлерПоказать
$y=gg('38614954354422955857342.lng');
$x=gg('38614954354422955857342.lat');
$url='http://maps.googleapis.com/maps/api/geo ... atlng='.$x.',' .$y.'&sensor=false&language=ru';
//echo $url;
//в обратную сторону
//url_request = "http://maps.googleapis.com/maps/api/geo ... e&address=" + RussianStringToURLEncode(city) + " " + RussianStringToURLEncode(street)


$fields = array(
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.3',
'Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4',
'Connection: keep-alive',
'User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.76 Safari/537.36'
);

foreach($fields as $key=>$value)
{ $fields_string .= $key.'='.urlencode($value).'&'; }
//echo $fields_string;
//echo '\n';
rtrim($fields_string, '&');

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, count($fields));
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
$result = curl_exec($ch);
//echo $result;
curl_close($ch);

//echo $result;
$xml = simplexml_load_string($result);
//echo $xml ;
//$otvet=$xml->GeocodeResponce->result->formatted_address;
//$otvet=$xml->GeocodeResponse->result->formatted_address;
$otvet=$xml->result->formatted_address;
//$otvet=$xml;
echo $otvet;
но это сценарий и им пользоваться неудобно, а если бы это была функция - ее использование было бы намного проще.

Re: можно ли средствами MD сделать функцию?

Добавлено: Вс июн 18, 2017 11:08 am
lanket
directman66 писал(а):Чтобы потом к ней обращаться с определенными параметрами и она возвращала значения?
...
Поковыряйте модуль 'дата' . Помоему уважаемый nick7zmail его написал.

Он, модуль я имею ввиду, как раз только этим и заниматься.
По его аналогии можно насоздавать своих функций.

Отправлено с моего Redmi Note 3 через Tapatalk

Re: можно ли средствами MD сделать функцию?

Добавлено: Пн июн 19, 2017 1:06 am
ipz
В метод можно передать параметры через массив.

Я так делаю

Код: Выделить всё

$prm['FORCE_START']=1;
      callMethod('Health.checkState', $prm); 
В методе этот массив использую стандартным образом $params['FORCE_START']

Судя по исходникам так же можно сделать и для runScript

Код: Выделить всё

function runScript($id, $params = '')
 
Если я правильно понял вопрос.

Re: можно ли средствами MD сделать функцию?

Добавлено: Пн июн 19, 2017 6:36 am
directman66
Передать можно и в скрипт, а как получить? Можно использовать глобальные переменные, но это костыль на костыле.

Re: можно ли средствами MD сделать функцию?

Добавлено: Пн июн 19, 2017 6:44 am
nick7zmail
Ну как то так -

Код: Выделить всё

$otvet=runscript('vopros', $params_array); 
При этом в скрипте вместо echo должно быть

Код: Выделить всё

return $data; 
$data - то, что прилетит в итоге в $otvet...ну в теории так...проверять, не проверял...если с runscript не сканает, в крайнем случае - можете написать свою функцию...php файлик с функцией кладётся в папку lib, и функция указанная там-доступна для вызова из любого места системы...

Re: можно ли средствами MD сделать функцию?

Добавлено: Пн июн 19, 2017 7:39 am
directman66
nick7zmail писал(а):жно быть

Код: Выделить всё

return $data;
return не возвращает данные из сценария в сценарий.

Re: можно ли средствами MD сделать функцию?

Добавлено: Пн июн 19, 2017 7:42 am
nick7zmail
Я ж говорю не пробовал)) тогда только функцией через /lib.

Отправлено с моего Xperia Z через Tapatalk

Re: можно ли средствами MD сделать функцию?

Добавлено: Пн июн 19, 2017 8:39 am
directman66
средствами php сделал, и все же хотелось бы средствами cms

Из скрипта вызывается, а вот из метода почему-то возвращает пустое значение.

В голову приходит только вариант sg (temp) gg(temp) )))

Re: можно ли средствами MD сделать функцию?

Добавлено: Пн июн 19, 2017 10:28 am
olehs
directman66 писал(а):
nick7zmail писал(а):жно быть

Код: Выделить всё

return $data; 
return не возвращает данные из сценария в сценарий.
Проверил: и методы и скрипты успешно возвращают значения.

Re: можно ли средствами MD сделать функцию?

Добавлено: Пн июн 19, 2017 11:19 am
directman66
точно, всем спасибо, неправильно передавал параметры

делюсь:

скрипт:
СпойлерПоказать
$zap=$params['zapros'];
echo $zap;
$x=$zap[0];
$y=$zap[1];

if ($x==""){$x=gg('38614954354422955857342.lat');}
if ($y==""){$y=gg('38614954354422955857342.lng');}

echo "x:".$x.";y=".$y;



$url='http://maps.googleapis.com/maps/api/geo ... atlng='.$x.',' .$y.'&sensor=false&language=ru';
//echo $url;
//в обратную сторону
//url_request = "http://maps.googleapis.com/maps/api/geo ... e&address=" + RussianStringToURLEncode(city) + " " + RussianStringToURLEncode(street)


$fields = array(
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.3',
'Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4',
'Connection: keep-alive',
'User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.76 Safari/537.36'
);

foreach($fields as $key=>$value)
{ $fields_string .= $key.'='.urlencode($value).'&'; }
//echo $fields_string;
//echo '\n';
rtrim($fields_string, '&');

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, count($fields));
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
$result = curl_exec($ch);
//echo $result;
curl_close($ch);

//echo $result;
$xml = simplexml_load_string($result);
//echo $xml ;
//$otvet=$xml->GeocodeResponce->result->formatted_address;
//$otvet=$xml->GeocodeResponse->result->formatted_address;
$otvet=$xml->result->formatted_address;
//$otvet=$xml;
//echo $otvet;
return $otvet;

вызов скрипта
СпойлерПоказать
//$otvet=getadrfromxy(56.8381656,60.6197382);
//$otvet=rs('getardfromcoordmd' =>array('56.8381656','60.6197382'));
$otvet=runScript('getardfromcoordmd', array('zapros' => array('36.8381656','60.6197382')));

echo $otvet;