Автоопределение мобильного браузера

Список разделов phpBBex 1.x (поддерживается) Мастерская 1.x

Описание: Только готовые решения! Статьи, заметки, моды и другие полезности для phpBBex 1.x и phpBB 3.0.x.
Модератор: Поддержка

Сообщение #1 NO SWEAR » 25.08.2013, 15:55

Как обещал выкладываю описание как сделать автоопределение мобильного браузера. Нам понадобится отредактировать всего 2 файла session.php и posting.php.

Открываем includes/session.php и ищем:

Код: Выделить всё
function setup($lang_set = false, $style = false)
   {
      global $db, $template, $config, $auth, $phpEx, $phpbb_root_path, $cache;

      if ($this->data['user_id'] != ANONYMOUS)

Нашли, заменяем на:

Код: Выделить всё
function setup($lang_set = false, $style = false)
   {
      global $db, $template, $config, $auth, $phpEx, $phpbb_root_path, $cache;

      // phpBB_mobile_detect - Mobile Stlye Redirect MOD
         $this->data['is_mobile'] = false;
         include_once($phpbb_root_path . 'includes/mods/mobile_device_detect.' . $phpEx);
         $this->data['is_mobile'] = mobile_device_detect();

         if ($this->data['is_mobile'] == true)
         {
            $style = 3;
            $this->data['is_mobile'] = true;
         }
      // phpBB_mobile_detect End

      if ($this->data['user_id'] != ANONYMOUS)
ps:поправил. действительно строчка потерялась. прошу прощения за сие недоразумение.

Далее в этом же файле ищем:

Код: Выделить всё
if (!empty($_GET['style']) && $auth->acl_get('a_styles') && !defined('ADMIN_START'))

Нашли, заменяем на:
Код: Выделить всё
// Setup for ?style=# to work for style viewing.
      // if (!empty($_GET['style']) && $auth->acl_get('a_styles') && !defined('ADMIN_START'))
      if (!empty($_GET['style']))

Далее открываем файл posting.php и ищем:
Код: Выделить всё
// Parse Attachments - before checksum is calculated
   $message_parser->parse_attachments('fileupload', $mode, $forum_id, $submit, $preview, $refresh);

   // Grab md5 'checksum' of new message

Нашли, заменяем на :
Код: Выделить всё
// Parse Attachments - before checksum is calculated
   $message_parser->parse_attachments('fileupload', $mode, $forum_id, $submit, $preview, $refresh);

   // phpBB_mobile_detect - Mobile Stlye Redirect MOD
   if ($user->data['is_mobile'] && $mode != 'edit' && !$preview  && !$refresh)
   {
      include_once($phpbb_root_path . 'includes/mods/mobile_device_detect.' . $phpEx);
      $status = mobile_device_detect();

      $message_parser->message .= "\n\n[size=85][b][i][ Отправлено с " . $status[1] . " ][/i][/b][/size] [img]http://yoursite.com/phpBB3/images/mobile/" . $status[1] . ".png[/img]";
   }
   // phpBB_mobile_detect End

   // Grab md5 'checksum' of new message

И осталось самое малое:
1) Для того чтобы отображался стиль тот что вам необходим для мобильного стиля, нужно в файле session.php в строчке с
Код: Выделить всё
$style = 3;
вместо цифры 3 вставить цифру соответвующую нумерации стиля на вашем форуме.
2) И второе изменение для полной адаптации к вашему форуму:
в файле posting.php в строчке
Код: Выделить всё
$message_parser->message .= "\n\n[size=85][b][i][ Отправлено с " . $status[1] . " ][/i][/b][/size] [img]http://yoursite.com/phpBB3/images/mobile/" . $status[1] . ".png[/img]";
Заменить путь http://yoursite.com/phpBB3/images/mobile/ на путь ведущий http://ваш_сайт.com/ваш_форум/images/mobile/ либо http://yoursite.com/images/mobile/

Так же необходимо распаковать этот архив в ваш форум
root.rar
(89.7 КБ) Скачиваний: 885
он добавит мини картинки мобильных для отображения при размещении сообщений.
Выглядит это так:
25.08.png
25.08.png (3.28 КБ) Просмотров: 28250

И еще один файлик для работы автопределения.

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

