Поддержка Проблемы и решения Перенаправление на php сессию

  • Решено helekopter

    (@helekopter)


    Доброго времени суток, уважаемая публика. Я тут в попытках решить свою нетривиальную задачу — зашел в тупик. В общем я сделал адаптацию своего сайта под мобильные устройства и добавил переключатель между версиями (при помощи php сессии), такого вида.

    /*-- Переключение на мобильную версию сайта ссылкой --*/
     session_start(); // начинаем сессию
     if (isset($_REQUEST['version'])) { // перехватываем линк
            $_SESSION['version'] = $_REQUEST['version'];
    }
    function mobileview($on){ // создаем удобную функцию
    $on=$_SESSION['version'] == 'mobile';
    return $on;
    }

    Все работает супер, но я хотел бы сделать так, что-бы при первом попадании на сайт пользователя с мобильным браузером принудительно бросало на pda версию (открывало мобильную сессию, но только 1 раз, что бы потом можно было переключиться на десктоп сессию). В общем сам вопрос: как это сделать? =))

    P.s пытался сделать через пень колоду (куккисы и прочее мракобесие ):

    if (wp_is_mobile()) {
            setcookie('mobile', '1', time()+9999999, '/', home_url());
            header('Location:' . home_url() . '/?version=mobile');
    }
    
    if ($_COOKIE['mobile'] != '1') {
       if ($_SESSION['version'] == 'desktop') {
        setcookie('mobile', '2', time()+9999999, '/', home_url());
        header('Location:' . home_url());
       }
    }

    но понял, что изобретаю велосипед и это можно решить куда проще. Да и вышеприведенный скрипт к сожалению не сработал -)

    Заранее огромное спасибо за помощь =)

