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

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

Добавлено: 03 окт 2010, 16:25
Александр
Передача параметров другой странице 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>

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

Добавлено: 03 окт 2010, 16:33
Deniska
http://flapps.ru/vk2.php
Такой страницы нет
Попробуйте поискать в разделе Приложения или Сервисы.

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

Добавлено: 03 окт 2010, 16:38
Александр
Deniska
Это просто пример адреса. Кто-то пишет http://site.ru, а я в уроке пишу так)

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

Добавлено: 03 окт 2010, 16:40
Cepe}|{a
Спасибо, делал другим способом, щас буду переделывать :)

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

Добавлено: 03 окт 2010, 16:43
Александр
Cepe}|{a
Каким? Этот способ может быть не единственным правильным.
Просто я читал на форуме, что с сессиями и куками бывают проблемы в разных браузерах.
А с этим способом ссылка с большим количеством своих параметров, может быть обрезана в некоторых браузерах.

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

Добавлено: 03 окт 2010, 16:47
Cepe}|{a
Александр
Кидал переменные от странице к странице post-запросом через форму)

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

Добавлено: 03 окт 2010, 17:00
aydar
а я в переменные превращал геты :)

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

Добавлено: 04 окт 2010, 09:43
azzzi
лучше напишите как передавать секретные переменные, чтобы пользователь их не мог увидеть ;)

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

Добавлено: 05 окт 2010, 13:36
Дрюс Уилис
Вот мой вариант с передачей параметров и сокрытием ссылки от пользователя.
Только что набросал, как следует не тестил так что могут быть проблемы, о которых прощу сообщить )

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

  <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>;  ?>   
Пользуйтесь ;)

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

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