0

0

仿58一站多城市的实现及路由配置(一)

php中文网

php中文网

发布时间:2016-06-07 11:41:25

|

967人浏览过

|

来源于php中文网

原创

最近在做一个电商项目,需要实现一站多城市,看了不少帖子,发现都有些瑕疵,最后想到了使用空控制器访问城市分站。
现在把代码贴出来分享给大家,同时征求更好的优化建议。
例如zz.58.com这种就不做介绍了,如谁用到,可以私信我。
一站多城市同时,一站还多个后台,以58为例。
Common/Conf/config.phpreturn array(
    'APP_SUB_DOMAIN_DEPLOY'   =>    1, // 开启子域名配置
    'APP_SUB_DOMAIN_RULES'    =>    array(
        'www'        => 'Home',//使用www.58.com访问
        'biz'        => 'Admin',//使用biz.58.com访问
        'm'          => 'Wap',//使用m.58.com访问
    ),
);
Home/Conf/config.phpreturn array(
    /* 开启路由功能 */
    'URL_ROUTER_ON'   => true,
    'URL_ROUTE_RULES'=>array(
    //静态路由优先
        'cities'      => 'City/Change',//使用www.58.com/cities访问,用于选择城市
        'login' => 'Public/login',//使用www.58.com/login访问,用于登陆
        'reg'   => 'Public/reg',//使用www.58.com/reg访问,用于注册
    //动态路由开始
        'buy/:id\d' => 'Order/buy',//使用www.58.com/buy/18访问,用于购买ID为18的商品
                ':city/deal/:id\d' => 'Deal/index',//使用www.58.com/zz/deal/18访问,用于打开郑州页面的ID为18的商品页面
        ':city/:category'  => 'Category/list',//使用www.58.com/zz/meishi访问,用于打开郑州美食分类
        ),
);
Home/Controller/CommonController.class.phpnamespace Home\Controller;
use Think\Controller;
class CommonController extends Controller {
        /**
     * 后台控制器初始化
     */
    protected function _initialize(){
    header('Content-type:text/html;charset=utf-8');
        /* 读取数据库中的配置 */
        $config =   S('DB_CONFIG_DATA');
        if(!$config){
            $config =  D('Admin/Config')->getConfig();
            S('DB_CONFIG_DATA',$config);
        }
        C($config); //添加配置
    if(C('WEB_SITE_STATUS') == 'N'){
        $this->assign("message",'网站维护中,暂时无法访问');
        $this->error();
        }
        /* 获取UID */
    if (session('?uid') == false) {
            session('uid','0');
        }
    }
}
Home/Controller/IndexController.class.phpnamespace Home\Controller;
use Think\Controller;
class IndexController extends CommonController {
    
    public function _before_index(){
        /* 判断cookie */
        if (isset($_COOKIE['cityid'])){
            $city = $_COOKIE['cityurl'];
            redirect('/'.$city);
        }else{
            redirect('cities');
        }
    }
    
    public function index(){
        echo '如果看到这个页面,说明程序出错了!';
    }
    
}
Home/Controller/EmptyController.class.phpnamespace Home\Controller;
use Think\Controller;
class EmptyController extends CommonController{
    public function index(){
        //根据当前控制器名来判断要执行那个城市的操作
        $cityName = strtolower(CONTROLLER_NAME);
        if (isset($_COOKIE['cityurl']) and $cityName == $_COOKIE['cityurl']){
            $this->city($cityName);
        }else{
            $cityinfo = M('CategoryArea')->field('id,title,url')->where(array('url'=>$cityName,'type'=>'0','status'=>'1'))->find();
        if ($cityinfo){
            cookie('cityid',$cityinfo['id']);
            cookie('cityurl',$cityinfo['url']);
            cookie('citytitle',$cityinfo['title']);
            $this->city($cityName);
        }else{
            cookie('cityid',null);
            cookie('cityurl',null);
            cookie('citytitle',null);
            redirect('cities');
        }
        }
    }
    //注意 city方法 本身是 protected 方法
    protected function city($name){
        pre (session());
        pre (cookie());
        if(isset($_GET['p'])){$p = $_GET['p'];}else{$p=1;}
        $this->assign('p',$p);//当前页数
        $this->assign('category',D('Category')->categoryList(''));//获取分类及数量
        //防止程序提示错误,设定为0
        $info['categoryid'] = 0;$info['category_2'] = 0;
        $this->assign('area',D('CategoryArea')->areaList($info));//获取城市区域分类
        $data['city'] = $name;
        if (isset($_GET['order'])){$data['order'] = $_GET['order'];}else{$data['order'] = '';}
        pre ($data);
        $this->assign('data',$data);//获取列表
        $this->assign('team',D('Team')->teamList_i($data,$p));//获取列表
        $this->assign('page',D('Team')->pageshow_i($data,$p));//获取列表
        $this->assign('pagetype',ACTION_NAME);
        $this->display('Index/index');
    }
}

AD:真正免费,域名+虚机+企业邮箱=0元

路由优化大师
路由优化大师

路由优化大师是一款及简单的路由器设置管理软件,其主要功能是一键设置优化路由、屏广告、防蹭网、路由器全面检测及高级设置等,有需要的小伙伴快来保存下载体验吧!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

150

2025.12.31

php网站源码教程大全
php网站源码教程大全

本专题整合了php网站源码相关教程,阅读专题下面的文章了解更多详细内容。

88

2025.12.31

视频文件格式
视频文件格式

本专题整合了视频文件格式相关内容,阅读专题下面的文章了解更多详细内容。

90

2025.12.31

不受国内限制的浏览器大全
不受国内限制的浏览器大全

想找真正自由、无限制的上网体验?本合集精选2025年最开放、隐私强、访问无阻的浏览器App,涵盖Tor、Brave、Via、X浏览器、Mullvad等高自由度工具。支持自定义搜索引擎、广告拦截、隐身模式及全球网站无障碍访问,部分更具备防追踪、去谷歌化、双内核切换等高级功能。无论日常浏览、隐私保护还是突破地域限制,总有一款适合你!

61

2025.12.31

出现404解决方法大全
出现404解决方法大全

本专题整合了404错误解决方法大全,阅读专题下面的文章了解更多详细内容。

493

2025.12.31

html5怎么播放视频
html5怎么播放视频

想让网页流畅播放视频?本合集详解HTML5视频播放核心方法!涵盖<video>标签基础用法、多格式兼容(MP4/WebM/OGV)、自定义播放控件、响应式适配及常见浏览器兼容问题解决方案。无需插件,纯前端实现高清视频嵌入,助你快速打造现代化网页视频体验。

16

2025.12.31

关闭win10系统自动更新教程大全
关闭win10系统自动更新教程大全

本专题整合了关闭win10系统自动更新教程大全,阅读专题下面的文章了解更多详细内容。

12

2025.12.31

阻止电脑自动安装软件教程
阻止电脑自动安装软件教程

本专题整合了阻止电脑自动安装软件教程,阅读专题下面的文章了解更多详细教程。

5

2025.12.31

html5怎么使用
html5怎么使用

想快速上手HTML5开发?本合集为你整理最实用的HTML5使用指南!涵盖HTML5基础语法、主流框架(如Bootstrap、Vue、React)集成方法,以及无需安装、直接在线编辑运行的平台推荐(如CodePen、JSFiddle)。无论你是新手还是进阶开发者,都能轻松掌握HTML5网页制作、响应式布局与交互功能开发,零配置开启高效前端编程之旅!

2

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Git 教程
Git 教程

共21课时 | 2.4万人学习

Kotlin 教程
Kotlin 教程

共23课时 | 2.2万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号