Просмотр 8 ответов — с 1 по 8 (всего 8)
  • но понял, что изобретаю велосипед и это можно решить куда проще.

    О чём Вам уже неоднократно говорили.. Делали бы как советовали — уже 3 недели назад как забыли бы о костылях..

    Сорри, по данному вопросу помочь не могу.

    О чём Вам уже неоднократно говорили.. Делали бы как советовали — уже 3 недели назад как забыли бы о костылях..

    Понимаете, дело в том, что любое из тех решений которые Вы предлагали,
    а именно:

    Всё правильно Вам кидают.
    Есть 3 варианта решения мобильной версии.
    1. На поддомене\подкаталоге
    2. Подменой темы по определению ЮА.
    3. Адаптивная вёрстка (media queries)

    wp_is_mobile это лишь условие, проверяющее мобильный ЮА или нет. Что дальше — зависит от фантазий

    Первые 2 способа решаются с пом. плагинов (если не считать отдельной установки), 3-й — вёрсткой темы.

    предполагало создания отдельной мобильной версии (зеркала), или манипулированием css media quaries, которые никак бы не смогли исключить «лишние» элементы из цикла wordpress. Решение с сессией, позволяет имея 1 шаблон адаптировать сайт абсолютно под все устройства так же исключая лишний трафик в виде ненужных js библиотек, лишнего css мусора и лишних изображений. А при учете, что в странах СНГ нет нормального lte повсеместно, это весьма уместное решение.

    P.s спасибо, что откликнулись =)

    предполагало создания отдельной мобильной версии (зеркала), или манипулированием css media quaries, которые никак бы не смогли исключить «лишние» элементы из цикла wordpress

    НИЧЕГО ИЗ ЭТОГО! Ни отдельной версии, ни пхп и циклов.

    Чесслово, лень повторять в 3-й раз.. Перечитайте топики ранее.

    1. На поддомене\подкаталоге
    2. Подменой темы по определению ЮА.

    Может я конечно ошибаюсь из-за своей неопытности. Но если я правильно понимаю контекст первых двух пунктов, то из них следует, что мне необходимо создать второй шаблон темы поместив его в отдельную папку, с собственными archive.php, index.php, functioins.php и прочим, как например это сделано на wp-touch. Если я ошибаюсь, поправьте.

    3. Адаптивная вёрстка (media queries)

    Этот метод (конечно если htmlbook не врет) предполагает определения типа устройства и его разрешения средствами css и позволяет изменять только стили. Опять таки, поправьте если я ошибаюсь.

    Чего хотел я? Я хотел при помощи логических условий в своей родительской и !единственной теме, изменить логику работы wp (читай цикл) исключив ненужные элементы. Самое логичное решение этой проблемы, php session’s. Я не понимаю, почему Вы меня считаете идиотом, но с удовольствием послушаю Вашу аргументацию, если у Вас будет желание обсуждать эту тему.

    P.s проблему описываемую в данном топике — решил. Вот таким:

    if( !isset($_SESSION['version']) && wp_is_mobile()) {
       wp_redirect( '/?version=mobile' );
    exit;
    }

    незамысловатым способом, можно проверить была ли прежде инициирована сессия на мобильном устройстве и если ответ — отрицателен, перенаправить пользователя соответственно на моб. версию.

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

    /*-- Переключение на мобильную версию сайта ссылкой --*/
     session_start(); // начинаем сессию, запонимая какой выбор сделал пользователь
     if (isset($_REQUEST['version'])) { // создаем перехват линка
            $_SESSION['version'] = $_REQUEST['version'];
    }
    function mobileview($on){ // создаем удобную функцию
    $on=$_SESSION['version'] == 'mobile';
    return $on;
    }
    if( !isset($_SESSION['version']) && wp_is_mobile()) {
       wp_redirect( '/?version=mobile' );
    exit;
    }

    В футере 2 ссылки:

    <?php	if (!mobileview($on)){ ?>
        <a href="http://109.254.129.121/?version=mobile">Мобильная версия</a>
    	<?php } if (mobileview($on)){ ?>
      <a href="http://109.254.129.121/?version=desktop">Полная версия</a> <?php } ?></span>

    .

    Сразу оговорюсь, код может быть грязным и некрасивым, писал исходя из своих знаний (а у меня их на данный момент не много). К тому же еще не до конца определился, будет ли (при определение смартфон пользователя впервые) лучшим вариантом использовать isset, empty или $_SESSION [‘session_name’] == »

    Спасибо всем за помощь -))

    и что будет по
    /?version=mobile
    ?

    Звучит как риторический вопрос, но я все же отвечу. /?version=mobile, создаёт php request который перехватывается и передаётся для создания новой сессии. После чего, функция mobileview получает данные о текущей сессии и возвращает параметр (true), если мобильная сессия активна, что в свою очередь позволяет при помощи простого логического выражения типа: if(mobileview($on){wp_deregister_script (‘jquery’)} создать условие при котором во время инициированной мобильной сессии библиотека jquery подгружаться, не будет. Такое же условие можно создать для любой типовой функции внутри цикла wordpress, что в свою очередь позволяет иметь лишь одну активную тему без лишних заморочек. Как то так -)

    P.s в примере могут быть ошибки в названии функции, так как пишу с мобильного и по памяти.

    Звучит как риторический вопрос,

    Вопрос для подумать. В чем отличие от стандартных (чит: правильных) вариантов решения

    без лишних заморочек.

    Если это без заморочек.. Столько всего нужно создать проверить обработать…
    //При этом напихать шаблоны темы условиями в которых потом разобраться будет не возможно (вместо того, что бы создать отдельные шаблоны для моб. версии) //

    Чем это отличается от is_mobile?

    Вопрос для подумать. В чем отличие от стандартных (чит: правильных) вариантов решения

    Вверху я уже сказал, в чем отличие. В простоте, экономии места, в существовании лишь 1 темы.

    Если это без заморочек.. Столько всего нужно создать проверить обработать…
    //При этом напихать шаблоны темы условиями в которых потом разобраться будет не возможно (вместо того, что бы создать отдельные шаблоны для моб. версии) //

    Код легко комментируется и не требует долгого разбирательства, а при должном уровне знаний и умений можно все это вынести в отдельный плагин, что еще больше упростит работу.

    Чем это отличается от is_mobile?

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

Просмотр 8 ответов — с 1 по 8 (всего 8)
  • Тема «Перенаправление на php сессию» закрыта для новых ответов.