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

Готовые уроки IFrame + ВКонтакте API

Передача параметров другой странице 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 написал другой вариант доступности данных на разных страницах. topic1351-40.html#p42967
Есть и другой урок Передача переменных между страницами IFrame (php)
Выбирайте тот способ, который вам удобнее.

Эта php функция будет создавать строку параметров. Её нужно вызывать при создании ссылки на другую страницу приложения:
  1. function getVkParams() {
  2.     return 'api_url='.$_GET['api_url']
  3.     .'&api_id='.$_GET['api_id']
  4.     .'&api_settings='.$_GET['api_settings']
  5.     .'&viewer_id='.$_GET['viewer_id']
  6.     .'&viewer_type='.$_GET['viewer_type']
  7.     .'&sid='.$_GET['sid']
  8.     .'&secret='.$_GET['secret']
  9.     .'&user_id='.$_GET['user_id']
  10.     .'&group_id='.$_GET['group_id']
  11.     .'&is_app_user='.$_GET['is_app_user']
  12.     .'&auth_key='.$_GET['auth_key']
  13.     .'&language='.$_GET['language']
  14.     .'&parent_language='.$_GET['parent_language']
  15.     .'&lc_name='.$_GET['lc_name'];
  16. }

Вы можете убрать из функции передачу параметров, которые вам не нужны.

Использовать так:
  1. <?
  2. function getVkParams() {
  3.     return 'api_url='.$_GET['api_url']
  4.     .'&api_id='.$_GET['api_id']
  5.     .'&api_settings='.$_GET['api_settings']
  6.     .'&viewer_id='.$_GET['viewer_id']
  7.     .'&viewer_type='.$_GET['viewer_type']
  8.     .'&sid='.$_GET['sid']
  9.     .'&secret='.$_GET['secret']
  10.     .'&user_id='.$_GET['user_id']
  11.     .'&group_id='.$_GET['group_id']
  12.     .'&is_app_user='.$_GET['is_app_user']
  13.     .'&auth_key='.$_GET['auth_key']
  14.     .'&language='.$_GET['language']
  15.     .'&parent_language='.$_GET['parent_language']
  16.     .'&lc_name='.$_GET['lc_name'];
  17. }
  18.  
  19. // при простом переходе на другую страницу
  20. echo '<a href="vk2.php?'.getVkParams().'">Страница 2</a>';
  21.  
  22. // при переходе на другую страницу, с передачей дополнительных параметров (в этом примере передача "act=send")
  23. echo '<a href="vk3.php?act=send&'.getVkParams().'">Страница 3</a>';
  24. ?>



В html коде так:
  1. <?
  2. function getVkParams() {
  3.     return 'api_url='.$_GET['api_url']
  4.     .'&api_id='.$_GET['api_id']
  5.     .'&api_settings='.$_GET['api_settings']
  6.     .'&viewer_id='.$_GET['viewer_id']
  7.     .'&viewer_type='.$_GET['viewer_type']
  8.     .'&sid='.$_GET['sid']
  9.     .'&secret='.$_GET['secret']
  10.     .'&user_id='.$_GET['user_id']
  11.     .'&group_id='.$_GET['group_id']
  12.     .'&is_app_user='.$_GET['is_app_user']
  13.     .'&auth_key='.$_GET['auth_key']
  14.     .'&language='.$_GET['language']
  15.     .'&parent_language='.$_GET['parent_language']
  16.     .'&lc_name='.$_GET['lc_name'];
  17. }
  18. ?>
  19. <html>
  20. <head>
  21. <!-- подключаем xd_connection.js -->
  22. <script src="http://vkontakte.ru/js/api/xd_connection.js" type="text/javascript"></script>
  23. <script type="text/javascript">
  24. window.onload = (function() {   // когда загрузится вся страница
  25.     VK.init(function() {    // инициализируем Vk API
  26.         // ...
  27.     });
  28. });
  29. </script>
  30. </head>
  31. <body>
  32. <!-- при простом переходе на другую страницу -->
  33. <a href="vk2.php?<?php echo getVkParams(); ?>">Страница 2</a>
  34. <!-- при переходе на другую страницу, с передачей дополнительных параметров (в этом примере передача "act=send") -->
  35. <a href="vk3.php?act=send&<?php echo getVkParams(); ?>">Страница 3</a>
  36.  
  37. <div id="status_info">http://flapps.ru</div>
  38. </body>
  39. </html>

