[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Подстановка значения в SQL-запрос
Oceanic
Доброго времени.

Вопрос такой: каким образом можно подставить определенное значение в SQL запрос в зависимости от разрешения окна браузера посетителя?

Т.е если у посетителя к примеру разрешение 1300 пикселей в ширину, то в запрос подставляем значение "5", если более 1300px, то "10".

Все что удалось "накодить" это:



<?php
function
resolution_function (){
$resolution = "<script type='text/javascript'>document.write(document.body.offsetWidth);</script>";
if ($resolution > 1300) return '5'; else return '10';
};

$resolution = resolution_function();
query_posts( array(
'post_type' => 'post',

'posts_per_page' => $resolution
)
);
?>




Но такой фокус не прокатывает. И возвращается значение "10", даже вне зависимости от того, какое разрешение.

Есть какие-то варианты решения?



Спустя 10 минут, 23 секунды (9.04.2012 - 13:08) m4a1fox написал(а):
Oceanic
Распечатай $resolution

Спустя 7 минут, 55 секунд (9.04.2012 - 13:16) Oceanic написал(а):
Не катит...

Спустя 1 минута, 25 секунд (9.04.2012 - 13:17) m4a1fox написал(а):
Цитата
Не катит...

Таки да... самому интересно стало...
Там все связано с тем, что довольно трудно подружить js c php.

ИМХО! Я бы так сделал
<script>
var resolution = document.body.offsetWidth;
if(resolution < 1300){
$.ajax({
url: './test.php',
type: 'POST',
data: {'post_type':'post', 'posts_per_page': resolution},
success: function(){
alert(1);
}
}
)
}else{
$.ajax({
url: './test.php',
type: 'POST',
data: {'post_type':'post', 'posts_per_page': resolution},
success: function(){
alert(1);
}
}
)
}
</script>

Спустя 6 минут (9.04.2012 - 13:23) m4a1fox написал(а):
Или, так

<script>

function ajaxReq(res){
$.ajax({
url: './test.php',
type: 'POST',
data: {'post_type':'post', 'posts_per_page': res},
success: function(){
alert(1);
}
}
)
}

var resolution = document.body.offsetWidth;
if(resolution < 1300){
ajaxReq(resolution);
}else{
ajaxReq(resolution);
}
</script>

Но тут мы в какой то мере, жертвуем свободой действий.. :)
Ну и собственно сам test.php

// тут ты подключаешься к БД, наверно.... там, делаешь всякие запросы, что бы в конечном счете использовать query_post() - как я понимаю свое рода заглушка
Дальше обрабатываешь -
$query = $_POST['post_type'];
$resolution = $_POST['post_per_page'];
query_posts( array(
'post_type' => $query,
'posts_per_page' => $resolution
)
);

// не забудь echo ибо он выведется в success ajax запроса.

В общем как то так.

Спустя 21 минута, 40 секунд (9.04.2012 - 13:45) killer8080 написал(а):
Oceanic
document.body.offsetWidth это не разрешение монитора, а размер видимой области окна браузера, который зависит не только от разрешения монитора, но и от состояния окна (на весь экран или нет). Разрешение монитора берется от сюда
screen.width
screen.height

Спустя 19 минут, 48 секунд (9.04.2012 - 14:05) Oceanic написал(а):
killer8080, я в курсе, именно размер видимой области мне и нужен.

m4a1fox, с Ajax вообще никогда не работал...покрутил туда сюда...возвращается значение 1. Хз как надо.

В общем имеем:

single.php - эта страница делает запрос SQL и выводит посты.
Стало быть она и делает запрос в виде:
<?php
query_posts( array(
'post_type' => 'post',
'posts_per_page' => $resolution
)
);
?>


Вставляю в single.php код:
<script>
var resolution = document.body.offsetWidth;
if(resolution < 1300){
$.ajax({
url: './ajax.php',
type: 'POST',
data: {'posts_per_page': 5},
success: function(){
alert('Разрешение менее 1300');
}
}
)
}else{
$.ajax({
url: './ajax.php',
type: 'POST',
data: {'posts_per_page': 10},
success: function(){
alert('Разрешение более 1300');
}
}
)
}
</script>


Сам ajax.php:
<?php $resolution = $_POST['post_per_page'];
echo $resolution ?>


В конечном итоге single.php выглядит так:

<script>
var
resolution = document.body.offsetWidth;
if(resolution < 1300){
$.ajax({
url: './ajax.php',
type: 'POST',
data: {'posts_per_page': 5},
success: function(){
alert('Разрешение менее 1300');
}
}
)
}else{
$.ajax({
url: './ajax.php',
type: 'POST',
data: {'posts_per_page': 10},
success: function(){
alert('Разрешение более 1300');
}
}
)
}
</script>

<?php

$res = include('ajax.php');
query_posts( array(
'post_type' => 'post',
'posts_per_page' => print $res
)
);
?>


:D короче чувствую что чушь какую-то накодил...

Спустя 57 минут, 13 секунд (9.04.2012 - 15:02) m4a1fox написал(а):
Oceanic
Цитата
короче чувствую что чушь какую-то накодил...

Верно. Разбирайся.

Спустя 37 минут, 53 секунды (9.04.2012 - 15:40) Barh написал(а):
Цитата (Oceanic @ 9.04.2012 - 13:58)
Доброго времени.
Все что удалось "накодить" это:

