Передача параметров другой странице IFrame-приложения

Готовые уроки IFrame + ВКонтакте API
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

Передача параметров другой странице IFrame-приложения

Сообщение Александр »

Передача параметров другой странице IFrame-приложения (PHP, JavaScript)

При обращении к другой странице приложения, вы могли столкнуться с тем, что параметры viewer_id и т.п. пропадают.
Это связано с тем, что они не передаются другой странице.

При загрузке первой страницы приложения, параметры передаются примерно так:
http://flapps.ru/vk.php?api_url=http://api.vkontakte.ru/api.php&api_id=1728947&api_settings=1791&viewer_id=1306422&viewer_type=2...

При обращении к другой странице, эти параметры уже не передаются:
http://flapps.ru/vk2.php


Решение этой проблемы уже писал Влад в уроке IFrame (Передача переменных в другой php)
Я сделаю примерно то же самое, только сделаю код более пригодный для удобного использования в ваших приложениях.

В комментариях Fedya написал другой вариант доступности данных на разных страницах. http://flapps.ru/forum/topic1351-40.html#p42967
Есть и другой урок Передача переменных между страницами IFrame (php)
Выбирайте тот способ, который вам удобнее.

Эта php функция будет создавать строку параметров. Её нужно вызывать при создании ссылки на другую страницу приложения:

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

function getVkParams() {    return 'api_url='.$_GET['api_url']    .'&api_id='.$_GET['api_id']    .'&api_settings='.$_GET['api_settings']    .'&viewer_id='.$_GET['viewer_id']    .'&viewer_type='.$_GET['viewer_type']    .'&sid='.$_GET['sid']    .'&secret='.$_GET['secret']    .'&user_id='.$_GET['user_id']    .'&group_id='.$_GET['group_id']    .'&is_app_user='.$_GET['is_app_user']    .'&auth_key='.$_GET['auth_key']    .'&language='.$_GET['language']    .'&parent_language='.$_GET['parent_language']    .'&lc_name='.$_GET['lc_name'];}
Вы можете убрать из функции передачу параметров, которые вам не нужны.

Использовать так:

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

<?function getVkParams() {    return 'api_url='.$_GET['api_url']    .'&api_id='.$_GET['api_id']    .'&api_settings='.$_GET['api_settings']    .'&viewer_id='.$_GET['viewer_id']    .'&viewer_type='.$_GET['viewer_type']    .'&sid='.$_GET['sid']    .'&secret='.$_GET['secret']    .'&user_id='.$_GET['user_id']    .'&group_id='.$_GET['group_id']    .'&is_app_user='.$_GET['is_app_user']    .'&auth_key='.$_GET['auth_key']    .'&language='.$_GET['language']    .'&parent_language='.$_GET['parent_language']    .'&lc_name='.$_GET['lc_name'];} // при простом переходе на другую страницуecho '<a href="vk2.php?'.getVkParams().'">Страница 2</a>'; // при переходе на другую страницу, с передачей дополнительных параметров (в этом примере передача "act=send")echo '<a href="vk3.php?act=send&'.getVkParams().'">Страница 3</a>';?>

В html коде так:

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

