皓优企php官网代码组织结构

概述

皓优企php官网采用经典的MVC架构,并通过伪静态技术实现动态路由。伪静态的优点是搜索引擎能够抓取网页中的动态内容,缺点是性能没有静态网页高,搜索引擎需要等待动态内容生成后才能获得结果。
本文档是通过分析源码逆向形成的一个技术总结,目的在于针对未来的业务变迁或者工作交接,给接手工作者一个快速的可供参考的技术文档,避免重复工作。这份文档本应该由开发者提供,这样才更具参考价值。究竟这些总结是否符合设计者意图,并不完全保证。

1.目录结构

平台页面根目录:zh-groups/application/home
子目录:
controller:控制层
model:模型层
view:视图层
validate:验证规则
common.php:此处定义多页面重用的通用接口。
config.phg:此处定义全局配置,例如:路径别名,模板参数。
database.php:返回空数组,暂不确定具体作用和设计意图。
tag.php:定义php标签参数,此处定义了用于导航的标签。

2.页面结构

MVC的基本调用流程为:当用户发送http请求后,请求会首先进入控制层,控制层根据路由规则进行层层筛选后进入符合规则的控制接口,进入接口后再调用模型层接口,模型层主要处理数据库操作。服务器等待处理结果,并根据处理结果的不同将不同的view层页面返回给用户。

2.1 controller控制层

Base.php
控制层页面的基类,继承自系统Controller类。重写了初始化方法。
核心代码:

 public function _initialize()
  {
    //创建模型层对象,该对象提供数据库访问接口
    $common = new CommonModel();
    //设置config缓冲区,并从数据库中读取config设置,对应数据库think_config表。
    $config = cache('db_config_data');
    if (!$config) {
      $config = load_config();
      cache('db_config_data', $config);
    }
    config($config);
    ...
    ...
 }

Activity.php
活动控制类,继承自Base类,为具体实现类。在具体的实现中如需要访问数据库,则调用基类提供的$common对象,该类提供各种数据库访问接口,各个控制类的实现代码和接口都不一样,如需了解,请参考项目代码。
核心代码:

//活动列表
public function activitylist()
{
    ...
}
//活动详情
public function detail()
{
    ...
}
//活动申请
public function application()
{
 ...
}
//活动签到
public function sign ()
{
    ...
}

其他控制类
代码接口和Activity一样,都是继承自Base类。区别是具体的实现和对外提供的接口不一样,这一部分和业务相关,描述起来较繁杂,只能通过阅读代码去理解。

2.2 Model层

CommonModel.php
提供常规的数据库接口,为主要的数据库操作类。所有控制类都会初始化该类的对象。

其他Model
提供一些特殊的数据库接口,以完成特定功能,较少用到,实现也较简单。

2.3 View层

activity
活动页。
activitylist.html:活动列表
index_activity.html:活动详情
sign.html:活动签到

datatongji
数据统计。
index.html:数据统计主页
page.html:数据报表

default
首页以及相关详情页。
cover目录:首页相关
cover目录中的页面:
index_indexnews.html:新闻详情页
index_indexzhengce.html:惠企政策页
index_jituangaikuang.html:集团概况页
index_shehuizeren.html:社会责任页
index_zhinengpipei.html:智能匹配页

detail目录:详情目录
detail目录中的页面:
index.html:政策咨询详情页

index目录:页面主目录
index目录中的页面:
index.html:首页

list目录:列表相关
list目录中的页面:
index_app.html:移动端APP显示的页面
index_dajiangtang.html:中皓大讲堂列表
index_fuwuchanpin.html:服务产品列表
index_fuwuchanpin_small.html:服务产品小列表(列表项较少)
index_haochanpin.html:皓产品列表
index_kehuanli.html:客户案例列表
index_listnews.html:新闻资讯列表
index_listzhengce.html:惠企政策列表
index_openapp.html:app下载页
index_qiyejiayuan.html:企业家园列表
index_rongyuzizhi.html:荣誉资质列表
index_zhuanjialiebiao.html:专家列表