Функция getVkParams() используется в строках 33 и 35.


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

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



То же самое, только на JavaScript
  1. function getVkParams() {
  2.     VK.loadParams(document.location.href);
  3.     return 'api_url=' + VK.params.api_url +
  4.     '&api_id=' + VK.params.api_id +
  5.     '&api_settings=' + VK.params.api_settings +
  6.     '&viewer_id=' + VK.params.viewer_id +
  7.     '&viewer_type=' + VK.params.viewer_type +
  8.     '&sid=' + VK.params.sid +
  9.     '&secret=' + VK.params.secret +
  10.     '&user_id=' + VK.params.user_id +
  11.     '&group_id=' + VK.params.group_id +
  12.     '&is_app_user=' + VK.params.is_app_user +
  13.     '&auth_key=' + VK.params.auth_key +
  14.     '&language=' + VK.params.language +
  15.     '&parent_language=' + VK.params.parent_language +
  16.     '&lc_name=' + VK.params.lc_name;
  17. }



Например, если нужно автоматически обновить страницу, передав параметры:
  1. <html>
  2. <head>
  3. <!-- подключаем xd_connection.js -->
  4. <script src="http://vkontakte.ru/js/api/xd_connection.js?2" type="text/javascript"></script>
  5. <script type="text/javascript">
  6. window.onload = (function() {   // когда загрузится вся страница
  7. // функция получения параметров
  8. function getVkParams() {
  9.     VK.loadParams(document.location.href);
  10.     return 'api_url=' + VK.params.api_url +
  11.     '&api_id=' + VK.params.api_id +
  12.     '&api_settings=' + VK.params.api_settings +
  13.     '&viewer_id=' + VK.params.viewer_id +
  14.     '&viewer_type=' + VK.params.viewer_type +
  15.     '&sid=' + VK.params.sid +
  16.     '&secret=' + VK.params.secret +
  17.     '&user_id=' + VK.params.user_id +
  18.     '&group_id=' + VK.params.group_id +
  19.     '&is_app_user=' + VK.params.is_app_user +
  20.     '&auth_key=' + VK.params.auth_key +
  21.     '&language=' + VK.params.language +
  22.     '&parent_language=' + VK.params.parent_language +
  23.     '&lc_name=' + VK.params.lc_name;
  24. }
  25.  
  26.     VK.init(function() {    // инициализируем Vk API
  27.         // переадресовываем на страницу vk2.php с передачей параметров
  28.         document.location.href="vk2.php?"+getVkParams();
  29.     });
  30. });
  31. </script>
  32. </head>
  33. <body>
  34. <div id="status_info">http://flapps.ru</div>
  35. </body>
  36. </html>

