Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   С PHP-сессии в переменную jQuery - открываем модальное окно при значении: присвоено (https://javascript.ru/forum/events/53329-s-php-sessii-v-peremennuyu-jquery-otkryvaem-modalnoe-okno-pri-znachenii-prisvoeno.html)

golopogos 29.01.2015 19:47

С PHP-сессии в переменную jQuery - открываем модальное окно при значении: присвоено
 
Добрый день. Подскажите как реализовать логику.

При загрузке страницы получаю из сессии значение и помещаю в переменную с помощью PHP:

// Берём из ссылки ключ после ? и помещаем его в сессию
$_SESSION['rf_sponsor'] = $_SERVER['QUERY_STRING'];

// Присваиваем переменной значение ключа
$rf_sponsor = $_SESSION['rf_sponsor'];


Что нужно?: Когда значение переменной $rf_sponsor равно 0, т.е. не присвоено - ничего не происходит, когда значение не равно 0 - срабатывает обработчик, запускающий модальное окно.

Есть вариант создать скрытый input, отслеживать состояние с помощью jQuery, запуская модальное окно по результату:

Код:

<input type="hidden" id="someinput" value="<?php echo $rf_sponsor; ?>" />

(function () {
    var element = document.getElementById('someinput');
    if (element.value === '') {

        //тут запускаем модал
	$('#someinput').frameWarp({
		url : '//mydomen.com/login.php',
		width:1040,
		height:720
	});

    } else {

        //тут ничего не делаем

    }
})();


Но может можно как нибудь обойтись без скрытого поля и более правильным образом? Помогите найти правильное решение.

рони 29.01.2015 20:05

golopogos,
а что на сервере нельзя недобавлять код запуска если ненужен

golopogos 29.01.2015 20:13

Извините, но я вас не понял...

Суть в чём, нужно сделать одновременно две вещи: передать ключ и запустить нужное модальное окно

Пользователь получает на почту секретную ссылку с ключом вида http://mydomen/index.php?a7wet1mfr50.
При переходе пользователя по этой ссылке, заканчивающейся ключом, обрабатываем $_SERVER['QUERY_STRING'], отсекается ключ и помещается в сессию $_SESSION['rf_sponsor'] а затем в переменную $rf_sponsor.

Но обработчик, использующий этот ключ находится на другой странице, во фрейме модального окна, которое ещё нужно открыть. Передать переменную на ту страницу запросто - сессия, но ещё нужно запустить модальное окно с этой страницей - что и пытаюсь сделать гармонично.

Переходишь по этой ссылке > автоматом запускается модальное окно > используем переменную уже на другой странице:

@session_start();
$rf_sponsor = $_SESSION['rf_sponsor'];

рони 29.01.2015 20:33

golopogos,
с php не помогу

golopogos 29.01.2015 20:41

РОНИ,
поправьте пожалуйста хотя бы этот код:


<input type="hidden" id="someinput" value="<?php echo $rf_sponsor; ?>" />

(function () {
    var element = document.getElementById('someinput');
    if (element.value === '') {

        //тут запускаем модал
	$('#someinput').frameWarp({
		url : '//mydomen.com/login.php',
		width:1040,
		height:720
	});

    } else {

        //тут ничего не делаем

    }
})();


Буду тогда использовать скрытое поле. Как выразить конструкцию по короче?..

рони 29.01.2015 20:55

Цитата:

Сообщение от golopogos
Как выразить конструкцию по короче?..

(function() {
    var a = $("#someinput");
    a[0].value && a.frameWarp({
        url: "//mydomen.com/login.php",
        width: 1040,
        height: 720
    })
})();

golopogos 29.01.2015 21:08

Попробую, спасибо РОНИ!

golopogos 30.01.2015 15:39

Добрый день, РОНИ. Немного изменил код, представленный вами, чтоб напрямую получать значение. Но почему то не срабатывает - окно не выводится, хотя переменной присваивается значение ключа. Я проверял.

Может не так инициализирую скрипт frameWarp? Проверьте пожалуйста, я специально создал макет на jsfiddle.net

Там кликом запускается модал, но как же связать его с конструкцией ниже?..

//// немного изменил код, представленный вами, чтоб получать значение ключа напрямую
// Ключ получаю, но модальное окно не выводится...
(function() {
    var a = $('<?=$rf_sponsor;?>'); // ключ в переменную передается успешно, я проверял...
    a[0].value && a.frameWarp({
        url: '//yagool.ru/',
        width: 1040,
        height: 720
    })
})();


В стандартном случае frameWarp генерирует модал при клике на ссылку вида:

<!-- Ссылка открывает модальное окно -->
<a href="#" id="modal">Запуск</a>


а инициализируется так:

//// Так нужно инициализировать скрипт frameWarp
$(function(){
// Кнопка 1
	$('#modal').frameWarp({
		url : '//yagool.ru/',
        width: 500,
        height: 400
	});
});

рони 30.01.2015 17:53

Цитата:

Сообщение от golopogos
var a = $('<?=$rf_sponsor;?>');

для меня эта строка какой-то бред , чтобы запустить окно автоматом достаточно
типа такого
$(function(){
 var a = '<?=$rf_sponsor;?>'; //как эта строка на php правильно незнаю или "<?php echo $rf_sponsor; ?>"
a &&	$('<a/>').frameWarp({
		url : '//yagool.ru/',
        width: 500,
        height: 400
	}).click();
});

golopogos 31.01.2015 11:16

Спасибо, очень помогли! Всё работает как задумано.


Часовой пояс GMT +3, время: 11:16.