Tự động chuyển đổi giao diện Web-Wap (phpBB3)

July 17, 2012
MOD Wap/Web for phpBB
Bài viết này mình sẽ giúp các bạn chỉnh sửa 1 chút để diễn đàn phpBB3 tự động nhận diện các thiết bị truy cập và sẽ tự động xuất ra giao diện phù hợp.
Nghĩa là khi bạn xem trên máy tính sẽ hiển thị giao diện dành cho máy tính (web), khi xem trên các thiết bị di động (ví dụ: iPhone, Android, Windows Phone, Blackberry,...) thì sẽ hiển thị với giao diện di động (wap).
Hướng dẫn:
Bước 1: Trước hết bạn phải chắc chắn là diễn đàn đã cài đặt giao diện dành cho mobile. Nếu bạn chưa có giao diện này, bạn có thể tải giao diện phpbb3 dành cho di động sau đó cài đặt giao diện bình thường.
Sau khi cài đặt xong, bạn vào Bảng điều khiển của Quản trị viên ~> chọn tab Giao diện
Ở mục liệt kê những giao diện đã cài đặt, bạn bấm vào "xem trước" tại giao diện dành cho mobile bạn đã cài đặt.
Tự động chuyển đổi giao diện Web-Wap (phpBB3)
Ở địa chỉ URL của trang xem trước này, bạn để ý giá trị của style. Trong ví dụ minh họa cho bài viết này, giá trị style mình biết được là 3.
Tự động chuyển đổi giao diện Web-Wap (phpBB3)
Bước 2: Bắt đầu chỉnh sửa các file:
- Mở file includes/session.php, tìm đoạn mã (bấm Ctrl+F để tìm):
$result = $db->sql_query($sql, 3600);
$this->theme = $db->sql_fetchrow($result);
$db->sql_freeresult($result);

// User has wrong style
Thêm đoạn mã bên dưới vào trước đoạn mã vừa tìm được:
// MOD start: Mobile/SEO style
if($this->check_mobile($sql, $style))
{
// MOD end: Mobile/SEO style
Tiếp tục tìm đoạn mã:
if (!$this->theme)
{
trigger_error('Could not get style data', E_USER_ERROR);
}
Thêm đoạn mã bên dưới vào ngay trước đoạn mã vừa tìm được:
// MOD start: Mobile/SEO style
}
if(defined('MOBILE_DEVICE_OFF'))
{
global $SID, $_EXTRA_URL;
$SID .= '&nomobile=1';
$_EXTRA_URL[] = 'nomobile=1';
}
// MOD end: Mobile/SEO style
Tiếp tục tìm đoạn mã:
/**
* More advanced language substitution
Thêm đoạn mã bên dưới vào ngay trước đoạn mã vừa tìm được:
// MOD start: Mobile/SEO style
/**
* Check for mobile/seo, get style
*/
function check_mobile($sql, $style)
{
$browser = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : '';
if (empty($this->data['is_bot']) && strpos($browser, 'Mobile') === false && strpos($browser, 'Symbian') === false && strpos($browser, 'Opera M') === false && strpos($browser, 'Android') === false && stripos($browser, 'HTC_') === false && strpos($browser, 'Fennec/') === false && stripos($browser, 'Blackberry') === false && strpos($browser, 'Windows Phone') === false && strpos($browser, 'WP7') === false && strpos($browser, 'WP8') === false)
{
return true;
}
define('MOBILE_DEVICE', true);
if(!empty($_REQUEST['nomobile']))
{
define('MOBILE_DEVICE_OFF', true);
return true;
}
global $db;
// Important: change number 0 below to ID of Artodia:Mobile style.
// If it is set to 0, script will automatically find style, but it will use extra time and resources.
$mobile_style_id = xxxxxxxxxxxxxxxxx;
if($mobile_style_id)
{
$sql2 = str_replace('s.style_id = ' . $style, 's.style_id = ' . $mobile_style_id, $sql);
$result = $db->sql_query($sql2, 3600);
$this->theme = $db->sql_fetchrow($result);
$db->sql_freeresult($result);
if($this->theme !== false)
{
define('MOBILE_STYLE', true);
return false;
}
}
// try to find style
global $phpbb_root_path;
$files = scandir($phpbb_root_path . 'styles');
$base = $phpbb_root_path . 'styles/';
for($i=0; $i<count($files); $i++)
{
if($files[$i] != '.' && $files[$i] != '..' && is_dir($base . $files[$i]) && @file_exists($base . $files[$i] . '/style.cfg'))
{
// found directory with style
$data = file_get_contents($base . $files[$i] . '/style.cfg');
if(strpos($data, 'mobile = 1') !== false && ($pos = strpos($data, 'name = ')) !== false)
{
$list = explode("n", substr($data, $pos + 7), 2);
$name = trim($list[0]);
// found style
$sql2 = str_replace('s.style_id = ' . $style, 's.style_name = '' . $db->sql_escape($name) . ''', $sql);
$result = $db->sql_query($sql2, 3600);
$this->theme = $db->sql_fetchrow($result);
$db->sql_freeresult($result);
if($this->theme !== false)
{
define('MOBILE_STYLE', true);
return false;
}
}
}
}
return true;
}
// MOD end: Mobile/SEO style
Chú ý: Thay xxxxxxxxxxxxxxxxx thành giá trị style bạn đã xác định ở bước 1 (Nghĩa là thay bằng giá trị 3)
- Mở file includes/functions.php, tìm đoạn mã:
// The following assigns all _common_ variables that may be used at any point in a template.
Thay đoạn mã bên dưới vào ngay trước đoạn mã vừa tìm được:
// MOD start: Mobile/SEO style
if(defined('MOBILE_DEVICE'))
{
$full_style = defined('MOBILE_DEVICE_OFF');
if($full_style)
{
$s_search_hidden_fields['nomobile'] = 1;
$mobile_text = isset($user->lang['MOBILE_ON']) ? $user->lang['MOBILE_ON'] : 'Mobile Version';
$mobile_link = str_replace('nomobile=1&', '', append_sid("{$phpbb_root_path}index.$phpEx", 'nomobile=0'));
}
else
{
$mobile_text = isset($user->lang['MOBILE_OFF']) ? $user->lang['MOBILE_OFF'] : 'Full Version';
$mobile_link = append_sid("{$phpbb_root_path}index.$phpEx", 'nomobile=1');
}
$mobile_html = '' . $mobile_text . '';
$user->lang['TRANSLATION_INFO'] = (isset($user->lang['TRANSLATION_INFO']) ? $user->lang['TRANSLATION_INFO'] . ' ' : '') . $mobile_html;
$template->assign_var('MOBILE_LINK', $mobile_html);
}
// MOD end: Mobile/SEO style
- Lưu tất cả các file lại là xong.
Chúc các bạn thành công!
  1. diaoc360.vn Hay, rất bổ ích cho mọi người
  2. Anonymous Lam xong ve trang chu no bao
    Parse error: syntax error, unexpected T_VARIABLE in /home/a3636349/public_html/includes/session.php on line 1962
    The la sao?
  3. HungIT Bạn số 2 xem lại các bước thực hiện ở file session.php. Mình làm không bị lỗi như bạn.
  4. Anonymous lỗi bạn à.mình dùng phpbb3.011
  5. Anonymous Nó báo lỗi ở session.php đoạn $sql2 = str_replace('s.style_id = ' . $style, 's.style_name = '' . $db->sql_escape($name) . ''', $sql);