<?function getVkParams() {    return 'api_url='.$_GET['api_url']    .'&api_id='.$_GET['api_id']    .'&api_settings='.$_GET['api_settings']    .'&viewer_id='.$_GET['viewer_id']    .'&viewer_type='.$_GET['viewer_type']    .'&sid='.$_GET['sid']    .'&secret='.$_GET['secret']    .'&user_id='.$_GET['user_id']    .'&group_id='.$_GET['group_id']    .'&is_app_user='.$_GET['is_app_user']    .'&auth_key='.$_GET['auth_key']    .'&language='.$_GET['language']    .'&parent_language='.$_GET['parent_language']    .'&lc_name='.$_GET['lc_name'];}?><html><head><!-- подключаем xd_connection.js --><script src="http://vkontakte.ru/js/api/xd_connection.js" type="text/javascript"></script><script type="text/javascript">window.onload = (function() {   // когда загрузится вся страница    VK.init(function() {    // инициализируем Vk API        // ...    });});</script></head><body><!-- при простом переходе на другую страницу --><a href="vk2.php?<?php echo getVkParams(); ?>">Страница 2</a> <!-- при переходе на другую страницу, с передачей дополнительных параметров (в этом примере передача "act=send") --><a href="vk3.php?act=send&<?php echo getVkParams(); ?>">Страница 3</a> <div id="status_info">http://flapps.ru</div></body></html>
Функция getVkParams() используется в строках 33 и 35.


При передаче параметров, ссылка должна выглядеть так:
http://flapps.ru/vk2.php?param1=value&param2=value&param3=value

Обратите внимание, первый параметр присоединяется знаком "?", а остальные знаком "&".



То же самое, только на JavaScript

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

function getVkParams() {    VK.loadParams(document.location.href);    return 'api_url=' + VK.params.api_url +    '&api_id=' + VK.params.api_id +    '&api_settings=' + VK.params.api_settings +    '&viewer_id=' + VK.params.viewer_id +    '&viewer_type=' + VK.params.viewer_type +    '&sid=' + VK.params.sid +    '&secret=' + VK.params.secret +    '&user_id=' + VK.params.user_id +    '&group_id=' + VK.params.group_id +    '&is_app_user=' + VK.params.is_app_user +    '&auth_key=' + VK.params.auth_key +    '&language=' + VK.params.language +    '&parent_language=' + VK.params.parent_language +    '&lc_name=' + VK.params.lc_name;}

Например, если нужно автоматически обновить страницу, передав параметры:

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

<html><head><!-- подключаем xd_connection.js --><script src="http://vkontakte.ru/js/api/xd_connection.js?2" type="text/javascript"></script><script type="text/javascript">window.onload = (function() {   // когда загрузится вся страница// функция получения параметровfunction getVkParams() {    VK.loadParams(document.location.href);    return 'api_url=' + VK.params.api_url +    '&api_id=' + VK.params.api_id +    '&api_settings=' + VK.params.api_settings +    '&viewer_id=' + VK.params.viewer_id +    '&viewer_type=' + VK.params.viewer_type +    '&sid=' + VK.params.sid +    '&secret=' + VK.params.secret +    '&user_id=' + VK.params.user_id +    '&group_id=' + VK.params.group_id +    '&is_app_user=' + VK.params.is_app_user +    '&auth_key=' + VK.params.auth_key +    '&language=' + VK.params.language +    '&parent_language=' + VK.params.parent_language +    '&lc_name=' + VK.params.lc_name;}     VK.init(function() {    // инициализируем Vk API        // переадресовываем на страницу vk2.php с передачей параметров        document.location.href="vk2.php?"+getVkParams();    });});</script></head><body><div id="status_info">http://flapps.ru</div></body></html>
Аватара пользователя
Deniska
Сообщения: 653
Зарегистрирован: 30 окт 2009, 00:07

Re: Передача параметров другой странице IFrame-приложения

Сообщение Deniska »

http://flapps.ru/vk2.php
Такой страницы нет
Попробуйте поискать в разделе Приложения или Сервисы.
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

Re: Передача параметров другой странице IFrame-приложения

Сообщение Александр »

Deniska
Это просто пример адреса. Кто-то пишет http://site.ru, а я в уроке пишу так)
Аватара пользователя
Cepe}|{a
Сообщения: 93
Зарегистрирован: 21 авг 2010, 01:23

Re: Передача параметров другой странице IFrame-приложения

Сообщение Cepe}|{a »

Спасибо, делал другим способом, щас буду переделывать :)
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

Re: Передача параметров другой странице IFrame-приложения

Сообщение Александр »

Cepe}|{a
Каким? Этот способ может быть не единственным правильным.
Просто я читал на форуме, что с сессиями и куками бывают проблемы в разных браузерах.
А с этим способом ссылка с большим количеством своих параметров, может быть обрезана в некоторых браузерах.
Аватара пользователя
Cepe}|{a
Сообщения: 93
Зарегистрирован: 21 авг 2010, 01:23

Re: Передача параметров другой странице IFrame-приложения

Сообщение Cepe}|{a »

Александр
Кидал переменные от странице к странице post-запросом через форму)
aydar
Сообщения: 57
Зарегистрирован: 09 сен 2010, 18:22

Re: Передача параметров другой странице IFrame-приложения

Сообщение aydar »

а я в переменные превращал геты :)
azzzi
Сообщения: 164
Зарегистрирован: 13 сен 2010, 19:24

Re: Передача параметров другой странице IFrame-приложения

Сообщение azzzi »

лучше напишите как передавать секретные переменные, чтобы пользователь их не мог увидеть ;)
Аватара пользователя
Дрюс Уилис
Сообщения: 2
Зарегистрирован: 05 окт 2010, 13:09

Re: Передача параметров другой странице IFrame-приложения

Сообщение Дрюс Уилис »

Вот мой вариант с передачей параметров и сокрытием ссылки от пользователя.
Только что набросал, как следует не тестил так что могут быть проблемы, о которых прощу сообщить )

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

  <script type="text/javascript">    function go(url, loc) {        document.location.href = url;        VK.callMethod('setLocation', loc);        return false;    }  </script>  <?    // url - открываемая страница например test.php или test.php?var=qwerty    // loc - то что будет в адресной строке    function go($url, $loc = ''){        $a = array('api_url','api_id','api_settings','viewer_id',            'viewer_type','sid','secret','user_id','group_id',            'is_app_user','auth_key','language','parent_language','lc_name');        foreach($a AS $v){ $q .= $v.'='.$_GET[$v].'&'; }        $s = (bool)strstr($url, '?') ? '&':'?';        return "return go('".$url.$s.$q."', '".$loc."');";    }   //ссылка будет выглядеть так  echo '<a href="http://vk.com/app123456" onclick="'.go('test.php?set=new&abc=123', 'test').'">Тест</a>;  ?>   
Пользуйтесь ;)
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

Re: Передача параметров другой странице IFrame-приложения

Сообщение Александр »

Cepe}|{a
post запрос сможет помочь, если будет очень много параметров. Использовать можно примерно по такой же логике, как написал Дрюс Уилис выше.
Ответить