page目录:详情页目录
page目录中的页面:
index_dajiatangxiangqingye.html:大讲堂详情页
index_haochanpinxiangqing.html:皓产品详情页
index_jiayuanxiangqing.html:家园详情页
index_kehuanlixiangqingye.html:客户案例详情页
index_news.html:新闻详情页
index_pageprouduct.html:产品详情页
index_rongyuzizhineirong.html:荣誉资质内容
index_yulan.html:图片预览
index_zhuanjiaxiangqingye.html:专家详情页
index_zigongsi.html:子公司详情页

public目录:公共模板页
public目录中的页面:
footer.html:页脚
header.html:页头
liuyan.html:留言编辑区
nav.html:导航栏
pinglun.html:评论区
reglogin.html:注册登录

index
index目录中的页面:
gb.html:贯标详情页
xmsb.html:项目申报详情页

liuyan
留言
liuyan目录中的页面:
index.html:留言页面

live
直播
live目录中的页面:
index.html:直播列表页面
article.html:直播详情页

message
消息
message目录中的页面:
index.html:消息列表页面

order
order目录中的页面:
index.html:订单页面

process
订单处理
process目录中的页面:
generateorder.html:生成订单页面
purchase.html:商品详情页面
verification.html:订单提交页面

public
公共页
public目录中的页面:
error.html:错误提示页面
success.html:成功提示页面

2.4 Validate层

ActivityValidate.php:活动规则验证
LiuyanValidate.php:留言规则验证

3.伪静态技术

搜索引擎通常只对静态网页进行检索,而动态页面需要等待服务器编译生成html页面,因此搜索引擎无法搜索动态页面生成的内容。伪静态是这样一种技术:页面对搜索引擎表现为静态特性,而实际服务器处理的时候却是作为动态页面进行处理的。也就是说搜索引擎在查找该网页内容不会像静态页面那样直接返回,而是等待动态内容生成完之后再返回。因此,伪静态实现了搜索引擎对动态网页的搜索。缺点是伪静态页面的搜索效率没有静态页面高。
具体到我们的应用中,当我们点击首页菜单栏的链接时,地址栏会出现这样的url:http://aaa.123.cn/arlist/28/38。这是一个典型的动态路由,url中两个参数传到服务器后,服务器查找相关的数据库配置来返回对应的页面。在controller目录的index.php文件可以找到相关的处理逻辑。具体的动态路由配置,要参考数据库配置。
核心代码:

     */
    public function arlist() {
      ...
      //对不同的页面参数进行不同处理
        if ($column['type'] == 1) { //封面
            $tem = $common->getOneMsg('template', array('id' => $column['index_type'], 'status' => 1));
//      var_dump($tem);die;
            //判断没有模板不能预览
            if (empty($tem['name'])) {
                $this->error('该文档不支持预览或者访问', '/');
            }
            return $this->fetch("default/cover/index_" . $tem['title']);
        } else if ($column['type'] == 2) { //列表
            $tem = $common->getOneMsg('template', array('id' => $column['list_type'], 'status' => 1));
//      var_dump($tem);die;
            //判断没有模板不能预览
            if (empty($tem['name'])) {
                $this->error('该文档不支持预览或者访问', '/');
            }
            return $this->fetch("default/list/index_" . $tem['title']);
        } else if ($column['type'] == 3) { //页面
            $tem = $common->getOneMsg('template', array('id' => $column['content_type'], 'status' => 1));
            //判断没有模板不能预览
            if (empty($tem['name'])) {
                $this->error('该文档不支持预览或者访问', '/');
            }
            return $this->fetch("default/detail/index_" . $tem['title']);
        } else if ($column['type'] == 4) { //栏目绑定信息
            return $this->fetch("");
        }

        $this->assign("selfconfig", load_config());
    }

4. 总结

以上是本人在修改php官网时,总结的几个技术的核心关键点,并不涉及具体的业务处理。个人觉得,根据这些关键点去梳理业务,比较容易理顺具体的实现思路。同时,这仅是一个平台页面的框架性描述文档,不涉及数据库表结构和后台处理的逻辑。关于这一部分,还需要更深入地分析源码。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349