Вопрос такой: каким образом можно подставить определенное значение в 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
Распечатай $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 написал(а):
Или, так
Но тут мы в какой то мере, жертвуем свободой действий.. :)
Ну и собственно сам test.php
В общем как то так.
<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
document.body.offsetWidth это не разрешение монитора, а размер видимой области окна браузера, который зависит не только от разрешения монитора, но и от состояния окна (на весь экран или нет). Разрешение монитора берется от сюда
screen.width
screen.height
Спустя 19 минут, 48 секунд (9.04.2012 - 14:05) Oceanic написал(а):
killer8080, я в курсе, именно размер видимой области мне и нужен.
m4a1fox, с Ajax вообще никогда не работал...покрутил туда сюда...возвращается значение 1. Хз как надо.
В общем имеем:
single.php - эта страница делает запрос SQL и выводит посты.
Стало быть она и делает запрос в виде:
Вставляю в single.php код:
Сам ajax.php:
В конечном итоге single.php выглядит так:
:D короче чувствую что чушь какую-то накодил...
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 Но такой фокус не прокатывает. И возвращается значение "10", даже вне зависимости от того, какое разрешение. Есть какие-то варианты решения? |
Хочу заметить, что JS-код выполняется браузером (на стороне клиента), а php сервером. И JS обрабатывается позже, чем PHP.
Вот вставить какую-то PHP переменную в JS код легко. А обратно невозможно стандартными способами.
Мне приходит на ум решение через AJAX. Т.е. узнаем разрешение и перезагружаем страницу. Или меняем отображение на ходу сразу через JS.
Спустя 32 минуты, 11 секунд (9.04.2012 - 16:12) m4a1fox написал(а):
Barh
Цитата |
Мне приходит на ум решение через AJAX. |
Ну собственно что я и предложил.

Спустя 9 минут, 34 секунды (9.04.2012 - 16:22) Oceanic написал(а):
Почитал про Ajax, более менее суть понял, но застрял на выводе результата...
Single.php:
ajaxsuka.php:
Alert то понятно, выводит в окне результат...Но мне нужно чтобы в SQL запрос подставилась цифра (5 или 10) в зависимости от разрешения экрана еще до загрузки страницы.
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:
ajaxsuka.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 .
Например: $('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 - респект, ребят. Плюс в карму не могу пока поставить. Как поднакоплю постов - плюсану.
Пока ждал ответа уже сам методом проб и ошибок нашел как вывести:
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 написал(а):
у меня аякс практически везде, ставь какое-нибудь изображение до тех пор, пока аякс не вернет результат