Передача данных в сниппет
Доброго времени суток. Нужна помощь в решении задачи есть сниппет который по API передает данные на другой ресурс вот код сниппета:
$process = curl_init("https://user.api.onliner.by/login");
curl_setopt($process, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($process, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($process, CURLOPT_COOKIEJAR, 'cookie');
$result = curl_exec($process);
curl_close($process);
$matches = [];
preg_match("/token\('(.*)'\);/", $result, $matches);
$token = $matches[1];
$process = curl_init("https://user.api.onliner.by/login");
curl_setopt($process, CURLOPT_HTTPHEADER, [
'Accept: application/json',
'Content-Type: application/json',
]);
curl_setopt($process, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($process, CURLOPT_VERBOSE, true);
curl_setopt($process, CURLOPT_HEADER, 1);
curl_setopt($process, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($process, CURLOPT_COOKIEFILE, 'cookie');
curl_setopt(
$process,
CURLOPT_POSTFIELDS,
json_encode([
'token' => $token,
'login' => 'П',
'password' => '13',
])
);
$result = curl_exec($process);
$header_size = curl_getinfo($process, CURLINFO_HEADER_SIZE);
$header = substr($result, 0, $header_size);
curl_close($process);
preg_match_all("/Set-Cookie: (.*?)=(.*?);/i", $header, $res);
$cookie = [];
foreach ($res[1] as $key => $value) {
$cookie[$value] = $res[2][$key];
};
$session = urldecode($cookie['onl_session']);
var_dump($session);
$data = [
"location"=> [
"address" => "Беларусь, [[+tv.town_name]], [[+tv.street_name]], [[+tv.house_number]]",
"user_address" => "[[+tv.street_name]], [[+tv.house_number]]",
"latitude" => 53.234234,
"longitude" => 27.6754
],
"photos" => [
[
"600x400" => "http://upload.onliner.by/apartment_rentals/1/600x400/fba665aea899df8f7a243c2d5e7093cf.jpg",
"1400x930" => "http://upload.onliner.by/apartment_rentals/1/1400x930/fba665aea899df8f7a243c2d5e7093cf.jpg"
],
[
"600x400" => "http://upload.onliner.by/apartment_rentals/1/600x400/87dc18938a1dcbcfa39de290b1a7711a.jpg",
"1400x930" => "http://upload.onliner.by/apartment_rentals/1/1400x930/87dc18938a1dcbcfa39de290b1a7711a.jpg"
]
],
"resale" => true,
"number_of_rooms" => 2,
"walling" => "brick",
"floor" => 2,
"number_of_floors" => 5,
"area"=> [
"total" => 50,
"living" => 40,
"kitchen" => 9
],
"wall_height" => 2.7,
"building_year" => 1961,
"description" => "Шикарная хрущевка",
"contact"=> [
"name" => "Валентина Михайловна",
"phones" => [
"29 1234567",
"+375331234567"
],
"call_time" => [9, 18]
],
"seller"=> [
"type" => "agent",
"name" => "Квадратный метр",
"legal_info" => [
"unp" => "190003285",
"license" => [
"number" => "02240/29",
"authority" => "Министерство юстиции РБ",
"validity" => ["17.02.2015", "17.02.2020"]
],
],
],
"price"=> [
"amount" => "100000.00",
"currency" => "USD"
],
"facilities" => [
"balcony",
"repaired"
],
"parking" => "garage"
];
$process = curl_init("https://pk.api.onliner.by/apartments");
curl_setopt($process, CURLOPT_HTTPHEADER, ['Accept: application/json', 'Content-Type: application/json']);
curl_setopt($process, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($process, CURLOPT_COOKIE, "onl_session=" . urlencode($session) . ";");
curl_setopt(
$process,
CURLOPT_POSTFIELDS,
json_encode($data)
);
$result = curl_exec($process);
curl_close($process);
нужно чтобы в этот сниппет передавались параметры ресурсов допустим
Поблагодарить автора
Отправить деньги
Комментарии: 16
Параметры в сниппет передаются так:
[[!mySnippet?¶m1=`param`¶m2=`param`]]
Или так:
{$_modx->runSnippet('!mySnippet', [
'param1' => 'param',
'param2' => 'param',
])}
[[!mySnippet?¶m1=`param`¶m2=`param`]]
Или так:
{$_modx->runSnippet('!mySnippet', [
'param1' => 'param',
'param2' => 'param',
])}
может я не правильно задал вопрос мне нужно чтобы в мой сниппет передавались данные ресурсов и tv параметра
"address" => "Беларусь, [[+tv.town_name]], [[+tv.street_name]], [[+tv.house_number]]",
Есть два простых способа
или передавать в параметр сниппета, а потом ловить такую переменную.
или доставать объект ресурса в котором лежит tv и подхватывать её в скрипте.
или передавать в параметр сниппета, а потом ловить такую переменную.
[[!mySnippet? ¶m1=`param` ¶m2=`param`]]
В коде вызываем $param1 и $param2 соответственно.или доставать объект ресурса в котором лежит tv и подхватывать её в скрипте.
// Берем ресурс с id 10
$resource = $modx->getObject('modResource',10);
//Получаем значение tv с именем name_of_tv
$val = $resource->getTVValue('name_of_tv');
// Поле ресурса еще проще получить
$pagetitle = $resource->get('pagetitle');
А то что ты пишешь не корректно, потому что интерпретатор вставляет переменные уже после выполнения сниппета. Так что их туда нужно или передавать или получать.
Имхо | snippet по красивше у добнее
{'!mySnippet' | snippet : ['param1' => 1]}
Стандартный [[!mySnippet? ¶m1=`param` ¶m2=`param`]] не намного хуже смотрится и читается.
Читал где-то, что если не использовать вызовы стандартного шаблонизатора, то он вообще не запускается и скорость работы сайта возрастает.
Так и есть.
в pdoTools Fenom внедрен не от того, что [[! / [[$ / [[* «не намного хуже смотрится и читается». Это конечно не все его преимущества, как минимум скорость.
Я даже и не буду спорить, но если у парня ни разу все не на Fenom, что скорей всего, у него будет запускаться и родной парсер и Fenom, и тормозить будет куда сильнее чем без Fenom. А так конечно да с Fenom работает гораздо шустрее. Хотя modx и так достаточно быстрый.
Мой коммент непосредственно к комменту Олега, а точнее к
{$_modx->runSnippet('!mySnippet', [
'param1' => 'param',
'param2' => 'param',
])}
что то я вообще не догоняю а как мне в param1 за сунуть данные tv ресурса
fenom
{'!mySnippet' | snippet : ['param1' => $_modx->resource.myTV]}
modx[[!mySnippet? ¶m1=`[[*myTV]]`]]
внутри сниппета $param1 или $scriptProperties['param1']
а как указать id ресурса из которого должны подставятся данные?
как получить id ресурса или $modx->resource->id
прикольно спасибо но все же может подскажите я не про в modx
в сниппете $modx->resource->id; на странице [[*id]] / {$_modx->resource.id}
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.