<?php
function
resolution_function (){
$resolution = "<script type='text/javascript'>document.write(document.body.offsetWidth);</script>";
if ($resolution > 1300) return '5'; else return '10';
};

$resolution = resolution_function();
query_posts( array(
'post_type' => 'post',

'posts_per_page' => $resolution
)
);
?>




Но такой фокус не прокатывает. И возвращается значение "10", даже вне зависимости от того, какое разрешение.

Есть какие-то варианты решения?

Хочу заметить, что JS-код выполняется браузером (на стороне клиента), а php сервером. И JS обрабатывается позже, чем PHP.
Вот вставить какую-то PHP переменную в JS код легко. А обратно невозможно стандартными способами.
Мне приходит на ум решение через AJAX. Т.е. узнаем разрешение и перезагружаем страницу. Или меняем отображение на ходу сразу через JS.

Спустя 32 минуты, 11 секунд (9.04.2012 - 16:12) m4a1fox написал(а):
Barh
Цитата
Мне приходит на ум решение через AJAX.

Ну собственно что я и предложил. smile.gif

Спустя 9 минут, 34 секунды (9.04.2012 - 16:22) Oceanic написал(а):
Почитал про Ajax, более менее суть понял, но застрял на выводе результата...

Single.php:
<?php
function
getres () {
?>

<script>
var
resolution = document.body.offsetWidth;
if(resolution < 1300){
$.ajax({
url: './ajaxsuka.php',
type: 'POST',
data: {'posts_per_page': 5},
success: function(){
alert('Разрешение менее 1300');
}
}
)
}else{
$.ajax({
url: './ajaxsuka.php',
type: 'POST',
data: {'posts_per_page': 10},
success: function(result){
alert('Разрешение более 1300');
}
}
)
}

</script>
<?php
} ?>

<?php

$getres = getres ();

query_posts( array(
'post_type' => 'post',

'posts_per_page' => $getres


)
);
?>


ajaxsuka.php:
<?php
echo $_POST['posts_per_page'];
?>


Alert то понятно, выводит в окне результат...Но мне нужно чтобы в SQL запрос подставилась цифра (5 или 10) в зависимости от разрешения экрана еще до загрузки страницы.


Спустя 53 минуты, 29 секунд (9.04.2012 - 17:15) Barh написал(а):
Если сделать SQL запрос в файле ajaxsuka.php и сразу вывод там где нужно.

Спустя 4 минуты, 19 секунд (9.04.2012 - 17:19) Oceanic написал(а):
Barh, в том то и дело что я хз как сделать вывод...

Спустя 20 минут, 14 секунд (9.04.2012 - 17:40) Barh написал(а):
file.php:

<html>
<
head>
<
script type="text/javascript" src="https://www.google.com/jsapi"></script>
<
script type="text/javascript">
google.load("jquery", "1.7.1");
</
script>

<
script>
$(function() {
var resolution = document.body.offsetWidth;
if(resolution < 1300){
$.post("ajaxsuka.php", { posts_per_page: 5 },
function(data){
$('body').prepend(data);
});
}else{
$.post("ajaxsuka.php", { posts_per_page: 10 },
function(data){
$('body').prepend(data);
});
}
}
);
</
script>
</
head>
<
body>

</
body>
</
html>


ajaxsuka.php:
<?php
$posts_per_page = !empty($_POST['posts_per_page']) ? (int)$_POST['posts_per_page'] : null;

function query_posts($posts_per_page)
{
return $posts_per_page;
}

echo query_posts($posts_per_page);
?>


Примерно так можешь сделать.

Спустя 3 минуты, 54 секунды (9.04.2012 - 17:44) Barh написал(а):
Oceanic, с jQuery ты знаком? Если да, то теперь вывести данные не составит труда.
Например: $('body').prepend(data); . Вместо body можешь писать любые css-селекторы, в найденную структуру и добавится нужный код из файла ajaxsuka.php .

Спустя 40 минут, 22 секунды (9.04.2012 - 18:24) Oceanic написал(а):
Ух...получилось... Ох уж этот аякс...будь он неладен....
Пока ждал ответа уже сам методом проб и ошибок нашел как вывести:
success: function(html){
$("#aga").html(html);

Но надо отметить такой вариант меня не устроил по причине того, что Аякс медленно прогружает контент и получается заметная задержка. Блок в котором должен отображаться контент - пустует во время загрузки контента, что не есть хорошо.
async = false не помогает.

В общем, как говорится "факир был пьян и фокус не удался".

P.S: m4a1fox, Barh - респект, ребят. Плюс в карму не могу пока поставить. Как поднакоплю постов - плюсану.

Спустя 48 минут, 24 секунды (9.04.2012 - 19:12) nugle написал(а):
Oceanic
что то ты не так явно сделал, выложи код

У меня весь сайт почти на аякс, работает как часы

Спустя 21 минута, 4 секунды (9.04.2012 - 19:33) Oceanic написал(а):
Да нет все правильно. Возможно преувеличил, но задержка около 0,5сек имеется. Блок пустует в это время, а он на самом видном месте...

Спустя 57 минут, 13 секунд (9.04.2012 - 20:31) nugle написал(а):
у меня аякс практически везде, ставь какое-нибудь изображение до тех пор, пока аякс не вернет результат
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.