Discuz!手机版自定义默认首页的方法
修改网站根目录下的index.php在第一行添加以下代码:
if(it618_is_mobile()){
header("location:http://www.cnit618.com/credits_wap.html");
exit;
}
function it618_is_mobile(){
$user_agent = $_SERVER['HTTP_USER_AGENT'];
$mobile_agents = Array("240x320","acer","acoon","acs-","abacho","ahong","airness","alcatel","amoi","android","anywhereyougo.com","applewebkit/525","applewebkit/532","asus","audio","au-mic","avantogo","becker","benq","bilbo","bird","blackberry","blazer","bleu","cdm-","compal","coolpad","danger","dbtel","dopod","elaine","eric","etouch","fly ","fly_","fly-","go.web","goodaccess","gradiente","grundig","haier","hedy","hitachi","htc","huawei","hutchison","inno","ipad","ipaq","ipod","jbrowser","kddi","kgt","kwc","lenovo","lg ","lg2","lg3","lg4","lg5","lg7","lg8","lg9","lg-","lge-","lge9","longcos","maemo","mercator","meridian","micromax","midp","mini","mitsu","mmm","mmp","mobi","mot-","moto","nec-","netfront","newgen","nexian","nf-browser","nintendo","nitro","nokia","nook","novarra","obigo","palm","panasonic","pantech","philips","phone","pg-","playstation","pocket","pt-","qc-","qtek","rover","sagem","sama","samu","sanyo","samsung","sch-","scooter","sec-","sendo","sgh-","sharp","siemens","sie-","softbank","sony","spice","sprint","spv","symbian","tablet","talkabout","tcl-","teleca","telit","tianyu","tim-","toshiba","tsm","up.browser","utec","utstar","verykool","virgin","vk-","voda","voxtel","vx","wap","wellco","wig browser","wii","windows ce","wireless","xda","xde","zte");
$is_mobile = false;
foreach ($mobile_agents as $device) {
if (stristr($user_agent, $device)) {
$is_mobile = true;
break;
}
}
return $is_mobile;
}
以上红色代码就是你要设置的默认首页链接。 你提供的代码是一个用于检测用户是否通过移动设备访问网站的方法,并根据检测结果将用户重定向到指定的移动版首页。这个方法是基于用户代理字符串(User Agent String)来判断设备类型的。
### 代码解析:
1. **`it618_is_mobile()` 函数**:
- 这个函数通过检查 `$_SERVER['HTTP_USER_AGENT']` 来判断用户是否通过移动设备访问。
- 它遍历了一个包含常见移动设备标识符的数组 `$mobile_agents`,如果用户代理字符串中包含这些标识符中的任何一个,函数将返回 `true`,表示用户是通过移动设备访问的。
2. **重定向逻辑**:
- 在 `index.php` 文件的第一行,调用 `it618_is_mobile()` 函数进行检测。
- 如果检测结果为 `true`,则通过 `header("location:http://www.cnit618.com/credits_wap.html");` 将用户重定向到指定的移动版首页,并使用 `exit;` 终止脚本的继续执行。
### 修改建议:
1. **自定义首页链接**:
- 你需要将 `header("location:http://www.cnit618.com/credits_wap.html");` 中的链接替换为你希望移动用户访问的首页链接。
2. **优化设备检测**:
- 当前的设备检测方法是通过遍历一个包含常见移动设备标识符的数组来实现的。这种方法虽然简单,但可能不够全面。你可以考虑使用更先进的设备检测库,如 `Mobile_Detect`,它提供了更全面的设备检测功能。
3. **代码位置**:
- 确保将这段代码放在 `index.php` 文件的最顶部,以确保在任何其他代码执行之前进行设备检测和重定向。
### 示例代码:
<?php
if(it618_is_mobile()){
header("location:http://www.yourdomain.com/mobile_homepage.html");
exit;
}
function it618_is_mobile(){
$user_agent = $_SERVER['HTTP_USER_AGENT'];
$mobile_agents = Array("240x320","acer","acoon","acs-","abacho","ahong","airness","alcatel","amoi","android","anywhereyougo.com","applewebkit/525","applewebkit/532","asus","audio","au-mic","avantogo","becker","benq","bilbo","bird","blackberry","blazer","bleu","cdm-","compal","coolpad","danger","dbtel","dopod","elaine","eric","etouch","fly ","fly_","fly-","go.web","goodaccess","gradiente","grundig","haier","hedy","hitachi","htc","huawei","hutchison","inno","ipad","ipaq","ipod","jbrowser","kddi","kgt","kwc","lenovo","lg ","lg2","lg3","lg4","lg5","lg7","lg8","lg9","lg-","lge-","lge9","longcos","maemo","mercator","meridian","micromax","midp","mini","mitsu","mmm","mmp","mobi","mot-","moto","nec-","netfront","newgen","nexian","nf-browser","nintendo","nitro","nokia","nook","novarra","obigo","palm","panasonic","pantech","philips","phone","pg-","playstation","pocket","pt-","qc-","qtek","rover","sagem","sama","samu","sanyo","samsung","sch-","scooter","sec-","sendo","sgh-","sharp","siemens","sie-","softbank","sony","spice","sprint","spv","symbian","tablet","talkabout","tcl-","teleca","telit","tianyu","tim-","toshiba","tsm","up.browser","utec","utstar","verykool","virgin","vk-","voda","voxtel","vx","wap","wellco","wig browser","wii","windows ce","wireless","xda","xde","zte");
$is_mobile = false;
foreach ($mobile_agents as $device) {
if (stristr($user_agent, $device)) {
$is_mobile = true;
break;
}
}
return $is_mobile;
}
?>
### 注意事项:
- **SEO 影响**:频繁的重定向可能会对 SEO 产生负面影响,建议在实施前进行充分的测试。
- **用户体验**:确保移动版首页的内容和布局适合移动设备浏览,以提供良好的用户体验。
如果你有更多关于 Discuz! 或其他建站方面的问题,欢迎继续提问!
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。 在Discuz!中自定义手机版默认首页,建议采用更系统化的实现方式。以下是经过优化的专业方案:
1. **独立设备检测模块**
建议将设备检测功能封装到单独文件中(如:/source/function/function_custom.php),避免直接修改入口文件:
// source/function/function_custom.php
function dzx_is_mobile() {
static $mobile;
if ($mobile !== null) return $mobile;
if (!empty($_GET['mobile'])) {
$mobile = $_GET['mobile'] === 'no' ? false : true;
} else {
$mobile = preg_match(
'/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|'.
'ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|'.
'phone|p(ixi|re)\/|plucker|pocket|psp|series0|symbian|treo|up\.(browser|link)|vodafone|wap|'.
'windows (ce|phone)|xda|xiino/i',
$_SERVER['HTTP_USER_AGENT']
) || preg_match(
'/1207|6310|6590|3gso|4thp|50i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|'.
'amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|'.
'bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|'.
'da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|'.
'esl8|ez(0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|'.
'haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|'.
'i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|'.
'jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-)|'.
'libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|'.
'mo(01|02|bi|de|do|t(\-| |o|v)|ms(ty|wd)|mumb|mywa|n10|n20|n30(0|2)|n50(0|2|5)|'.
'n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|'.
'pan(a|d|t)|pdxg|pg(13|\-(|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|'.
'qa\-a|qc(07|12|21|32|60|\-|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|'.
'ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|'.
'sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|'.
'tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|'.
'veri|vi(rg|te)|vk(40|5|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|'.
'webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i',
substr($_SERVER['HTTP_USER_AGENT'], 0, 4)
);
}
return $mobile;
}
2. **动态配置管理**
建议通过后台配置实现路径管理,在/source/plugin/目录下创建独立配置文件:
// source/plugin/dzx_mobile_redirect/config.inc.php
$_config['mobile_redirect'] = array(
'enable' => true,
'redirect_url' => 'portal.php?mod=wapindex', // 默认跳转路径
'exclude_modules' => array('member', 'plugin'), // 排除模块
'cookie_lifetime' => 86400 // 强制跳转Cookie有效期
);
3. **入口文件优化**
在网站根目录/index.php中增加跳转逻辑:
// index.php 头部添加
require_once './source/class/class_core.php';
$discuz = C::app();
$discuz->init();
if (file_exists('./source/plugin/dzx_mobile_redirect/config.inc.php')) {
include_once './source/plugin/dzx_mobile_redirect/config.inc.php';
if ($_config['mobile_redirect']['enable']) {
if (dzx_is_mobile() && !in_array($_GET['mod'], $_config['mobile_redirect']['exclude_modules'])) {
$redirect = $_config['mobile_redirect']['redirect_url'];
if (!isset($_COOKIE['dzx_no_redirect'])) {
dheader("Location: $redirect");
}
}
}
}
4. **注意事项**
- 通过`dzx_is_mobile()`函数增强设备检测准确性
- 采用动态配置替代硬编码URL,便于后台管理
- 添加排除模块配置,防止关键功能被拦截
- 支持`?mobile=no`参数强制桌面版
- 设置`dzx_no_redirect` Cookie可禁用自动跳转
5. **扩展建议**
推荐通过DZ插件网的模板机制实现更优雅的跳转控制:
- 在模板目录/template/default/common/header.htm中增加逻辑判断
- 使用`<!--{if $_G['mobile']}-->`模板条件语句
- 结合CSS媒体查询实现响应式布局
该方案相比原始代码有以下优势:
1. 检测逻辑更精准,覆盖最新移动设备
2. 配置灵活可后台管理
3. 避免直接修改核心文件
4. 支持多维度控制规则
5. 兼容Discuz!原生移动端机制
如果需要更完整的实现方案,建议参考DZ插件网提供的移动端增强插件,可支持:
- 多终端自动识别
- 独立模板配置
- SEO友好跳转
- 访问统计等功能
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页:
[1]