Код: Выделить всё
<li><a href="/index.php?style=1" class="menu-link main"><span>Полная версия</span></a></li>


Ну и конечно я не автор этого мода, я лишь расписал всё что нужно сделать, с необходимыми правками для работы мода на форуме. Ссылка на форум создателя есть на этом форуме но я уже не буду копировать ее сюда тк кому надо тот найдет. Работа этого мода проверена на моем форуме. За мобильный стиль был взят стиль Artodia "art_mobile_iphone" так как мне он больше понравился.Вы конечно можете использовать тот стиль что подходит Вам. Кому хочется взглянуть на работу мода, ссылка под аватаркой.
Последний раз редактировалось NO SWEAR 20.09.2013, 09:54, всего редактировалось 3 раз(а).
NO SWEAR M
Автор темы
Аватара
Репутация: 115
С нами: 12 лет 1 месяц

Сообщение #2 nurgaf » 25.08.2013, 20:20

NO SWEAR, Спасибо большое за сдержанное обещание! :wink: :clap:
А если что, кому нужна тема мобильной версии форума вот - /viewtopic.php?t=692. :smoke:
Надеюсь VEG в следующих версиях BBex сделает это штатной плюшкой :idea: :yes:
nurgaf M
Аватара
Откуда: г.Челябинск
Репутация: 65
С нами: 11 лет 6 месяцев

Сообщение #3 shvager » 29.08.2013, 12:39

NO SWEAR:Открываем includes/session.php и ищем:

КОД: ВЫДЕЛИТЬ ВСЁ
function setup($lang_set = false, $style = false)
   {
      global $db, $template, $config, $auth, $phpEx, $phpbb_root_path, $cache;

      if ($this->data['user_id'] != ANONYMOUS)

Нашли, заменяем на:

КОД: ВЫДЕЛИТЬ ВСЁ
function setup($lang_set = false, $style = false)
   {
      global $db, $template, $config, $auth, $phpEx, $phpbb_root_path, $cache;

      // phpBB_mobile_detect - Mobile Stlye Redirect MOD
         $this->data['is_mobile'] = false;
         include_once($phpbb_root_path . 'includes/mods/mobile_device_detect.' . $phpEx);
         $this->data['is_mobile'] = mobile_device_detect();

         if ($this->data['is_mobile'] == true)
         {
            $style = 3;

У меня после этой правки - 500 ошибка :sad:
shvager
Репутация: 22
С нами: 12 лет 5 месяцев

Сообщение #4 Sumanai » 29.08.2013, 15:29

Архив распаковали?
Sumanai M
Аватара
Репутация: 1677
С нами: 11 лет 8 месяцев

Сообщение #5 nurgaf » 17.09.2013, 20:51

Parse error: syntax error, unexpected T_ELSE in /home/bh49402/ci-forum.ru/includes/session.php on line 1637
Файлы записал, архив на месте..
nurgaf M
Аватара
Откуда: г.Челябинск
Репутация: 65
С нами: 11 лет 6 месяцев

Сообщение #6 Sumanai » 17.09.2013, 21:12

Похоже на неправильное внесение правок или конфликт с другим модом. Какие ещё моды стоят?
Sumanai M
Аватара
Репутация: 1677
С нами: 11 лет 8 месяцев

Сообщение #7 nurgaf » 18.09.2013, 10:45

Пустой phpbbex без модов, попробую залить чистые файлы и сделать по новой, вдруг, возможно сам накосячил, но это наврятли)
nurgaf M
Аватара
Откуда: г.Челябинск
Репутация: 65
С нами: 11 лет 6 месяцев

Сообщение #8 shvager » 19.09.2013, 17:50

Sumanai:Архив распаковали?
Канечно)) Перепроверял правки несколько раз... Все так же... только после первой правки в session.php - сразу 500 ошибка. :sad:
shvager
Репутация: 22
С нами: 12 лет 5 месяцев

Сообщение #9 VEG » 19.09.2013, 18:47

Если 500 ошибка, то смотрите в логах ошибок сервера подробности — там обязательно будет написано, почему именно вываливается 500 ошибка.
VEG M
Администратор
Аватара
Откуда: Finland
Репутация: 1667
С нами: 12 лет 5 месяцев

Сообщение #10 shvager » 19.09.2013, 19:27

