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

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 693 раза
Контактная информация:

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

Сообщение directman66 » Сб июн 17, 2017 5:09 pm

Чтобы потом к ней обращаться с определенными параметрами и она возвращала значения? Средствами 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;
но это сценарий и им пользоваться неудобно, а если бы это была функция - ее использование было бы намного проще.
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
Аватара пользователя
lanket
Сообщения: 1168
Зарегистрирован: Вт окт 14, 2014 11:27 pm
Откуда: Санкт-Петербург
Благодарил (а): 260 раз
Поблагодарили: 163 раза

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

Сообщение lanket » Вс июн 18, 2017 11:08 am

directman66 писал(а):Чтобы потом к ней обращаться с определенными параметрами и она возвращала значения?
...
Поковыряйте модуль 'дата' . Помоему уважаемый nick7zmail его написал.

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

Отправлено с моего Redmi Note 3 через Tapatalk
Разработка голосового асистента для Мажордомо по любому ключевому слову.
:arrow: Обсужение
:arrow: gitHub 2й версии терминала
:arrow: GitHub модуля для МД
gitHub сырого модуля 2й версии
:arrow: Connect
Rasberry Pi 2, MDM, MySensors. И говорящий апельсин.
ipz
Сообщения: 238
Зарегистрирован: Чт ноя 26, 2015 10:54 pm
Благодарил (а): 38 раз
Поблагодарили: 45 раз

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

Сообщение ipz » Пн июн 19, 2017 1:06 am

В метод можно передать параметры через массив.

Я так делаю

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

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

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

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

function runScript($id, $params = '')
 
Если я правильно понял вопрос.
directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 693 раза
Контактная информация:

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

Сообщение directman66 » Пн июн 19, 2017 6:36 am

Передать можно и в скрипт, а как получить? Можно использовать глобальные переменные, но это костыль на костыле.
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

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

Сообщение nick7zmail » Пн июн 19, 2017 6:44 am

Ну как то так -

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

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

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

return $data; 
$data - то, что прилетит в итоге в $otvet...ну в теории так...проверять, не проверял...если с runscript не сканает, в крайнем случае - можете написать свою функцию...php файлик с функцией кладётся в папку lib, и функция указанная там-доступна для вызова из любого места системы...
За это сообщение автора nick7zmail поблагодарил:
directman66 (Пн июн 19, 2017 7:39 am)
Рейтинг: 1.16%
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 693 раза
Контактная информация:

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

Сообщение directman66 » Пн июн 19, 2017 7:39 am

nick7zmail писал(а):жно быть

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

return $data;
return не возвращает данные из сценария в сценарий.
Последний раз редактировалось directman66 Пн июн 19, 2017 7:44 am, всего редактировалось 1 раз.
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

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

Сообщение nick7zmail » Пн июн 19, 2017 7:42 am

Я ж говорю не пробовал)) тогда только функцией через /lib.

Отправлено с моего Xperia Z через Tapatalk
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 693 раза
Контактная информация:

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

Сообщение directman66 » Пн июн 19, 2017 8:39 am

средствами php сделал, и все же хотелось бы средствами cms

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

В голову приходит только вариант sg (temp) gg(temp) )))
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
olehs
Сообщения: 1115
Зарегистрирован: Вс июн 14, 2015 11:08 am
Благодарил (а): 85 раз
Поблагодарили: 342 раза

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

Сообщение olehs » Пн июн 19, 2017 10:28 am

directman66 писал(а):
nick7zmail писал(а):жно быть

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

return $data; 
return не возвращает данные из сценария в сценарий.
Проверил: и методы и скрипты успешно возвращают значения.
directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 693 раза
Контактная информация:

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

Сообщение directman66 » Пн июн 19, 2017 11:19 am

точно, всем спасибо, неправильно передавал параметры

делюсь:

скрипт:
СпойлерПоказать
$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;
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
Ответить