За это сообщение автора Александр поблагодарили - 2:
Cepe}|{a, ifoow
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
 
Автор темы
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45
Откуда: Санкт-Петербург
Благодарил (а): 126 раз.
Поблагодарили: 771 раз.

Чтобы убрать блок с рекламой, зарегистрируйтесь на форуме или войдите.

Google
 



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

Сообщение Deniska » 03 окт 2010, 16:33

http://flapps.ru/vk2.php

Такой страницы нет
Попробуйте поискать в разделе Приложения или Сервисы.
Аватара пользователя
Deniska

 
Сообщения: 654
Зарегистрирован: 30 окт 2009, 00:07
Благодарил (а): 15 раз.
Поблагодарили: 48 раз.

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

Сообщение Александр » 03 окт 2010, 16:38

Deniska
Это просто пример адреса. Кто-то пишет http://site.ru, а я в уроке пишу так)
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
 
Автор темы
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45
Откуда: Санкт-Петербург
Благодарил (а): 126 раз.
Поблагодарили: 771 раз.

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

Сообщение Cepe}|{a » 03 окт 2010, 16:40

Спасибо, делал другим способом, щас буду переделывать :)
Аватара пользователя
Cepe}|{a

 
Сообщения: 93
Зарегистрирован: 21 авг 2010, 01:23
Благодарил (а): 8 раз.
Поблагодарили: 6 раз.

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

Сообщение Александр » 03 окт 2010, 16:43

Cepe}|{a
Каким? Этот способ может быть не единственным правильным.
Просто я читал на форуме, что с сессиями и куками бывают проблемы в разных браузерах.
А с этим способом ссылка с большим количеством своих параметров, может быть обрезана в некоторых браузерах.
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
 
Автор темы
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45
Откуда: Санкт-Петербург
Благодарил (а): 126 раз.
Поблагодарили: 771 раз.

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

Сообщение Cepe}|{a » 03 окт 2010, 16:47

Александр
Кидал переменные от странице к странице post-запросом через форму)
Аватара пользователя
Cepe}|{a

 
Сообщения: 93
Зарегистрирован: 21 авг 2010, 01:23
Благодарил (а): 8 раз.
Поблагодарили: 6 раз.

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

Сообщение aydar » 03 окт 2010, 17:00

а я в переменные превращал геты :)
aydar

 
Сообщения: 57
Зарегистрирован: 09 сен 2010, 18:22
Благодарил (а): 11 раз.
Поблагодарили: 0 раз.

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

Сообщение azzzi » 04 окт 2010, 09:43

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

 
Сообщения: 164
Зарегистрирован: 13 сен 2010, 19:24
Благодарил (а): 12 раз.
Поблагодарили: 9 раз.

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

Сообщение Дрюс Уилис » 05 окт 2010, 13:36

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


  1.  
  2.  
  3. <script type="text/javascript">
  4.     function go(url, loc) {
  5.         document.location.href = url;
  6.         VK.callMethod('setLocation', loc);
  7.         return false;
  8.     }  
  9. </script>
  10.  
  11. <?
  12.     // url - открываемая страница например test.php или test.php?var=qwerty
  13.     // loc - то что будет в адресной строке
  14.     function go($url, $loc = ''){
  15.         $a = array('api_url','api_id','api_settings','viewer_id',
  16.             'viewer_type','sid','secret','user_id','group_id',
  17.             'is_app_user','auth_key','language','parent_language','lc_name');
  18.         foreach($a AS $v){ $q .= $v.'='.$_GET[$v].'&amp;'; }
  19.         $s = (bool)strstr($url, '?') ? '&amp;':'?';
  20.         return "return go('".$url.$s.$q."', '".$loc."');";
  21.     }
  22.  
  23.   //ссылка будет выглядеть так
  24.   echo '<a href="http://vk.com/app123456" onclick="'.go('test.php?set=new&amp;abc=123', 'test').'">Тест</a>;
  25.  
  26.  
  27. ?>
  28.  
  29.  
  30.  


Пользуйтесь ;)

За это сообщение автора Дрюс Уилис поблагодарил:
octyabrist
Аватара пользователя
Дрюс Уилис

 
Сообщения: 2
Зарегистрирован: 05 окт 2010, 13:09
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.

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

Сообщение Александр » 05 окт 2010, 19:20

Cepe}|{a
post запрос сможет помочь, если будет очень много параметров. Использовать можно примерно по такой же логике, как написал Дрюс Уилис выше.
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
 
Автор темы
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45
Откуда: Санкт-Петербург
Благодарил (а): 126 раз.
Поблагодарили: 771 раз.

След.

Вернуться в Уроки IFrame ВКонтакте



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron