thinkphp3的访问模式是

http://域名/项目名/分组名/模块名/操作名/其他参数

1我们的模块位于home 我们的action是专题页面

根据thinkphp3.0  5.3定义action的文档

所以第一步我在 App/Lib/Action/Home/目录下增加ZhuantipageAction.class.php

继承自  HomeBaseAction 然后有一个public的方法 demo 访问的时候有

http://localhost/index.php/home/Zhuantipage/demo 就可以了

但是由于我们专题可能就是上html页面,所以不可能每个专题写一个方法。

所以我们新建一个zhuanti方法。在前面 http://域名/项目名/分组名/模块名/操作名/其他参数 的基础上。让专题名成为其他参数

我们在zhuanti方法中通过_GET获取这个参数,然后根据专题名字zhuantiname 调用display显示模板以及内容

如上就调用了display(jiaozheng.html) 显示这个页面。那jiaozheng.html这个页面放在哪里呢?

根据7.1的视图模板定义来说

所以我们的jiaozheng.html应该放在

App/Tpl/Home/Default/Zhuantipage/jiaozheng.html

这样的话。我们就可以通过访问

http://localhost/index.php/home/zhuantiPage/zhuanti/jiaozheng.html

来访问矫正的页面了.注意了这里的html是模板,可以通过内置输出比如{$Title} ----- {$WebName}这样的形式输出php的内容

这些内容是在哪里赋值的呢?( 这里Title和WebName里面的数据实际位于 youdian_config表)

这里还记得我们继承了HomeBaseAction。在HomeBaseAction继承 BaseAction 里面有一个_initialize()函数

$this->_getPublicVar();
        $this->_assignPublicVar();

$this->assign('WebName', $GLOBALS['Config']['WEB_NAME']);

$this->assign('Title', $GLOBALS['Config']['TITLE']);

那这个 $GLOBALS['Config']['TITLE']又是哪里来的呢?

这个配置的GLOBALS['Config']['TITLE']应该是来自Config_cn.php里面return的array里面。因为这些arrary都会被放置到GLOBALS变量里面

位于 CheckLangBehavior.class.php run方法里面$this->checkLanguage();

//加载全局用户配置变量
 $GLOBALS['Config'] = YdCache::readConfig();

readconfig位于common.php中

 static function readConfig($item=false){$file = 'config_'.get_language_mark();$data = F($file);if( empty($data) ){YdCache::writeConfig();$data = F($file);}if( $item !== false ){$data = isset($data[$item]) ? $data[$item] : '';}return $data;}

首先是根据语言检查文件。读取文件。如果这个config_cn.php是空的。那么执行writeconfig 这个就是从数据库中读取数据并且保存为config_cn.php文件

static function writeConfig(){$configFile = 'config_'.get_language_mark();//存储在数据库中的配置项缓存$m = D('Admin/Config');$data = $m->getConfig();  //读取所有配置项数据//Tag标签数据缓存$m = D('Admin/Tag');$data['TAG_LIST'] = $m->getTagField();//频道缓存$m = D('Admin/Channel');$data['CHANNEL_DATA'] = $m->writeCache();//保存为缓存文件F($configFile, $data);  return $data;}

最后一个问题就是 CheckLangBehavior.class.php 这个run方法是什么时候被运行的呢?

这个可以参考thinkphp实战记录3里面的内容 其实实在执行tag标签的时候运行的。

我们看到在Core/conf/tags.php里面有个app_begin=>arrary() 里面有"checkLang"

'app_begin'=>array( //因为项目中也可能用到语言行为,最好放在项目开始的地方'CheckLang', //检测语言, 一定放在ReadHtmlCache前,否则会导致静态缓存有问题//'BadIP',  //ip过滤'StartWeb', //启动Web'ReadHtmlCache', // 读取静态缓存)

根据描述。就是在调用tag('app_begin')的位置就会按顺序调用CheckLangBehavior.class.php

StartWebBehavior.class.php ReadHtmlCacheBehavior.class.php里面的run方法。

这个是在app.class.php的run方法里调用了 tag('app_begin');

thinkphp youdian cms 实际操作 增加专题页面 以及行为扩展解释相关推荐

  1. 帝国CMS怎么新增加专题页面 帝国cms增加专题图文详解

    帝国CMS的专题功能说明 (一).帝国CMS主要有以下两种用途: 1.将已有栏目下的信息进行再次分类.就像我们在论坛中看到的精华贴子,将精华的内容放到专题,方便用户查看.此类型一般采用列表式. 2.建 ...

  2. thinkphp youdian cms 实际操作 eq list等解析

    参见tp3.0手册8.13  <eq name="name" value="value">相等<else/>不相等</eq> ...

  3. thinkphp youdian cms 实际操作 常用变量输出

    cms首页 头部是 <span>{$T4|ChannelName}</span> 这种模式是 模板引擎中使用函数 表示这里span里面的值是 ChannelName($T4); ...

  4. youdian cms 数据库以及结构

    youdian cms用频道来控制页面层级的归属. 所有的频道都位于youdian_channel表内 每一个频道都有一个频道ID,也有他的父频道.还有haschild表示他是否有子频道. 顶部的导航 ...

  5. ThinkPHP采用模块和操作

    ThinkPHP采用模块和操作的方式来执行,首先,用户的请求会通过入口文件生成一个应用实例,应用控制器(我们称之为核心控制器)会管理整个用户执行的过程,并负责模块的调度和操作的执行,并且在最后销毁该应 ...

  6. php制作404,利用thinkphp怎么制作一个404跳转页面

    利用thinkphp怎么制作一个404跳转页面 发布时间:2020-12-14 15:46:55 来源:亿速云 阅读:97 作者:Leah 本篇文章给大家分享的是有关利用thinkphp怎么制作一个4 ...

  7. html中dom多会有影响吗,DOM操作造成的页面卡顿问题及解决

    相关目录 以下为我总结的其他性能优化点,欢迎参考,指点及吐槽 前言 界面上UI的更改都是通过DOM操作实现的,并不是通过传统的刷新页面实现 的.尽管DOM提供了丰富接口供外部调用,但DOM操作的代价很 ...

  8. 重构我的CMS系统,增加ORM

    重构我的CMS系统,增加ORM Web层,采用WebService + Ajax (支持Web,WAP) Model实体层,略 SystemFramework层,主要是载入配置信息,资源文件等 Com ...

  9. 专题页面设计,怎么做更符合网站SEO?

    通常我们做网站SEO,时间较长之后,网站中势必会出现大量具有相关性的文章,因此我们可能会通过tag标签进行汇集,然而只是利用tag标签来进行文章的简单汇集,又过于简陋,并不是最符合用户体验的方式,因此 ...

最新文章

  1. python中排序英文单词怎么写_Python实现对文件进行单词划分并去重排序操作示例...
  2. 玩转Autorun.inf
  3. 编程判断某个数为素数_【每日编程233期】素数对猜想
  4. vue实现表格组件,带分页
  5. Kafka为什么速度那么快?
  6. ios整理(一)控件
  7. js高级 — ES6
  8. python爬取天气数据山东_Python的学习《山东省各城市天气爬取》
  9. myeclipse中将web项目部署到tomcat里面出错
  10. Win10系统更新后旧系统清理
  11. win10相机计算机无法使用,Win10相机打不开 报错“0xa00f4244”要怎么解决?
  12. java webservice测试_搭建Soap webservice api接口测试案例系统
  13. 华为freebuds pro和airpods pro降噪对比 华为freebuds pro和airpods pro参数对比
  14. R语言学习2.1.数值型与字符型
  15. cnn风格迁移_机器学习:利用卷积神经网络实现图像风格迁移 (一)
  16. 服务器攻击瘫痪,网站瘫痪,企业如何应对频发
  17. java label对齐方式_java – 在BorderLayout中对齐JLabel和JTextField
  18. 判断是pc端还是手机端
  19. cp symbolic links 引发Too many levels of symbolic links
  20. Java 获取当前时间戳

热门文章

  1. maven +jfinal +bettl 整合
  2. 画一个 “月饼” 陪我过中秋,玩转炫彩 “月饼” 之 基本测试
  3. Microsoft® Windows® 恶意软件删除工具
  4. SecureCRT中复制快捷键
  5. SQL表中存储计算公式,直接执行
  6. mysql 1061报错_mysql主从 1061 log同步错误处理
  7. fifs调度算法c语言,《FIFA足球经理》97之终极完全训练法
  8. 怎样区分硬解机和软解机?
  9. 题解| 前端面试题分析之美团
  10. excel 打开时提示是否安装office自定义项