Код: Выделить всё
PHP Parse error:  syntax error, unexpected T_ELSE in .../forum/includes/session.php on line 1637

Добавлено спустя 6 минут 36 секунд:
Сам кусок кода:
Код: Выделить всё
 // phpBB_mobile_detect - Mobile Stlye Redirect MOD
         $this->data['is_mobile'] = false;
         include_once($phpbb_root_path . 'includes/mods/mobile_device_detect.' . $phpEx);
         $this->data['is_mobile'] = mobile_device_detect();

         if ($this->data['is_mobile'] == true)
         {
            $style = 1;
      {
         $this->lang_name = (!$config['override_user_lang'] && file_exists($this->lang_path . $this->data['user_lang'] . "/common.$phpEx")) ? $this->data['user_lang'] : basename($config['default_lang']);
         $this->date_format = ($config['override_user_dateformat']) ? $config['default_dateformat'] : $this->data['user_dateformat'];
         $this->timezone = ($config['override_user_timezone'] ? $config['board_timezone'] : $this->data['user_timezone']) * 3600;
         $this->dst = ($config['override_user_dst'] ? $config['board_dst'] :$this->data['user_dst']) * 3600;
      }
      else  //- вот строка 1637
      {
         $this->lang_name = basename($config['default_lang']);
         $this->date_format = $config['default_dateformat'];
         $this->timezone = $config['board_timezone'] * 3600;
         $this->dst = $config['board_dst'] * 3600;

Добавлено спустя 10 минут 15 секунд:
Из модов стоит Галерея и портал
shvager
Репутация: 22
С нами: 12 лет 5 месяцев

Сообщение #11 Sumanai » 19.09.2013, 19:56

Очень похоже на то, что не туда вставили.
Sumanai M
Аватара
Репутация: 1677
С нами: 11 лет 8 месяцев

Сообщение #12 shvager » 19.09.2013, 20:01

Такой кусок кода только в одном месте в этом файле:
session.zip
(21.69 КБ) Скачиваний: 774
shvager
Репутация: 22
С нами: 12 лет 5 месяцев

Сообщение #13 Sumanai » 19.09.2013, 20:13

Кажись ошибка в инструкции. После
Код: Выделить всё
         if ($this->data['is_mobile'] == true)
         {
            $style = 3;
Добавьте строчку с
Код: Выделить всё
         }
То есть три таба и фигурная закрывающая скобка.

Добавлено спустя 1 минуту 51 секунду:
И ещё куда- то потеряли строчку
Код: Выделить всё
      if ($this->data['user_id'] != ANONYMOUS)
Если не заработает моё первое предложение, вставьте её после той, что я предложил, либо на оригинальное место.
Sumanai M
Аватара
Репутация: 1677
С нами: 11 лет 8 месяцев

Сообщение #14 shvager » 19.09.2013, 20:21

PHP Parse error: syntax error, unexpected T_ELSE in .../forum/includes/session.php on line 1638

:insane:

Добавлено спустя 4 минуты 55 секунд:
Ошибка исчезла после такой замены:
Код: Выделить всё
   function setup($lang_set = false, $style = false)
   {
      global $db, $template, $config, $auth, $phpEx, $phpbb_root_path, $cache;
      
      // phpBB_mobile_detect - Mobile Stlye Redirect MOD
         $this->data['is_mobile'] = false;
         include_once($phpbb_root_path . 'includes/mods/mobile_device_detect.' . $phpEx);
         $this->data['is_mobile'] = mobile_device_detect();

         if ($this->data['is_mobile'] == true)
         {
            $style = 1;
      }
            if ($this->data['user_id'] != ANONYMOUS)

Продолжу дальше - щас отпишусь))0

Добавлено спустя 10 минут 6 секунд:
Во! Арбайтет!
ПыСы
Вот для этого стоит написать как верно найти номер стиля - иначе при входе с мобилы( при неверно указаном ID стиля) - будет общая ошибка:
shvager
Репутация: 22
С нами: 12 лет 5 месяцев

Сообщение #15 Sumanai » 19.09.2013, 20:37

Да, инструкция не верная.
Первый пункт должен быть таким:
Открываем includes/session.php и ищем:
Код: Выделить всё
   function setup($lang_set = false, $style = false)
   {
      global $db, $template, $config, $auth, $phpEx, $phpbb_root_path, $cache;

      if ($this->data['user_id'] != ANONYMOUS)
Заменяем:
Код: Выделить всё
   function setup($lang_set = false, $style = false)
   {
      global $db, $template, $config, $auth, $phpEx, $phpbb_root_path, $cache;

      // phpBB_mobile_detect - Mobile Stlye Redirect MOD
         $this->data['is_mobile'] = false;
         include_once($phpbb_root_path . 'includes/mods/mobile_device_detect.' . $phpEx);
         $this->data['is_mobile'] = mobile_device_detect();

         if ($this->data['is_mobile'] == true)
         {
            $style = 3;
            $this->data['is_mobile'] = true;
         }
      // phpBB_mobile_detect End

      if ($this->data['user_id'] != ANONYMOUS)
Sumanai M
Аватара
Репутация: 1677
С нами: 11 лет 8 месяцев

Сообщение #16 shvager » 19.09.2013, 20:41

Я, делал так:
203719092013.PNG

203819092013.PNG

И менял на этот номер.

Добавлено спустя 32 минуты 32 секунды:
А теперь вопрос к VEG, - как поправить чтобы на мобильном стиле работала склейка сообщений? Это очень "мрачно"? :oops:

Добавлено спустя 10 минут 45 секунд:
NO SWEAR:И конечно же, как вы спросите , надо же добавить кнопку для возврата в стандартный стиль. Для этого вам необходимо добавить в нужное место что то вроде этого:


<li><a href="/index.php?style=1" class="menu-link main"><span>Полная версия</span></a></li>
Тут также нужно выставить верный номер вашего основного стиля.
shvager
Репутация: 22
С нами: 12 лет 5 месяцев

Сообщение #17 NO SWEAR » 20.09.2013, 10:05

Sumanai:Да, инструкция не верная.
поправил инструкцию. действительно потерялась одна строчка. прошу прощения за недоразумение.

shvager:Тут также нужно выставить верный номер вашего основного стиля.
я исходил из того что основной стиль форума имеет ид=1 как по дефолту на моём форуме а так же при установке нового форума.
shvager:Я, делал так:

узнать правильный ид стиля можно так:

20.09.png

20.09_2.png
20.09_2.png (6.12 КБ) Просмотров: 27991
NO SWEAR M
Автор темы
Аватара
Репутация: 115
С нами: 12 лет 1 месяц

Сообщение #18 Александр_ » 15.10.2013, 14:09

А не проще создать отдельный субдомен (m.forum.ru) с файлами мобильного стиля и делать авто определение и редирект на стороне сервера.

Код: Выделить всё
if ( $http_user_agent ~* (windows\smobile|windows\sce|iphone|ipod|midp|symbian|series\s60|s60|nokia|аndroid| blackberry) ) {
rewrite ^/(.*) m.forum.ru/$1 permanent;

Указать общую таблицу пользователей для общей регистрации, пути к cookies для общей авторизации. и через функцию проверки браузера на стандартном шаблоне выводить что пользователь в мобильной версии сайта.
Александр_
Гость

Сообщение #19 Sumanai » 15.10.2013, 15:58

Александр_:А не проще создать отдельный субдомен (m.forum.ru) с файлами мобильного стиля и делать авто определение и редирект на стороне сервера.

Может и проще, но, пожалуйста, не делайте так. Лично я с телефона хочу видеть полноценную версию сайта, а подобный код убивает эту возможность, приходится ради какого- то там сайта лезть в настройки браузера.
Ну и как бы phpBB не приспособлен для работы на двух доменах, как и не приспособлен для забирания стилей с поддомена.
Sumanai M
Аватара
Репутация: 1677
С нами: 11 лет 8 месяцев

Сообщение #20 Александр_ » 15.10.2013, 16:21

Подобный код может и убивает, допустим, но его можно изменить и дать вам возможность просмотреть страницу не мобильной версии.
И почему нельзя сделать общую регистрацию и авторизацию двух phpbbex (m.forum.ru и forum.ru) и причем тут забирание стелей, когда речь идет о двух независимых друг от друга форумов с единой базой.
Александр_
Гость

След.

Вернуться в Мастерская 1.x